【问题标题】:Jmeter how to modify a variable in BeanShellJmeter如何修改BeanShell中的变量
【发布时间】:2021-12-16 07:29:12
【问题描述】:

我在使用 jmeter 时遇到以下情况: 我有两个线程组,我想使用从第一个线程的响应中提取的变量到第二个线程。 我在做什么:

  1. 使用 JSON/YAML 路径提取器提取变量,然后使用 BeanShell Assertion ${__setProperty(id, ${id})}; 将其设置为属性
  2. 然后在第二个线程组中,我有一个 BeanShell 预处理器,我尝试使用以下脚本修改值
    String ids2 = props.get("id");
    String ids3 = vars.put(${__intSum(2,-4)});
    String ids = vars.put(ids,"${__intSum(${ids2},${ids3})}");

结果我在 jmeter 中遇到了异常

ava.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(Unknown Source) ~[?:1.8.0_221]
    at java.lang.Integer.parseInt(Unknown Source) ~[?:1.8.0_221]
    at java.lang.Integer.parseInt(Unknown Source) ~[?:1.8.0_221]
    at org.apache.jmeter.functions.IntSum.execute(IntSum.java:66) ~[ApacheJMeter_functions.jar:5.4.1]
    at org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:138) ~[ApacheJMeter_core.jar:5.4.1]
    at org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:113) ~[ApacheJMeter_core.jar:5.4.1]
    at org.apache.jmeter.testelement.property.FunctionProperty.getStringValue(FunctionProperty.java:91) ~[ApacheJMeter_core.jar:5.4.1]
    at org.apache.jmeter.testbeans.TestBeanHelper.unwrapProperty(TestBeanHelper.java:129) ~[ApacheJMeter_core.jar:5.4.1]
    at org.apache.jmeter.testbeans.TestBeanHelper.prepare(TestBeanHelper.java:84) ~[ApacheJMeter_core.jar:5.4.1]
    at org.apache.jmeter.engine.StandardJMeterEngine.notifyTestListenersOfStart(StandardJMeterEngine.java:202) ~[ApacheJMeter_core.jar:5.4.1]
    at org.apache.jmeter.engine.StandardJMeterEngine.run(StandardJMeterEngine.java:382) ~[ApacheJMeter_core.jar:5.4.1]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_221]


目标是用 2 减少变量,然后将其转移到另一个我将仅在第二个线程组中使用的变量

我们将不胜感激任何帮助

【问题讨论】:

  • 您可以考虑如下 1. 将字符串ids2 转换为数字后再加 2. vars.put() 需要有两个参数key,value。键和值都应该是字符串 3. ids 应该在引号内 4. 使用带有 Groovy 的 JSR223 组件

标签: jmeter beanshell


【解决方案1】:
  1. Since JMeter 3.1 it's recommended to use JSR223 Test Elements and Groovy language 用于编写脚本
  2. 您的方法可能适用于 1 个线程,但如果您有 > 1 个线程,则该属性将被覆盖,如果您希望每个线程(虚拟用户)都有自己的值,您应该添加当前线程号作为前缀或后缀为财产。相关函数是__threadNum(),或者如果您更喜欢脚本,您可以调用ctx.getThreadNum() function
  3. 在绝大多数情况下,Inter-Thread Communication Plugin 更易于使用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-12
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    相关资源
    最近更新 更多