前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JMeter吞吐量误差分析

JMeter吞吐量误差分析

作者头像
FunTester
发布2020-04-03 15:37:08
1.4K0
发布2020-04-03 15:37:08
举报
文章被收录于专栏:FunTesterFunTester

JMeter吞吐量可能是个假数据,因为它计算的是本机而不是服务端。

我自己并不用JMeter进行压测,故事的缘起是因为看到了同事适用JMeter进行测试的测试报告,偶然间发现一个问题,JMeter报告中的吞吐量误差较大。结果如图:

按照经典理论模型计算吞吐量TPS或者QPS应该是等于并发线程数除以平均响应时间:

tps =Thread / AVG(t)

或者 tps = COUNT(request) / T

大家看第一个案例:平均响应时间593ms,100并发,计算得到的吞吐量为:168.63,JMeter给出的吞吐量为166.4,误差几乎可以忽略。再看第三个案例:100并发,平均响应时间791ms,计算得到的吞吐量为126.422,JMeter给出的吞吐量为92.3,误差已经很大了。

到底是什么原因导致误差如此之大呢,经过研究同事的压测过程,发现了在第三个案例中,他使用了较多的正则匹配来校验响应返回值。那么是不是JMeter在处理返回值消耗的时间较多导致了计算吞吐量误差的呢?不由让我想起之前的文章:利用微基准测试修正压测结果性能测试如何减少本机误差

那么我们通过一个实验验证一下:首先写一个脚本,我用了单线程的脚本,请求10次看结果:

看结果,平均响应时间207ms,一个并发,计算得到的结果为4.83,JMeter给出的结果4.8,符合预期。

然后我用一个Groovy后置处理器,让线程休眠500ms,然后还是单线程并发,请求10次的结果:

看结果,平均响应时间193ms,跟第一次结果差不多,JMeter给出的吞吐量值为1.5,误差巨大。

那么1.5的吞吐量是怎么来的呢?我们给193ms加上我们的等待500ms(这里是应该加上500 * 9 / 10),计算结果为1.54,跟JMeter给出的1.5符合,基本可以断定JMeter在计算吞吐量时候,把本机处理的过程也是计算在内的。

如果JMeter在整个请求过程中平均响应时间是正常统计请求发出到接收到响应的时间,但是吞吐量缺失用本机的整个线程一次循环的时间作为吞吐量计算的依据。

如果你在线程中做了别的事情,比如正则提取,参数校验,变量赋值等等都会导致吞吐量会变小。而一旦本机处理时间增加,那么压测过程中给服务端的实际压力也是比配置的要小,如果本机性能消耗过大或者某些地方发生等待,那么得到的吞吐量就可以当做一个假数据处理了。

这里我给出一个方案利用微基准测试修正压测结果性能测试如何减少本机误差

如果发现误差较大,一定要进行结果修正,避免假数据。


  • 郑重声明:文章首发于公众号“FunTester”,禁止第三方(腾讯云除外)转载、发表。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
网站渗透测试
网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档