jmeter:如何在Loop中创建ArrayList,将其填入一个http请求中,并在另一个http请求中重用它

时间:2018-05-09 16:30:56

标签: jmeter

我是Jmeter的新手,面临以下问题。

我有以下Jmeter项目。

我想:

  1. 在循环下创建两个ArrayLists(每个循环迭代应该 重新初始化列表)
  2. 在Http请求1的后处理器中填写列表。
  3. 决定并在HTTP Request 2的预处理器中迭代List
  4. 最好的方法是什么?

    我在常量计时器之后立即尝试了一个beanShell PreProcessor,但在HTTP1 PostProcessor中尝试执行.add()

    时无法访问变量并获得异常

    在常量计时器之后立即在BeanShell Sampler中创建列表 我这样做:

    import java.util.ArrayList;
    
    ArrayList list_1 = new ArrayList();
    ArrayList list_2 = new ArrayList(); 
    
    list_1.add("TEST_0");
    log.info("");
    log.info("============ Avail list:" + list_1);
    
    vars.put("list_1", list_1);
    vars.put("list_2", list_2);
    
    log.info("Lists created and populated !!!!");
    log.info("");
    

    但是得到以下异常:

    org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval    Sourced file: inline evaluation of: ``import java.util.ArrayList;  try {    ArrayList list_1 = new ArrayList();     ArrayL . . . '' : Error in method invocation: Method put( java.lang.String, java.util.ArrayList ) not found in class'org.apache.jmeter.threads.JMeterVariables'
    

    感谢。

    enter image description here

2 个答案:

答案 0 :(得分:1)

  1. vars.put("list_1", list_1);替换为vars.putObject ("list_1", list_1);
  2. 在必要时使用vars.getObject ("list_1");
  3. 将Beanshell PreProcessor替换为JSR223 PreProcessor,并确保使用Groovy作为JMeter Best Practices
  4. 中建议的脚本语言

答案 1 :(得分:0)

您可以将“JSR223 PreProcessor”用于数组列表,如下所示: -

def list1 = []
def list2 = []

list1 << ("TEST_0");
list1 << ("TEST_1");
list2 << ("TEST_X");
list2 << ("TEST_Y");

log.info("============ Avail list:" + list1);
log.info("============ Avail list:" + list2);

vars.putObject("List_1",list1)
vars.putObject("List_2",list2)

在JSR223 PostProcessor中获取它

def y = vars.getObject("List_1");
log.info("Get List>>>>>"+y)