2016-10-03 154 views
1

我在整型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:

enter image description here

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负载组的解决方案工程:),目标更新。

回答

0

你的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)); 
} 

注意你正在做的道具是设置什么(全球)从瓦尔(具体到每一个用户)得到什么,所以这可能是错误的。

阅读:

+0

贝壳样品仍然有一些问题.. 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

+0

你确定COUNT是真的被定义为一个变量吗?你可以展示你的测试计划吗?在Beanshell PostProcessor之前添加一个DebugPostProcessor并显示输出?thx –

+0

没有COUNT也来自SQL。但是当我在用户定义变量COUNT = $ {__ property(COUNT)}中设置GLOBAL VAR时,它返回另一个错误int n = Integer.pa。 。 。 '':方法调用props.setProperty' –

0

我不知道你想达到什么样的,也有你的方法多的问题。

  1. ${__setProperty(COUNT, ${COUNT_1})};

        ^here you set an extra space before the value 
    

    而且是完全清楚,varsprops是不同的野兽,他们没有什么共同点。如果您通过__setProperty功能设置了一个属性,则无法通过vars.get()访问该属性,您将不得不使用props.get()代替。

  2. vars.get(${COUNT_1})将无法​​正常工作,你应该将其更改为下列之一:

    • `vars.get( “COUNT_1”);
    • `$ {} COUNT_1

    一般而言,不建议JMeter的内联函数和变量到BeanShell的(和其他)脚本,因为他们可以根据自己的价值有不同的解释。

  3. 至于

    方法获取(INT)未找到class'org.apache.jmeter.threads.JMeterVariables'

    我不知道你是怎么设法把整成JMeter的变量,但如果你没有,你应该通过vars.getObject()函数访问它像

    int n = vars.getObject("COUNT"); 
    
  4. 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指南

+0

Thx很多,我只是在问题开始时更新了目标 –

相关问题