jmeter非GUI(cmd命令行)模式的压测和输出测试报告
1、非GUI模式的压测,和GUI有啥不同?
2、非GUI模式怎么搞?
大家打开jmeter的时候,都会看到这个界面:
注意看这句话:
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
意思就是:不要使用GUI模式来进行压力测试!只有在脚本创建、调试的时候才用到它。
我们平常用jmeter跑脚本的时候,都是直接打开,新建线程组、http请求以及各种元件,然后一按“运行”,就哗啦啦跑起来。如果是进行常规的接口测试,几个http请求随便一测,那倒是没问题。但我们压力测试是绝对不能在界面(GUI)上面去跑的!
原因就是 GUI会消耗服务器部分的性能,导致压力测试数据不准确,或者导致GUI界面卡死,部分请求直接死掉,压测被迫中断。
非GUI模式就是直接通过指令去触发脚本运行,并且不用实时地渲染测试的数据,这样就能减少对资源的消耗。
好,GUI和非GUI的区别搞明白了。下面讲如何进行非GUI的压测。
我是用自有的项目,一个PHP写的论坛网站进行测试。脚本已经录制好了,我们就用 注册 接口来试一下非GUI模式。
先对用户名、邮箱参数化了,CSV Data Set Config,存储10000条数据,足够用了。我们先用1000条数据进行注册。线程数设置1000,Ramp-Up设置30秒,意思是1000个虚拟用户(Vuser),在30秒内加载完毕。
直接 win+R,打开cmd,先进入jmeter所在的bin目录下,注意,这个很重要!因为非GUI模式,命令行必须在bin目录下运行,如果你直接在cmd输入运行指令,它会告诉你 ‘jmeter不是内部命令’。
比如说我的jmeter的bin目录路径是E:\jmeter5.0\bin,如下图:
当然,如果你不想像我那样一步步cd到bin目录,那就直接打开bin目录,然后地址栏输入cmd,回车。
然后输入 jmeter -n -t ,然后把jmx脚本拖拽进来,就变成:
到这里其实我们已经完成了,直接回车就可以运行了。但我同时还想输出 测试结果和测试报告,可以在后面添加:-l E:\jmeter5.0\a_report\result.jtl -e -o E:\jmeter5.0\a_report\WebReport
其中E:\jmeter5.0\a_report\result.jtl是我存放测试结果的路径,result.jtl就是测试结果的文件,当然你想把它命名成1.jtl或者2.jtl,test.jtl都行,反正测试结果文件的后缀名就是.jtl,
-e -o E:\jmeter5.0\a_report\WebReport,这是用于生成HTML测试报告,E:\jmeter5.0\a_report\WebReport 就是你想存入测试报告的路径,你可以随便设置。
我们直接回车,
出现下面这个图,就说明已经在启动了,只需要耐心等它结束。
结束之后,可以看到一些测试数据也写在里面,比如最小响应时间Min、最大响应时间Max、错误率 Err 等等。
好,我们再打开已经保存好的测试结果和测试报告:
测试结果可以直接导入jmeter来查看的,
而测试报告,则是直接打开HTML文档:
至此,我们就已经讲完了,关于非GUI模式下压测,虽然我上面用的注册接口简单操作了一下,1000个Vuser,30秒加载完成,算不上是真正意义的压力测试,但是思路和步骤大致就如此。
-------分割线- - - -
注意事项:运行刚才那个命令行,有时候会报错: Error in NonGUIDriver java.lang.IllegalArgumentException: Report generation requires csv output format, check ' jmeter.save.saveservice.output_format' property
注意画粗的那句话,意思就是测试报告的输出有问题
那我们就打开bin目录下的jmeter.properties文件,查找jmeter.save.saveservice.output_format,把后面的xml改为csv,即可。