在jmeter中进一步使用regex_matchNr

时间:2015-09-03 17:47:21

标签: regex jmeter

我真的试图找到答案,但我不能。

我尝试使用regex reference_matchNr来递增用户定义的变量。 但我总是得到以下错误信息:

${__intSum(${summe},${count1},summe)};

jmeter.assertions.BeanShellAssertion: java.lang.NumberFormatException: For input string: "${count1}"

${__intSum(${summe},"${count1}",summe)};

jmeter.assertions.BeanShellAssertion: java.lang.NumberFormatException: For input string: ""${count1}""

${__intSum(${summe},count1,summe)};

jmeter.assertions.BeanShellAssertion: java.lang.NumberFormatException: For input string: "count1"

我使用以下代码获取matchNr值:

int count1 = Integer.parseInt(vars.get("status_matchNr"));

奇怪的是,我能够在jmeter log(log.info)或文件中写入值。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我的期望是你在Beanshell Assertion中使用__intSum()函数来添加2个值。

这不会起作用,因为在断言之前函数被解释,因此函数执行时没有定义count1变量。

所以解决方法是:

  1. 使用"参数"在解释断言之前输入功能评估。你还不需要转换你的" status_matchNr"变量为整数,intSum函数将为您完成。因此,如果您将以下行添加到"参数"

    ${__intSum(${summe},${status_matchNr},summe)};
    

    它假设" summe"变量已定义,可以转换为整数

    Intsum and Beanshell assertion

  2. 仅使用"代码" way - 纯粹在Beanshell代码中执行2个整数的总和,如:

    int count1 = Integer.parseInt(vars.get("status_matchNr"));
    int summe = Integer.parseInt(vars.get("summe"));
    summe += count1;
    vars.put("summe", String.valueOf(summe));
    //your assertion logic here 
    
  3. 我还建议考虑从Beanshell切换到JSR223 Assertion和groovy语言,因为Beanshell存在性能问题,如果负载很高,可能会成为瓶颈。有关详细信息,groovy脚本引擎安装说明和不同的脚本方法基准,请参阅Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For!指南。