性能测试中的场景设计和测试执行

假设一个内部系统要求响应时间在 3s 以内,支持最大用户数为4万。根据二八原则,80%用户在20%时间使用系统,(4w80%)/(24h20%)≈1.9点击/秒。并发数=TPS(运行时间+思考时间)=1.9(3+0.5+0.3+3+0.5+0.3+0.5+3)=21。
注意:二八原则计算的结果并非是并发数,而是系统要达到的处理能力(吞吐量),初学者容易被误导,拿着这个数据就去设置并发数,这是错误的哦。 如果你的系统性能要求更高,也可以选择一九原则或更严格的算法,二八原则比较通用,一般系统性能比较接近这个算法而已,大家应该活用。

基于以上,如果我们通过测试得到的最大吞吐量大于计算出来的吞吐量(TPS≈1.9),且各项性能指标均达标,那么系统就是安全的。如果用户发帖遵循正态分布,那么并发请求数峰值还肯定会大于上述估算的吞吐量(并发数大于吞吐量???)。

一、场景设计

场景编号:001 - 基准测试

目的:验证测试环境、验证脚本,得到系统的性能基准,为后续测试提供参考。

涉及业务 业务占比 运行时间 并发数
浏览任务 20% 5分钟 1
登录 20% 1
新建任务 20% 1
配置任务 20% 1
删除任务 20% 1
场景编号:002 - 配置测试

目的:优化配置,测试当前软、硬件配置是否能够满足性能指标。

涉及业务 业务占比 运行时间 并发数
浏览任务 38% NA 8
登录 28% 6
新建任务 19% 4
配置任务 10% 2
删除任务 5% 1
场景编号:003 - 负载测试

目的:分析性能变化趋势,找出性能瓶颈与风险,对系统进行定容定量。

涉及业务 业务占比 运行时间 并发数
浏览任务 38% NA 8/16/24
登录 28% 6/12/18
新建任务 19% 4/8/12
配置任务 10% 2/4/6
删除任务 5% 1/2/3
场景编号:004 - 稳定性测试

目的:长时间(>8小时)运行大量负载,确定系统软硬件环境是否运行稳定。

涉及业务 业务占比 运行时间 并发数
浏览任务 38% >12小时 42
登录 28%
新建任务 19%
配置任务 10%
删除任务 5%

二、场景实现

单线程组实现测试场景

假设业务比例为 “查看详情(8):登录(6):新建任务(4):(配置任务)2:(删除任务)1”。差不多每3个登录会有4个查看任务,新建2个任务,配置1个任务;每6个登录,删除1个任务。我们使用 If逻辑控制器 + ${__counter(arg1, arg2)}函数来实现。

  • 新建任务的If控制器条件:登录(3)/新建(2)
    ${__counter(true,i)}%2==1||${__counter(true,i)}%3==0
  • 配置任务的If控制器条件:登录(3)/配置(1)
    ${__counter(true,i)}%3==0
  • 删除任务的If控制器条件:登录(6)/删除(1)
    ${__counter(true,i)}%6==0
  • 查看任务:因为配置和删除操作包含查看的业务,所以单独的登录/查看比为6:(8-2-1),即6:5。
    ${__counter(true,i)}%5!=0||${__counter(true,i)}%6==0
多线程组实现测试场景

多线程组的场景设计需要注意的是业务关联关系。比如查看任务可以不需要登录的;新建、配置、删除任务都需要登录且并发数的和大于登录,说明有些场景是登录后执行了多业务的;查看详情的并发数小于登录,所以有部分用户可能是登陆后只查看了详情。按照 “查看详情(8):登录(6):新建任务(4):(配置任务)2:(删除任务)1” 的比例,以及用户实际使用场景来算,得到如下场景:

  1. 登录(2)-新建任务(2)
  2. 登录(2)-新建任务(2)-配置任务(2)-查看详情(2)
  3. 登录(1)-查看详情(1)-删除任务(1)
  4. 登录(1)-查看详情(1)
  5. 查看详情(4)
两种脚本实现方式的对比
对比 单线程组 多线程组
优势 参数化容易,保证运行的线程间的参数的唯一性。 线程组间互不干扰,简单明了,易于维护。
劣势 脚本顺序执行,相互之间有影响;脚本复杂度高。 多个线程组相当于多个不同的脚本,需要分开参数化,保证每个线程取到参数的唯一性。

