一、背景
接着上一篇的知识:性能测试能力提升-关于性能测试,本篇文章,我们将主要介绍以下几方面的知识:
- 线程数&并发用户数
- 相对并发&绝对并发
- 吞吐量
- TPS&QPS
- 响应时间
二、线程数、并发用户数
线程数: 主流的性能测试工具(Jmeter/Loadrunner),以线程式并发的方式,启动复数个线程,让每个线程独立向服务器端发出请求,帮我们达成“短时间内向服务器发送大量请求”的任务。
有时候我们在描述性能测试过程时,会将这个客户端的独立线程数表述为“并发数”。
注意: 这里的“并发”指的是客户端并发,并不是服务端的并发。很简单,客户端能发出很多请求,服务器却未必能处理得了~
并发用户数:某一时刻同时向服务器发送请求的用户数。
需要明白的一个误区:并发用户数和 jmeter 的线程数,它们是不对等的。并发用户数应该和 tps 是一个概念,假如需求是想获取 1000 个用户同时操作时,系统能否承受得住或者系统各项指标反应如何,我们应该拿 tps 来给出答案。jmeter 的线程数大小仅仅是一个压力的大小概念。 常见问题:计算最大线程数 查询功能,需要系统能够在5分钟内能完成5000笔查询业务,同时用户响应时间不超过3s,该用多少线程数施压? 计算公式:最大线程数= (单次响应时间业务量)/总的业务时间 答案:(35000)/5*60=50
三、相对并发和绝对并发
什么是相对并发和绝对并发?
相对并发:指在一个时间段内发生的事情。在jmeter的测试计划中添加线程组,设置线程属性,2秒之内启动10个线程,其对应的相对并发为5(线程数/启动时间)。
绝对并发:指在同一时刻发生的事情。jmeter可以使用同步定时器(Synchronizing Timer)实现绝对并发,也就是同一个时刻达到了某一集合点才发出请求。
压测时选用哪个更合适?
绝对并发的优点:对服务器来说,会产生一种瞬间高并发。 绝对并发的缺点:对服务器来说,平均压力会降低。
根据业务来选择: 如果业务场景是瞬间高并发类型的,如抢购、秒杀等,需要加集合点。 或者是多场景测试,你需要确保数据流上下游关系,控流的时候可以考虑. 其他场景都不需要加,加了集合点后,就不适用tps来衡量系统性能。 集合点功能要慎重选择: 因为加了集合点后,系统的平均压力会降低。原因是多线程在集合的时间,服务器和数据库都处于休息状态,他们会有足够的时间去释放连接和内存等恢复工作。
有些加了集合点并发测试通过了,但是上线后就出现某些资源占满情况,就是因为线上真实场景是不会集合的,也就是不会给服务器一个缓解的时间。
四、吞吐量
吞吐量是服务端的指标:吞吐量是站在“量”的角度去度量,是一个参考指标, 是指单位时间内系统能处理的请求数量,体现系统处理请求的能力,这是目前最常用的性能测试指标。
但是光有“量”的数据有时候并无太大价值,一家餐厅1个小时卖出100份餐品和一个月才卖出100份餐品,单从“量”的维度衡量肯定不行,时间维度很重要!
性能测试领域的吞吐量通常会结合上时间维度进行统计。如果吞吐量的“量”以“事务”为统计单位的话,结合时间维度,就可以换算成TPS。
五、TPS & QPS
QPS: Queries Per Second,每秒查询率,是一台服务器每秒能够响应的查询次数(数据库中的每秒执行查询sql的次数)。
因此QPS代表的场景不够全面,仅仅适用于只执行单次查询的接口,不建议用QPS来作为系统性能指标。
TPS: Transactions Per Second,每秒事务数,具体事务的定义,是人为制定的,可以是一个接口、多个接口、一个业务流程等等……
以单接口定义为事务为例,每个事务包括了如下3个过程:
- 向服务器发请求.
- 服务器自己的内部处理(包含应用服务器、数据库服务器等)
- 服务器返回结果给客户端
如果每秒能够完成N次这3个过程,TPS就是N。 如果多个接口定义为一个事务,那么这多个请求完成一次,算做一个TPS。
TPS和QPS的关系: 如果是对一个查询接口(单场景)压测,且这个接口内部不会再去请求其它接口,那么tps=qps,否则,tps≠qps。 如果是容量场景,假设n个接口都是查询接口,且这个接口内部不会再去请求其它接口,qps=n*tps。
如何估算TPS: 根据已有接口评估: 如果是一个老接口–上一次大促峰值的3-5倍为目标TPS 如果是一个新接口–可以参考相同业务场景的其他接口目标制定
根据业务量评估: 案例: 预期20万注册用户,其中每天活跃用户峰值预计占10%,首页存在游客访问则增加一倍;活跃用户平均每人每天访问接口4次;访问时间段大多数在20:00-21:00
计算方式: 通过二八原则,80%的业务在20%的时间产生 峰值TPS=业务量 * 80%/业务时段(秒)* 20% 计算:200000 * 10% * 2 * 4 * 80%/3600 * 20%=178
六、响应时间
最小、最大、平均、90th pct:最小响应时间、最大响应时间、平均响应时间都很好理解。 这里只单独说一下90th pct的含义: 表示将整个测试过程中,接口所有请求的所有响应时间按从小到大排列为N个点,取N*90%这个点的响应时间即为此请求的90%响应时间,其代表90%的请求在此响应时间以内。
知识扩展:Std.Dev: Standard Deviation
在Jmeter的监听器summary report中,我们会看到有这样的一个字段: 那这个字段是什么意思呢?解释如下:
std.deviation: 标准偏差,一种度量数据分布的分散程度之标准,用以衡量数据值偏离算术平均值的程度.
标准偏差的值越小,则说明各个样本的响应时间越接近平均值,一定程度上也表明系统更加稳定.
计算标准偏差的值,可以在Excel中使用公式:=STDEV.P() 来计算.
举个例子: 两组数据,平均值都是70,但是明显第二组数据相比第一组数据,各个样本的值更接近平均值: 计算两组数据的标准偏差值,第二组2.16,第一组17.07,因此标准偏差的值越小,则说明各个样本的值越接近平均值:
============================================================================
以上就是本次的全部内容,如果对你有帮助,麻烦点个赞+收藏+分享,你的支持就是作者更新最大的动力~
下一篇文章,我们将主要介绍以下几方面的知识:
- 基准测试、负载测试、压力测试、容量测试
- 负载测试知识扩展:阶梯式加压
- 压力测试知识扩展:稳定性、破坏性压测
- 容量测试知识扩展:容量指标选取、容量规划、扩容手段
欢迎关注我的微信公众号:程序员杨叔, 测开一枚,持续分享全栈测试知识干货。标签:自动化测试、性能测试、Java、Python、DevOps、CI/CD、小程序测试、测试工具、测试开发、测试框架/平台、测试管理…
|