2016-10-03 56 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很多,我只是在問題開始時更新了目標 –

相關問題