三、测试执行

场景编号:001 - 基准测试

基准测试采用单用户单业务场景的执行方式。测试时间尽可能长,尽量执行多次(通常建议3次以上),取相对稳定的结果,目的是统计响应时间的取样更多,测试结果越准确。对于发现的异常,如果不熟悉就请开发团队告诉你有哪些作业任务,这些作业任务的频度是否适中。

基准测试_聚合报告

基准测试_ResponseTime

基准测试_TPS

结论:满足性能需求3s以内,事务正确率100%,且CPU、内存、磁盘表现正常(局域网不考虑网络影响)。测试环境检查通过,脚本检查通过,可以考虑对系统进一步的测试。

场景编号:002 - 配置测试

先确定配置测试的目标:
(1)JVM配置
(2)Tomcat线程池配置
(3)数据库连接池配置
(4)数据库的一些配置

配置测试场景一般为混合场景(多个业务同时执行)。

(1)JVM Heap大小及不同代的大小指定???Heap回收算法的选择???(P316)
(2)Tomcat线程数配置???
(3)数据库缓存、临时表空间,大表水平切分,主从结构、读写分离、主从备份、主主备份等???。

配置测试_聚合报告

配置测试_ResponseTime

配置测试_TPS

结论:随着并发数的增加,响应时间也逐渐增加,但仍然满足3s以内的性能指标;事务正确率100%;查看详情、登录、新建任务、配置任务、删除任务各业务之比接近6:8:4:2:1;TPS未出现明显拐点;CPU、内存、磁盘均正常。性能表现能够满足需求,系统性能瓶颈风险在CPU。

场景编号:003 - 负载测试

负载测试在满足系统性能指标的基础上进行测试,寻找性能的拐点。负载测试分为单场景混合场景。单场景有利于分析性能问题,因为排除了其他业务干扰;混合场景更贴近用户实际使用习惯,是一个综合的性能评估。建议先做单场景测试,再做混合场景测试。
我们一般采用二分法,如总的线程数递增为21/42/84,当发现线程增大后性能降低,再对该区间进行二分尝试,最后对拐点附近精细尝试得到最大吞吐量。

负载测试_聚合报告

负载测试_ResponseTime

负载测试_TPS

负载测试_CPU

结论:执行过程中,CPU首先出现性能瓶颈,利用率接近100%。响应时间开始大于3s,TPS降低,出现失败的事务。此时的内存、磁盘、网络均表现正常。此时应优先解决CPU的瓶颈问题,再反复进行负载测试,直到在没有硬件瓶颈的条件下找到系统的性能拐点。

场景编号:004 - 稳定性测试

稳定性测试在正常性能阀值下尽量加大负载。什么是阀值呢?比如响应时间要求3s以内,3秒就是阀值;比如CPU利用率70%以下,70%就是阀值。假设满足性能要求的负载是B,那么稳定性测试时负载一般是1.5B~2B。

在此案例中我们满足性能需求的并发量是21,那么在做稳定性测试时,并发量应该是1.521~221即32~42之间。运行时间原则上越长越好,惯例要求不低于8小时。有些隐藏较深的诸如内存溢出的问题是需要长时间运行才能反映出来的。如果各项性能指标都在阀值内,且性能表现平稳,则可以认为通过稳定性测试。

除了分析响应时间、TPS和服务器硬件性能外,我们也要关注JVM内存回收情况,MySQL有无慢查询等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,920评论 2 89
  • 摘要:性能测试是指在一定硬件条件下,获取软件系统在不同的业务背景下的各种性能表现,本文根据笔者最近所做的几次性能测...
    测试小蚂蚁阅读 1,536评论 0 5
  • 现如今 我终于变做了你的模样 将那些过往反弹到你身上 你宛若失忆的智障 谴责我的自私、冷漠与小肚鸡肠
    大燕北北阅读 176评论 0 1
  • 尊敬的各位领导,各位煌亲,各位来宾,大家下午好! 我是加盟商联合会新生代分会副会长胡榜娥!首先感谢公司...
    60c5ad9c19ea阅读 243评论 0 0
  • 一連忙了好幾天,早上爬起來補充能量,聽王偉分享如何「好好說話」。開頭聽到古人的智慧就醒了,一句話在出口之前,先思考...
    品思陈资璧Phoebe阅读 267评论 0 0