JMeter:Jenkins的九个以上参数

时间:2018-08-23 13:40:08

标签: jenkins parameters jmeter beanshell

我试图将超过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,但将其传递给变量时遇到了问题。谢谢

2 个答案:

答案 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)}应该可以工作

现在,如果要将此值用作线程数,则需要执行以下操作:

  1. 具有1个线程的Setup线程组和您的脚本
  2. 在脚本中,您必须users保存为属性,否则它将不会在线程之间传递
  3. 下一个线程组可以将其用作线程数

答案 1 :(得分:1)

只要您的command line fits into 8191 characters可以根据需要将尽可能多的参数传递给JMeter都不是问题,这是Debug Sampler and View Results Tree listener组合的证据

JMeter 12 parameters

因此请保持冷静,并通过-J命令行参数传递所需数量的参数。


请注意,starting from JMeter version 3.1 users are recommended to use JSR223 Test Elements and Groovy language而不是Beanshell,因此请继续考虑切换到Groovy。