我在我的Jmeter BSF中使用了groovy,有时候我的常用函数经常被移动到一些脚本,而这些脚本我可以用作库。 我的方法是创建一个文件,比如说“library.groovy”,并添加一些函数
public void function()
{
println("hello!");
}
然后在我的BSF脚本中使用以下代码
import library.groovy;
function();
两个文件都在同一个目录中,但脚本拒绝找到库。我也尝试将这个函数显式地包装到类中,但我也没有效果。
有人可以为此提出解决方案吗?
更新: 我尝试了互联网中描述的几乎所有可能的解决方案在groovy控制台或Eclipse中工作的所有东西都不在Jmeter中。可能是因为BSF。有人知道一些解决方法吗?
答案 0 :(得分:3)
我刚遇到这个问题,并以一种对我而言看起来更漂亮的方式解决了这个问题。它基本上是winstaan74的答案,但需要额外的位才能使它工作。
你有你的函数的groovy文件,名为:MyJmeterFunctions.groovy:
package My.JmeterFunctions
public class MyHelloClass {
public void hello() {
println("Hello!");
}
}
然后从终端编译:
$ groovyc -d myJmeterFunctions myJmeterFunctions.groovy
并将其转换为jmeter安装的/ lib文件夹中的.jar,以及jmeter附带的所有其他.jar文件
$ jar cvf /<>/apache-jmeter-2.8/lib/myJmeterFunctions.jar -C myJmeterFunctions。
现在,重启jmeter。在你做之前,它不会知道你的新.jar。
最后你有你想要运行hello()函数的脚本,你的jmeter BSF断言/监听器/无论指向哪个:
import My.JmeterFunctions.*
def my_hello_class_instance = new MyHelloClass();
my_hello_class_instance.hello();
这对我有用。如果您宁愿将.jar组织到与jmeter / lib不同的文件夹中,我相信您可以使用(来自here)运行jmeter: $ jmeter -Jsearch_paths = / path / to / yourfunction.jar
但我自己没试过。
答案 1 :(得分:0)
我认为您需要将辅助方法包装在一个类中,然后导入该类。因此,您的帮助方法文件应包含..
package library
class UsefulFunctions {
static function() {
println 'hello'
}
}
然后在你的测试脚本中,说
import static library.UsefulFunctions.*
function()
现在,这只是表面上的问题,但我希望这足以让你开始。
答案 2 :(得分:0)
我最终得到了2个如下文件: “MyHelloClass.groovy”
public class MyHelloClass {
public void hello() {
println("Hello!");
}
}
和“HelloScript.groovy”
try {
ClassLoader parent = getClass().getClassLoader();
GroovyClassLoader loader = new GroovyClassLoader(parent);
Class groovyClass = loader.parseClass(new File("../GroovyScripts/MyHelloClass.groovy"));
GroovyObject helloClass = (GroovyObject) groovyClass.newInstance();
helloClass.hello();
}
catch (Throwable e) {
println(e.toString());
}
然后我可以从Jmeter在BSF中运行“HelloScript.groovy”。