JMeter Beanshell整数错误
我在整型JMeter Beanshell取样器/前/后处理器中遇到问题。我有一些值的数组,我想使用这个数组的每个值来设置JMeterProperty以备下次使用。JMeter Beanshell整数错误
GOAL>查询中有N行。例如UPSTREAM列有差异值,我需要它保存下一次使用。因为我将使用它们通过“OS进程采样器”将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
....
在PostProcessor中我设置:
${__setProperty(COUNT, ${COUNT_1})};
我想这scrpit:
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:
PostProcessor中登录:
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日志:
UPDATE_2
UBIK负载组的解决方案工程:),目标更新。
你的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));
}
注意你正在做的道具是设置什么(全球)从瓦尔(具体到每一个用户)得到什么,所以这可能是错误的。
阅读:
我不知道你想达到什么样的,也有你的方法多的问题。
-
${__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的(和其他)脚本,因为他们可以根据自己的价值有不同的解释。
-
至于
方法获取(INT)未找到class'org.apache.jmeter.threads.JMeterVariables'
我不知道你是怎么设法把整成JMeter的变量,但如果你没有,你应该通过vars.getObject()函数访问它像
int n = vars.getObject("COUNT");
-
Troublesho奥丁提示:围绕你的代码与try block,你将能够获得更多的方式提供信息的错误消息在jmeter.log文件,如:
try { //your code here } catch (Throwable ex) { log.error("something wrong", ex); throw ex; }
我也建议让熟悉了Debugging JDBC Sampler Results in JMeter指南
Thx很多,我只是在问题开始时更新了目标 –
贝壳样品仍然有一些问题..
Response code: 500 Response message: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval \t Sourced file: inline evaluation of: ''import java.util.*; import java.text.*; import java.io.*; int n = Integer.pa . . . '' : Typed variable declaration : Method Invocation Integer.parseInt
–你确定COUNT是真的被定义为一个变量吗?你可以展示你的测试计划吗?在Beanshell PostProcessor之前添加一个DebugPostProcessor并显示输出?thx –
没有COUNT也来自SQL。但是当我在用户定义变量COUNT = $ {__ property(COUNT)}中设置GLOBAL VAR时,它返回另一个错误int n = Integer.pa。 。 。 '':方法调用props.setProperty' –