从jmeter访问一个控制器到另一个控制器的数组

时间:2017-03-07 09:53:04

标签: java jmeter beanshell

  

我在jmeter中用beanshell断言编写了一个数组,如下所示。

String[] myList = {"CM_Name","OwnerID"};
for (int i = 0; i < myList.length; i++)
{              
vars.put("create_"+myList[i],ctx.getCurrentSampler().getArguments().argumentsAsMap.get(myList[i]));
log.info("create_"+myList[i]);
}

我希望myList []可以在另一个位于另一个控制器中的beanshell断言中访问。 我试过这个

vars.put("myArr",myList);

但它没有奏效。我该怎么做才能在另一个beanshell断言中检索上面的String数组?

2 个答案:

答案 0 :(得分:1)

vars.put()方法仅将String作为第二个参数,因此您无法在其中放置数组,解决方案位于:

  1. 使用vars.putObject()方法,如:

    vars.putObject("myArr", myList);
    

    稍后您将能够访问它:

    String [] myList = vars.getObject("myArr");
    
  2. 使用bsh.shared namespace之类的:

    在第一个断言中:

     bsh.shared.myArr = myList
    

    在第二个断言中:

     String [] myList = bsh.shared.myArr
    

    这样您甚至可以在不同的线程组之间共享对象。

  3. 有关更多与Beanshell相关的提示和技巧,请参阅How to Use BeanShell: JMeter's Favorite Built-in Component文章

答案 1 :(得分:0)

您可以使用putObject()让关键点指向任何类型的对象。

请注意,您将 使用getObject()在后面的断言中检索它。如果你不这样做,你会得到某种ClassCastException

保持StringsObjects不被混淆是你的工作。

Protip:从不以相同的变量名称存储字符串和对象。这实际上打开了一个地狱漏洞的小门,你的脚本将在某些地方发芽恶魔例外,但罪魁祸首将是一个完全不同的脚本。资料来源:我继承了一个在任何地方都能做到的脚本。