JMeter Beanshell 整数错误
JMeter Beanshell Integer Error
我在 JMeter Beanshell Sampler/Pre/Post 处理器中遇到整数问题。我有一些值数组,我想使用这个数组的每个值来设置 JMeterProperty 以供下次使用。
GOAL> 从查询中得到一些 N 行。例如 UPSTREAM 列有差异值,我需要它保存它们以供下次使用。因为我将使用它们作为 "OS Processes Sampler".
的参数调用 CMD.exe
So, if UPSTREAM_1=XXX, UPSTREAM_2=AAA,
CMD.EXE will looks like: CMD.EXE -upstream_1 -upstream_2, etc.
从SQL我得到了值数组
COUNT=31
UPSTREAM_#=31
UPSTREAM_1=XXX
UPSTREAM_2=AAA
....
在我设置的后处理器中:
${__setProperty(COUNT, ${COUNT_1})};
我正在尝试这个脚本:
import java.util.*;
import java.text.*;
import java.io.*;
int max = Integer.parseInt(vars.get(${COUNT_1})); //--COUNT=31, Integer doesnt work
int n = vars.get(${COUNT_1}); //--COUNT=31, this also doesnt work
for (int i=1;i<=n;i++)
{
${__setProperty(UPSTREAM_i, ${UPSTREAM_i})};
}
但是 JMeter 日志说它不知道 "INT"
2016/10/03 14:52:13 ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval Sourced file: inline evaluation of: `` import java.util.*; import java.text.*; import java.io.*; int max = Integer.p . . . '' : Typed variable declaration : Error in method invocation: Method get( int ) not found in class'org.apache.jmeter.threads.JMeterVariables'
2016/10/03 14:52:13 WARN - jmeter.protocol.java.sampler.BeanShellSampler: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: `` import java.util.*; import java.text.*; import java.io.*; int max = Integer.p . . . '' : Typed variable declaration : Error in method invocation: Method get( int ) not found in class'org.apache.jmeter.threads.JMeterVariables'
有人可以帮助我吗?也许我想念一些库或其他东西。 JRE/JDK 我有。
UPDATE_1
用户变量全部:
COUNT ${__property(COUNT)} Count of Rows from SQL Query
Test_Plan:
后处理器日志:
SamplerProperties:
variableNames=DATE,DOWNSTREAM,UPSTREAM,COUNT,etc.
JMeterVariables:
COUNT=31
COUNT_#=31
COUNT_1=31
COUNT_2=31
.....
DATE_#=31
DATE_1=04.10.2016
DATE_2=04.10.2016
.....
DOWNSTREAM_#=31
DOWNSTREAM_1=DDD11
DOWNSTREAM_2=DDD11
.....
UPSTREAM_#=31
UPSTREAM_1=XXX
UPSTREAM_2=AAA
....
JMeterProperties:
COUNT= 31
DATE= 04.10.2016
DOWNSTREAM= DDD11
TEST= 1
调试循环日志:
SamplerProperties:
BeanShellSampler.query=import java.util.*;
import java.text.*;
import java.io.*;
int n = Integer.parseInt(vars.get("COUNT"));
for (int i=1;i<=n;i++)
{
props.setProperty("UPSTREAM_"+i, vars.get("UPSTREAM_i"));
}
JMeterVariables:
COUNT=31
COUNT_#=31
COUNT_1=31
COUNT_2=31
.....
DATE_#=31
DATE_1=04.10.2016
DATE_2=04.10.2016
.....
DOWNSTREAM_#=31
DOWNSTREAM_1=DDD11
DOWNSTREAM_2=DDD11
.....
UPSTREAM_#=31
UPSTREAM_1=XXX
UPSTREAM_2=AAA
....
JMeterProperties:
COUNT= 31
DATE= 04.10.2016
DOWNSTREAM= DDD11
TEST= 1
现在在 Jmeter 日志中:
2016/10/03 17:12:24 ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval Sourced file: inline evaluation of: ``import java.util.*; import java.text.*; import java.io.*; int n = Integer.pa . . . '' : Method Invocation props.setProperty
2016/10/03 17:12:24 WARN - jmeter.protocol.java.sampler.BeanShellSampler: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: ``import java.util.*; import java.text.*; import java.io.*; int n = Integer.pa . . . '' : Method Invocation props.setProperty
UPDATE_2
UBIK LOAD PACK 的解决方案有效 :),目标已更新。
您的 Beanshell 脚本有很多错误:
import java.util.*;
import java.text.*;
import java.io.*;
int n = Integer.parseInt(vars.get("COUNT"));
for (int i=1;i<=n;i++)
{
props.setProperty("UPSTREAM_"+i, vars.get("UPSTREAM_"+i));
}
请注意,您正在做的是在 props(全局)中设置您从 vars(特定于每个用户)获得的内容,所以这可能是错误的。
阅读:
我不知道你想达到什么目的,你的方法有很多问题。
${__setProperty(COUNT, ${COUNT_1})};
^ here you set an extra space before the value
还要完全清楚,vars
和 props
是不同的野兽,它们没有任何共同点。如果您通过 __setProperty 函数设置了 属性,您将无法通过 vars.get()
访问它,您将不得不使用 props.get()
代替。
vars.get(${COUNT_1})
不起作用,您必须将其更改为以下之一:
- `vars.get("COUNT_1");
- `${COUNT_1}
通常不建议将 JMeter 函数和变量内联到 Beanshell(和其他)脚本中,因为它们可能会根据它们的值进行不同的解释。
关于
Method get( int ) not found in class'org.apache.jmeter.threads.JMeterVariables'
我不知道您是如何设法将整数放入 JMeter 变量中的,但是如果您这样做了,您应该通过 vars.getObject() 函数访问它,例如
int n = vars.getObject("COUNT");
故障排除提示:用 try block 包围您的代码,您将能够在 jmeter.log[=57 中获得更多信息性错误消息=] 文件如:
try {
//your code here
}
catch (Throwable ex) {
log.error("something wrong", ex);
throw ex;
}
我还建议您熟悉 Debugging JDBC Sampler Results in JMeter 指南
我在 JMeter Beanshell Sampler/Pre/Post 处理器中遇到整数问题。我有一些值数组,我想使用这个数组的每个值来设置 JMeterProperty 以供下次使用。
GOAL> 从查询中得到一些 N 行。例如 UPSTREAM 列有差异值,我需要它保存它们以供下次使用。因为我将使用它们作为 "OS Processes Sampler".
的参数调用 CMD.exeSo, if UPSTREAM_1=XXX, UPSTREAM_2=AAA,
CMD.EXE will looks like: CMD.EXE -upstream_1 -upstream_2, etc.
从SQL我得到了值数组
COUNT=31
UPSTREAM_#=31
UPSTREAM_1=XXX
UPSTREAM_2=AAA
....
在我设置的后处理器中:
${__setProperty(COUNT, ${COUNT_1})};
我正在尝试这个脚本:
import java.util.*;
import java.text.*;
import java.io.*;
int max = Integer.parseInt(vars.get(${COUNT_1})); //--COUNT=31, Integer doesnt work
int n = vars.get(${COUNT_1}); //--COUNT=31, this also doesnt work
for (int i=1;i<=n;i++)
{
${__setProperty(UPSTREAM_i, ${UPSTREAM_i})};
}
但是 JMeter 日志说它不知道 "INT"
2016/10/03 14:52:13 ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval Sourced file: inline evaluation of: `` import java.util.*; import java.text.*; import java.io.*; int max = Integer.p . . . '' : Typed variable declaration : Error in method invocation: Method get( int ) not found in class'org.apache.jmeter.threads.JMeterVariables'
2016/10/03 14:52:13 WARN - jmeter.protocol.java.sampler.BeanShellSampler: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: `` import java.util.*; import java.text.*; import java.io.*; int max = Integer.p . . . '' : Typed variable declaration : Error in method invocation: Method get( int ) not found in class'org.apache.jmeter.threads.JMeterVariables'
有人可以帮助我吗?也许我想念一些库或其他东西。 JRE/JDK 我有。
UPDATE_1
用户变量全部:
COUNT ${__property(COUNT)} Count of Rows from SQL Query
Test_Plan:
后处理器日志:
SamplerProperties:
variableNames=DATE,DOWNSTREAM,UPSTREAM,COUNT,etc.
JMeterVariables:
COUNT=31
COUNT_#=31
COUNT_1=31
COUNT_2=31
.....
DATE_#=31
DATE_1=04.10.2016
DATE_2=04.10.2016
.....
DOWNSTREAM_#=31
DOWNSTREAM_1=DDD11
DOWNSTREAM_2=DDD11
.....
UPSTREAM_#=31
UPSTREAM_1=XXX
UPSTREAM_2=AAA
....
JMeterProperties:
COUNT= 31
DATE= 04.10.2016
DOWNSTREAM= DDD11
TEST= 1
调试循环日志:
SamplerProperties:
BeanShellSampler.query=import java.util.*;
import java.text.*;
import java.io.*;
int n = Integer.parseInt(vars.get("COUNT"));
for (int i=1;i<=n;i++)
{
props.setProperty("UPSTREAM_"+i, vars.get("UPSTREAM_i"));
}
JMeterVariables:
COUNT=31
COUNT_#=31
COUNT_1=31
COUNT_2=31
.....
DATE_#=31
DATE_1=04.10.2016
DATE_2=04.10.2016
.....
DOWNSTREAM_#=31
DOWNSTREAM_1=DDD11
DOWNSTREAM_2=DDD11
.....
UPSTREAM_#=31
UPSTREAM_1=XXX
UPSTREAM_2=AAA
....
JMeterProperties:
COUNT= 31
DATE= 04.10.2016
DOWNSTREAM= DDD11
TEST= 1
现在在 Jmeter 日志中:
2016/10/03 17:12:24 ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval Sourced file: inline evaluation of: ``import java.util.*; import java.text.*; import java.io.*; int n = Integer.pa . . . '' : Method Invocation props.setProperty
2016/10/03 17:12:24 WARN - jmeter.protocol.java.sampler.BeanShellSampler: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: ``import java.util.*; import java.text.*; import java.io.*; int n = Integer.pa . . . '' : Method Invocation props.setProperty
UPDATE_2
UBIK LOAD PACK 的解决方案有效 :),目标已更新。
您的 Beanshell 脚本有很多错误:
import java.util.*;
import java.text.*;
import java.io.*;
int n = Integer.parseInt(vars.get("COUNT"));
for (int i=1;i<=n;i++)
{
props.setProperty("UPSTREAM_"+i, vars.get("UPSTREAM_"+i));
}
请注意,您正在做的是在 props(全局)中设置您从 vars(特定于每个用户)获得的内容,所以这可能是错误的。
阅读:
我不知道你想达到什么目的,你的方法有很多问题。
${__setProperty(COUNT, ${COUNT_1})};
^ here you set an extra space before the value
还要完全清楚,
vars
和props
是不同的野兽,它们没有任何共同点。如果您通过 __setProperty 函数设置了 属性,您将无法通过vars.get()
访问它,您将不得不使用props.get()
代替。vars.get(${COUNT_1})
不起作用,您必须将其更改为以下之一:- `vars.get("COUNT_1");
- `${COUNT_1}
通常不建议将 JMeter 函数和变量内联到 Beanshell(和其他)脚本中,因为它们可能会根据它们的值进行不同的解释。
关于
Method get( int ) not found in class'org.apache.jmeter.threads.JMeterVariables'
我不知道您是如何设法将整数放入 JMeter 变量中的,但是如果您这样做了,您应该通过 vars.getObject() 函数访问它,例如
int n = vars.getObject("COUNT");
故障排除提示:用 try block 包围您的代码,您将能够在 jmeter.log[=57 中获得更多信息性错误消息=] 文件如:
try { //your code here } catch (Throwable ex) { log.error("something wrong", ex); throw ex; }
我还建议您熟悉 Debugging JDBC Sampler Results in JMeter 指南