目录
一、背景介绍
如果你以前从未接触性能测试,完全不懂TPS、吞吐量、响应时间等术语是什么,看这篇!
如果你听说过但不清楚QPS、TPS、吞吐量三者区别和联系?不知道相对并发、绝对并发有区别?不明白线程数、并发数、在线用户数、并发用户数、注册用户数是什么意思?看这篇!!
如果你是同行,想通过一篇文章彻底搞懂性能测试的所有的常用概念,看这篇!!!
耗时1个月,翻过无数文章,走了无数弯路,钻了几次牛角尖,终于理清了一些概念。很多问题到最后才发现,根源在于概念混淆或不理解,如果能深刻理解并能通俗易懂地表达出来是非常重要的,这不仅仅能使得和同事、领导讨论融洽,也能使得和客户沟通流畅无阻。以下会依次展开性能测试常见术语、常见误区、常见问题等经验总结。
二、性能测试常见术语
1、TPS
TPS:Transactions Per Second的缩写,每秒处理事务数,是衡量性能的重要指标之一。事务是指客户端发送一个请求到服务器,服务器内部处理并发送响应结果给客户端,客户端收到结果的过程。
2、吞吐量
计算机网络中的吞吐量:单位时间内成功传输的数据量,单位:GB、MB
性能测试中的吞吐量:单位时间内成功处理的请求数量,请求数量/sec,单位:/sec
TPS和性能测试中的吞吐量的区别:TPS偏向业务事务,吞吐量包括所有类型的事务,关系:吞吐量包含TPS
3、响应时间
RT:Response Times的缩写,处理1个事务响应时间,常和TPS一起出现,是衡量性能的重要指标之一。
4、QPS
QPS:Queries Per Second的缩写,每秒查询数,是衡量数据库、搜索引擎等信息检索系统的在一秒钟内接收到的搜索流量的一种常见度量。
5、HPS
HPS:Hits per Second 的缩写,每秒点击次数,是指在一秒钟的时间内用户对Web页面的链接、提交按钮等点击总和。 它一般和TPS成正比关系,是B/S系统中非常重要的性能指标之一。单接口的TPS和HPS基本一致。
6、相对并发、绝对并发
相对并发:同一时间段正在做某事
绝对并发:同一时间点开始做某事
以打壁球为例,运动员发球,球在空中飞行,球击中墙壁被反弹,球在空中飞行,飞到运动员球拍上。绝对并发就是指球和墙壁接触的一瞬间,相对并发是指从运动员发球->球和墙壁接触->接球的整个过程。将场景替换成性能测试,相对并发是整个过程,绝对并发是实实在在施加压力的瞬间。引用前辈的图,我们预想的情况是下面的小人(请求)严格按照逻辑到达系统,绝对并发用户数是4,1秒内的相对并发用户数是16。
但实际情况真的是那样的吗?如下图,实际上用户会分布在系统中不同的服务、网络、数据库等对象中,那么现在绝对并发用户数如何描述?订单服务的用户数是5,库存服务的用户数是5。如果用CPU、I/O描述呢?绝对时刻的任务数绝不会大于CPU的物理数。所以,抛弃掉相对并发绝对并发吧!意义不大。专业的人都是用TPS、响应时间等指标结合一起去衡量性能测试
7、在线用户、并发用户、注册用户
在线用户:挂在服务器上的用户
并发用户:操作系统的,给服务器施加压力的用户
注册用户:待在数据库里的用户
如何由TPS推断出在线用户数量?根据并发度推算,例如用户登录接口的TPS为200/sec,并发度为10%,那么在线用户数量200/10%=2000
三、性能测试常见误区
1、Jmter线程数是性能指标吗?
答:不是,客户端安装的Jmter里设置的线程数只是客户端向服务器发送请求的线程数,服务器只在乎1秒内处理了多少个请求,至于请求从哪个客户端发出,发出多少是不在意的。在未达到服务器性能瓶颈前,jmter线程数多少是会影响测试结果里的TPS,线程数越多,施加压力越大,性能指标TPS就越大。
众所周知,jmter线程数代表虚拟用户数,如果1个用户1秒能登录1000次,那么TPS:1000/sec,那如果1个用户1秒只能登录1次,如果想达到1000/sec,就需要1000个用户1秒内登录。所以说虚拟用户数并不能作为性能指标,我们要结合TPS、响应时间去分析。
2、如何开展性能测试?
答:性能测试是确定系统在特定负载下的TPS、响应能力、稳定性,包括基准测试、容量测试、稳定性测试、异常场景测试。
2.1 基准测试
对各被测功能对象进行低并发测试,获取基准值,作为后续性能指标的比对基准。通过基准测试可以建立一个已知的性能水平(称为基准线),当系统的软硬件环境发生变化之后再进行一次基准测试以确定变化对性能的影响。场景设计:使用标准的测试工具和方法,测量系统的关键性能指标。
2.2 压力测试
测试系统在超出预期负载条件下的性能,评估系统的稳定性和恢复能力,目标是找出系统的最大承受能力及其在压力下的行为,检查系统的崩溃点和恢复能力。场景设计:施加比正常负载更高的负荷,观察系统的反应和性能下降情况。
2.3 容量测试
通过测试预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数),系统在其极限状态下没有出现任何软件故障且能正常运行。场景设计:逐步增加负载,直到系统无法再接受新的请求或性能急剧下降。
2.4 稳定性测试
也称为疲劳强度测试,属于可靠性测试的范畴。场景设计:通过给系统加载一定的压力,让系统持续运行一段时间(通常为3x24、7x24小时),监测系统性能和资源使用情况,查看有无报错等异常。
2.5 异常场景测试
测试有冗余备份或负载均衡的系统在局部发生故障(数据库异常需要多台服务器才能测试)、服务器断电重启、浪涌测试、CPU/内存/磁盘占满等异常场景下的恢复机制、运行情况。
常用linux命令:
①安装stress:sudo apt install stress;查看版本:stress --version
②终端命令行运行:stress -c 4,CPU被占满
③终端命令行运行:stress -i 2000,占内存
④终端命令行运行:fallocate -l 894G test3,创建一个894G的文件物理占满磁盘
3、如何判定性能测试的通过标准?
答:性能测试的具体通过标准如下:
①根据业务需求设定最大响应时间阈值,单次请求或事务的响应时间在阈值内
②设定系统在一定时间内需要达到的最低吞吐量
③设定系统需要支持的并发用户数
④在目标负载下,CPU、内存、磁盘I/O、网络带宽等资源的使用率应在合理范围内
⑤系统在设定的运行时间内无崩溃、无内存泄漏或无重大性能下降
⑥系统在负载测试中应保持较低的错误率,通常错误率应低于0.1%或其他设定的阈值。
⑦系统在高峰期能够处理瞬间的大量请求
⑧系统具备良好的故障隔离和恢复机制
4、浪涌测试怎么做?
答:添加终极线程组Ultimate Thread Group,设定合理的线程数,运行即可
5、数据库报错:target host as windows……怎么处理?
答:win+r,输入services.msc,启动mysql
四、Jmeter使用过程中的常见问题
1、报错code:500,将参数格式改为消息体数据格式上传
2、报错code:400,参数错误,仔细检查有无嵌套、类型是否正确;HTTP信息头管理器有多余的空行,删除掉
3、报错code:404,路径错误
4、共享Toekn,http信息头管理器放测试计划里;私有Token,http信息头管理器放线程组里
5、消息体数据不能加注释,例如://我是注释
6、路径带参数的POST方法,请求体要勾选multipart/form-data
7、当steeping thread group报错时,可改用普通线程组,没有必要纠结必须使用前者