1)。我知道如何从我的问题Use java class fields in beanshell访问beanshell中的java字段和对象。但是,实现起来并不是那么干净,因为我需要先在beanshell中设置java变量,然后才能使用它。但是,在Jmeter中,它提供了非常干净的方式在beanshell中使用map,就像在java中一样,但是JMeter开发了它的知道库(类),它有助于访问map的get / put方法。我想以类似的方式在beanshell中访问Map。
我已经检查了JMeter以获取更多信息,我想知道,我已经创建了用户定义变量temp和赋值错误,现在在BSF过程中我只写了一行vars.put('Name','temp Value' )它已更新临时变量的值。所以,问题是我还没有创建JMeterVariables对象变量,但仍然beanhell允许更新map中的值而不设置你的答案中提到的任何值。我想知道这是如何工作的,需要更深入的信息。
2)。我已经在java和beanshell中创建了自己的类我正在导入这个类,但是下面给出Command not found: BSClass()
是整个代码
Java类
package test;
public class BSClass {
public void BSCMethod(){
System.out.println("I am from BSClass method BSCMethod");
}
}
sample.bsh
import test.BSClass;
c=BSClass();
c.BSCMethod();
print("I am from BeanShell Script");
调用sample.bsh文件java class
package test;
import java.io.FileNotFoundException;
import java.io.IOException;
import bsh.*;
public class DynamicVariable {
public static void main(String[] args) throws FileNotFoundException, IOException, EvalError {
new bsh.Interpreter().source("\\src\\test\\sample.bsh");
}
}
注意:
我很感激您的意见
答案 0 :(得分:2)
在Beanshell中,您可以添加任何您想要的对象,包括地图
在JMeter中,JMeterVariables
是在评估之前添加到Beanshell Interpreter的Map的特殊实现,还添加了特殊的对象JMeterContext
,其中甚至包括JMeterVariables
。代码:
JMeterContext jmctx = JMeterContextService.getContext();
JMeterVariables vars = jmctx.getVariables();
try {
bshInterpreter.set("ctx", jmctx);//$NON-NLS-1$
bshInterpreter.set("Label", getName()); //$NON-NLS-1$
bshInterpreter.set("prev", jmctx.getPreviousResult());//$NON-NLS-1$
bshInterpreter.set("props", JMeterUtils.getJMeterProperties());
bshInterpreter.set("vars", vars);//$NON-NLS-1$
在您使用地图的情况下,您可以像在评论中描述的那样做:
bshInterpreter.set("myMap", javaMyMapObject);"
然后在Beanshell中从地图中获取特定的密钥:
myMap.get("aField");
要创建课程,您应使用new
关键字,请致电:
c= new BSClass();
而不是c=BSClass();
如果您创建自己的类,则Class应位于相关包中的jar内。
jar应位于 lib 文件夹中,而不是bin文件夹中,请参阅JMeter's getting started:
此类目录中的任何jar文件都将自动包含在其中 user.classpath,子目录中的jar文件被忽略。给定的 value是lib目录中找到的任何jar的补充。所有 条目将被添加到系统类加载器的类路径中 也是JMeter内部装载机的路径。