簡體   English   中英

JMeter Beanshell整數錯誤

[英]JMeter Beanshell Integer Error

我在JMeter Beanshell采樣器/前/后處理器中遇到Integer問題。 我有一些值數組,我想使用此數組的每個值來設置JMeterProperty以供下次使用。

目標>查詢中有一些N行。 例如,UPSTREAM列有diff值,我需要保存它們以供下次使用。 因為我將使用它們通過“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
....

在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

測試計划:

在此輸入圖像描述

后處理器日志:

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的解決方案有效:),GOAL更新。

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

請注意您正在做的是設置道具(全局)從vars(特定於每個用戶)獲得的內容,因此這可能是錯誤的。

讀:

我不知道你想要實現什么,你的方法存在多個問題。

  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. 關於

    在class'org.apache.jmeter.threads.JMeterVariables'中找不到方法get(int)

    我不知道你是如何設法將一個整數放入JMeter變量的,但如果你這樣做了,你應該通過vars.getObject()函數來訪問它

     int n = vars.getObject("COUNT"); 
  4. 故障排除提示:使用try塊包圍您的代碼,您將能夠在jmeter.log文件中獲得更多信息性錯誤消息,如:

     try { //your code here } catch (Throwable ex) { log.error("something wrong", ex); throw ex; } 

我還建議您熟悉JMeter指南中的調試JDBC采樣器結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM