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. 已设置线程组和 1 个线程,以及您的脚本
  2. 在脚本中你必须users保存为属性,否则它不会在线程之间传递
  3. 下一个线程组就可以用它作为线程数

只要你的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。