谈到性能测试,大家一定会联想到 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:使用 Jmeter 录制一个 web 页面
步骤 2:建立测试计划,各自运行脚本一次,运行的过程通过(wireShark 抓包)
步骤 3:通过对 wireShark 网络抓包结果分析 HTTP 请求的顺序。
步骤 4:wireShark 抓包获得的 HTTP 请求顺序与浏览单独访问 URL 时的幕布对比。
基于以上思路我们从网络上选取一个 web URL(http://59.110.158.28/static2.html) 作为被测试对象
通过 Jmeter 5.1 工具自带的代理录制功能,录制上述 URL,在录制的过程中按 F12 键,切换到 network 选项。
注意:Jmeter 录制时必须按 F12,把 chrome 的 network 打开才录制到完整的 HTTP 请求,否则可能只能录制到第 1 条请求。
Jmeter 脚本录制时的页面 HTTP 瀑布图
单击 Jmeter 的测试计划启动按钮,单用户启动执行一次脚本
注:此图通过 wireShark 的网络抓包获得 HTTP 请求的开始与结束时间,再通过 excel 画出瀑布图
从 Jmeter 的测试计划执行结果的 wireShark 抓包分析的瀑布图看,Jmeter 对 HTTP 请求是按串行下发请求(前一个请求返回结束,下一请求才开始下发请求),并发数为 1 个 HTTP,从开始执行到最后执行结束,用时超过 3 秒钟,真实浏览器单独访问 URL 时长在 1 秒左右。
Jmeter 可用于开发人员在产品开发中的功能调试使用并做一些非定量的性能测试,不适用于测试人员做定量的性能测试,更不能以此测试结果输出测试结论误导他人。
如果 web 服务器对外提供的服务是纯 HTTP 接口功能 (非 web 页面),且用户的访问是线性的(串行该问),则可以考虑使用 Jmeter 测试。即使 web 服务器对外提供的服务是纯 HTTP 接口功能 (非 web 页面),如果用户访问是非线性,那么测试的结果也是不可靠的。记住一点,只有线性的接口请求模型才适用于 Jmeter。