我在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数组?
答案 0 :(得分:1)
vars.put()方法仅将String作为第二个参数,因此您无法在其中放置数组,解决方案位于:
使用vars.putObject()方法,如:
vars.putObject("myArr", myList);
稍后您将能够访问它:
String [] myList = vars.getObject("myArr");
使用bsh.shared namespace之类的:
在第一个断言中:
bsh.shared.myArr = myList
在第二个断言中:
String [] myList = bsh.shared.myArr
这样您甚至可以在不同的线程组之间共享对象。
有关更多与Beanshell相关的提示和技巧,请参阅How to Use BeanShell: JMeter's Favorite Built-in Component文章
答案 1 :(得分:0)
您可以使用putObject()让关键点指向任何类型的对象。
请注意,您将 使用getObject()在后面的断言中检索它。如果你不这样做,你会得到某种ClassCastException
。
保持Strings
和Objects
不被混淆是你的工作。
Protip:从不以相同的变量名称存储字符串和对象。这实际上打开了一个地狱漏洞的小门,你的脚本将在某些地方发芽恶魔例外,但罪魁祸首将是一个完全不同的脚本。资料来源:我继承了一个在任何地方都能做到的脚本。