在使用JMeter进行性能测试时,以下情况经常出现:
1.测试过程中,指定运行的线程数、指定运行循环次数不断改变;
2.访问的目标地址发生改变,端口发生改变,需要改写脚本。
上面的问题在GUI中,直接在脚本上进行修改即可,但很繁琐。
而且性能测试自动化是以非GUI方式运行的,若要修改测试计划非常麻烦。
解决方法:
1.运行线程数
JMeter测试计划在运行Sampler之前先加载配置文件(jmeter.properties,system.properties等),读取属性,所以那么我们可以借助属性来实现。
修改这些配置文件,麻烦且不现实。JMeter提供了方法可以动态修改属性,在命令行使用 -J 来指定JMeter Properties,使用__P() 函数来获取命令中指定的属性值。(jmeter.bat -help | jmeter.sh -help可以查看帮助)
实例:
jmeter.bat -JthreadCount=2 -Jcycle=2 -n -t test.jmx -l test.jtl
-JthreadCount=2为test.jmx测试计划要指定的线程数
-Jcycle=2为test.jmx测试计划要指定的每个线程的迭代次数
在test.jmx测试计划中用${__P(threadCount,)}来获取threadCount的值;${__P(cycle,)}来获取cycle的值。
2.访问的目标地址改变化,端口发生改变,重新指定:
JMeter 命令行通过-D来指定System Properties,类似于Jdk中我们用-D来指定一些系统属性,比如开启JMX远程监控。
在JMeter脚本中我们用__property()函数来获取,比如-Durl=www.sogou.com在测试计划中用${__property(url,,)}来获取
运行命令如下:
jmeter.bat -JthreadCount= -Jcycle= -Durl=www.baidu.com -Dport= -n -t baidu.jmx -l baidu.jtl
如上使用-J -D在运行前动态设置属性,可以用来控制测试计划的执行,在非GUI方式运行时改变起来比较方便。
在性能测试自动化时我们可以利用这些命令行传递参数来动态指定属性,不必再修改脚本了。