我试图将超过9个参数从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] ,我有詹金斯发送的正确值: 2 。对于用户,显示的值为: void 。 我正在尝试将其用于线程数,例如: $ {__ P(users,1)} 。
我在做什么错?这些值显然来自Jenkins,但将其传递给变量时遇到了问题。谢谢
答案 0 :(得分:1)
您没有名为users
的脚本变量,因此您应该登录words[0]
:
log.info(words[0]);
或者您可以记录称为用户的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)}
应该可以工作
现在,如果要将此值用作线程数,则需要执行以下操作:
users
保存为属性,否则它将不会在线程之间传递答案 1 :(得分:1)
只要您的command line fits into 8191 characters可以根据需要将尽可能多的参数传递给JMeter都不是问题,这是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。