性能测试工具 性能测试工具 Jmeter 你所不知道的内幕

SagacitySea for 性能测试工具大比拼 · 2021年09月01日 · 最后由 SagacitySea 回复于 2021年09月02日 · 4713 次阅读

谈到性能测试,大家一定会联想到 Jmeter 和 LoadRunner,这两款工具目前在国内使用的相当广泛,主要原因是 Jmeter 是开源免费,LoadRunner 11 在现网中存在破解版本。商用型性能测试工具对于中小型企业很难承担相关的费用。国内的性能测试工具有:CPTS(华为)、kylinTOP(奇林)、PTS(阿里)等,国外的性能测试工具 LoadRunner 相对比较出名。Loadrunner 在国内出名的原因主要还是因为 LoadRunner 进入中国的市场比较早,而且网上还存在破解版本。现在我们主要研究一下 Jmeter 工具。网络上经常看到网友们抱怨 Jmeter 工具测试的结果不准,而为什么不准都是丈二的和尚摸不着头脑。那么今天我就和网友们分享一下 Jmeter 工具在使用上到底有什么限制,以期对网友们有帮助,提高对 Jmeter 工具的认知。

Apache 软件基金会(ASF)是一家总部位于美国的非营利性慈善组织。ASF 的所有产品都通过公共论坛的在线协作开发,并从美国境内的中央服务器分发。Jmeter 是 ASF 的一款开源免费软件 ,在国内被很多中小公司当作性能测试工具广泛使用。该款工具的本意不是用于性能测试,而是用于开发人员的接口功能调试使用。

Jmeter 做性能或压力测试,首先要建立一个线程组,如果需要事务在线程组内再添加事务,然后根据需要可以设置并发的虚拟用户数。Jmeter 构造并发虚拟用户的技术路线是通过构造线程,每个线程同时运行相同的线程组。为了弄清楚 jmeter 统计结果不准确,首先我们要搞清楚 Jmeter 对线程组中的 HTTP 请求运行的机制。

1、 测试思路

步骤 1:使用 Jmeter 录制一个 web 页面

步骤 2:建立测试计划,各自运行脚本一次,运行的过程通过(wireShark 抓包)

步骤 3:通过对 wireShark 网络抓包结果分析 HTTP 请求的顺序。

步骤 4:wireShark 抓包获得的 HTTP 请求顺序与浏览单独访问 URL 时的幕布对比。

2、选择被测试对象

基于以上思路我们从网络上选取一个 web URL(http://59.110.158.28/static2.html) 作为被测试对象

3、脚本录制同时 F12 打开 Chorme 的 network 选项

通过 Jmeter 5.1 工具自带的代理录制功能,录制上述 URL,在录制的过程中按 F12 键,切换到 network 选项。

注意:Jmeter 录制时必须按 F12,把 chrome 的 network 打开才录制到完整的 HTTP 请求,否则可能只能录制到第 1 条请求。


Jmeter 脚本录制时的页面 HTTP 瀑布图

4、执行性能测试计划

单击 Jmeter 的测试计划启动按钮,单用户启动执行一次脚本


注:此图通过 wireShark 的网络抓包获得 HTTP 请求的开始与结束时间,再通过 excel 画出瀑布图

5、测试结果分析

从 Jmeter 的测试计划执行结果的 wireShark 抓包分析的瀑布图看,Jmeter 对 HTTP 请求是按串行下发请求(前一个请求返回结束,下一请求才开始下发请求),并发数为 1 个 HTTP,从开始执行到最后执行结束,用时超过 3 秒钟,真实浏览器单独访问 URL 时长在 1 秒左右。

Jmeter 可用于开发人员在产品开发中的功能调试使用并做一些非定量的性能测试,不适用于测试人员做定量的性能测试,更不能以此测试结果输出测试结论误导他人。

如果 web 服务器对外提供的服务是纯 HTTP 接口功能 (非 web 页面),且用户的访问是线性的(串行该问),则可以考虑使用 Jmeter 测试。即使 web 服务器对外提供的服务是纯 HTTP 接口功能 (非 web 页面),如果用户访问是非线性,那么测试的结果也是不可靠的。记住一点,只有线性的接口请求模型才适用于 Jmeter。

共收到 7 条回复 时间 点赞

这结论不太对吧,难道所有场景下接口都可以并行访问不存在依赖?而且 jmeter 也不是不支持并行请求

Jmeter 录制时必须按 F12,把 chrome 的 network 打开才录制到完整的 HTTP 请求,否则可能只能录制到第 1 条请求。这有什么依据嘛?

虽然没用过 Jmeter, 但你这结论看下也感觉不正确啊. 对于静态资源, 每个浏览器都有自己不同的同域名并行下载限制, 像 Chrome 和 Firefox 好像是 6?
而且对于测试工具来说, 它必须支持串行 (同线程下流程场景) 和并行 (线程并发), 所以你测试 1 个线程中 Jmeter 串行应该是正常吧?
另外: 性能测试和性能工具完全不相等,

个人看法 请勿误导他人
有求知精神很好,但不要求知到一半就胡乱下结论,了解更多,思考更多你会有不同的看法
Jmeter 只是工具,工具能做什么事,还是看用它的人,同一把水果刀,有人只能用来切苹果,有人可以用来创造艺术,这不是水果刀的错

本来想吐槽的,发现都被吐槽完了😅

楼主的结论不认同,Jmeter 串行访问,是因为你设置的线程组就是串行的,如果你设置成并行的,那不就跟你的结乱相违背了吗

tangoliver 回复

请问线程组设置并行你怎么设置?Jmeter 只支持设置线程数(不同线程组之间并行),并不支持线程组内设置为并行请求,即一个线程组内的请求为并行行为。请算你能设置为并行请求,也与浏览行为不符合。上面的文章已经有浏览的截图,它是有有先有后且有并行。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册