性能测试能力提升-线程、并发、吞吐量、TPS、QPS、响应时间

性能测试能力提升-线程、并发、吞吐量、TPS、QPS、响应时间,第1张

一、背景

接着上一篇的知识:性能测试能力提升-关于性能测试,本篇文章,我们将主要介绍以下几方面的知识:

  • 线程数&并发用户数
  • 相对并发&绝对并发
  • 吞吐量
  • TPS&QPS
  • 响应时间
二、线程数、并发用户数

线程数: 主流的性能测试工具(Jmeter/Loadrunner),以线程式并发的方式,启动复数个线程,让每个线程独立向服务器端发出请求,帮我们达成“短时间内向服务器发送大量请求”的任务。

有时候我们在描述性能测试过程时,会将这个客户端的独立线程数表述为“并发数”。

注意: 这里的“并发”指的是客户端并发,并不是服务端的并发。很简单,客户端能发出很多请求,服务器却未必能处理得了~

并发用户数:某一时刻同时向服务器发送请求的用户数。

需要明白的一个误区:并发用户数和 jmeter 的线程数,它们是不对等的。并发用户数应该和 tps 是一个概念,假如需求是想获取 1000 个用户同时 *** 作时,系统能否承受得住或者系统各项指标反应如何,我们应该拿 tps 来给出答案。jmeter 的线程数大小仅仅是一个压力的大小概念。

常见问题:计算最大线程数
查询功能,需要系统能够在5分钟内能完成5000笔查询业务,同时用户响应时间不超过3s,该用多少线程数施压?
计算公式:最大线程数= (单次响应时间业务量)/总的业务时间
答案:(3
5000)/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、小程序测试、测试工具、测试开发、测试框架/平台、测试管理…

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/730821.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存