JMeter:来自 Jenkins 的九个以上参数
JMeter: more than nine parameters from Jenkins
我正在尝试将超过九个参数从 Jenkins 传递到 JMeter4.0。
在阅读时,我发现 JMeter 不接受超过 9 个参数。作为解决方法,我想将所有参数作为字符串传递并在 JMeter BeanShell 中拆分它。
java -jar -Xms512m -Xmx2048m C:\JMeter4\bin\ApacheJMeter.jar -Jjmeter.save.saveservice.output_format=csv -Jjenkinsparams="%Timetorun%,%Users%" -n -t %JMeterPath%\bin\tests\tests.jmx -l %WORKSPACE%\Results.csv
在 Windows 机器上测试 运行。从这个电话我有
jenkinsparams = "300,2"
我使用这样的 BeanShell 预处理器:
String line = "${__P(jenkinsparams)}";
String[] words = line.split(",");
vars.put("timetorun",words[0]);
vars.put("users",words[1]);
log.info(words[1]);
log.info(users);
我尝试了几次 log.info 来检查这些值。对于 words[1],我从 Jenkins 发送了正确的值:2。对于 users,显示的值为:void。
我正在尝试将它用于线程数,如:${__P(users,1)}.
我做错了什么?这些值显然来自 Jenkins,但我在将其传递给我的变量时遇到了问题。谢谢
您没有名为 users
的脚本变量,因此您应该记录 words[0]
:
log.info(words[0]);
或者您可以记录名为 users 的 JMeter 变量的值:
log.info(vars.get("users"));
或者您可以将 words[0]
分配给名为 users
的变量:
String users = words[0];
log.info(users);
另外,您将它保存为变量,而不是 属性,因此您可以在脚本的其他地方检索它,如
${users}
语法 __P
引用 属性,因此如果您想将其用作 属性,则需要更改保存方式:
props.put("users", words[1]);
如果你这样做,${__P(users,1)}
应该有效
现在,如果你想使用这个值作为线程数,那么你需要这样做:
- 已设置线程组和 1 个线程,以及您的脚本
- 在脚本中你必须将
users
保存为属性,否则它不会在线程之间传递
- 下一个线程组就可以用它作为线程数
只要你的command line fits into 8191 characters it should not be a problem to pass as many arguments to JMeter as you want, here is an evidence from Debug Sampler and View Results Tree listener组合
因此请保持冷静,并通过 -J 命令行参数根据需要传递尽可能多的参数。
请注意 starting from JMeter version 3.1 users are recommended to use JSR223 Test Elements and Groovy language 而不是 Beanshell,因此请考虑切换到 Groovy。
我正在尝试将超过九个参数从 Jenkins 传递到 JMeter4.0。 在阅读时,我发现 JMeter 不接受超过 9 个参数。作为解决方法,我想将所有参数作为字符串传递并在 JMeter BeanShell 中拆分它。
java -jar -Xms512m -Xmx2048m C:\JMeter4\bin\ApacheJMeter.jar -Jjmeter.save.saveservice.output_format=csv -Jjenkinsparams="%Timetorun%,%Users%" -n -t %JMeterPath%\bin\tests\tests.jmx -l %WORKSPACE%\Results.csv
在 Windows 机器上测试 运行。从这个电话我有 jenkinsparams = "300,2"
我使用这样的 BeanShell 预处理器:
String line = "${__P(jenkinsparams)}";
String[] words = line.split(",");
vars.put("timetorun",words[0]);
vars.put("users",words[1]);
log.info(words[1]);
log.info(users);
我尝试了几次 log.info 来检查这些值。对于 words[1],我从 Jenkins 发送了正确的值:2。对于 users,显示的值为:void。 我正在尝试将它用于线程数,如:${__P(users,1)}.
我做错了什么?这些值显然来自 Jenkins,但我在将其传递给我的变量时遇到了问题。谢谢
您没有名为 users
的脚本变量,因此您应该记录 words[0]
:
log.info(words[0]);
或者您可以记录名为 users 的 JMeter 变量的值:
log.info(vars.get("users"));
或者您可以将 words[0]
分配给名为 users
的变量:
String users = words[0];
log.info(users);
另外,您将它保存为变量,而不是 属性,因此您可以在脚本的其他地方检索它,如
${users}
语法 __P
引用 属性,因此如果您想将其用作 属性,则需要更改保存方式:
props.put("users", words[1]);
如果你这样做,${__P(users,1)}
应该有效
现在,如果你想使用这个值作为线程数,那么你需要这样做:
- 已设置线程组和 1 个线程,以及您的脚本
- 在脚本中你必须将
users
保存为属性,否则它不会在线程之间传递 - 下一个线程组就可以用它作为线程数
只要你的command line fits into 8191 characters it should not be a problem to pass as many arguments to JMeter as you want, here is an evidence from Debug Sampler and View Results Tree listener组合
因此请保持冷静,并通过 -J 命令行参数根据需要传递尽可能多的参数。
请注意 starting from JMeter version 3.1 users are recommended to use JSR223 Test Elements and Groovy language 而不是 Beanshell,因此请考虑切换到 Groovy。