使用Groovy的Jmeter BSF,将一个脚本的函数导入另一个

时间:2011-09-21 07:38:23

标签: groovy jmeter

我在我的Jmeter BSF中使用了groovy,有时候我的常用函数经常被移动到一些脚本,而这些脚本我可以用作库。 我的方法是创建一个文件,比如说“library.groovy”,并添加一些函数

public void function()
{
    println("hello!");
}

然后在我的BSF脚本中使用以下代码

import library.groovy;
function();

两个文件都在同一个目录中,但脚本拒绝找到库。我也尝试将这个函数显式地包装到类中,但我也没有效果。

有人可以为此提出解决方案吗?

更新: 我尝试了互联网中描述的几乎所有可能的解决方案在groovy控制台或Eclipse中工作的所有东西都不在Jmeter中。可能是因为BSF。有人知道一些解决方法吗?

3 个答案:

答案 0 :(得分:3)

我刚遇到这个问题,并以一种对我而言看起来更漂亮的方式解决了这个问题。它基本上是winstaan​​74的答案,但需要额外的位才能使它工作。

你有你的函数的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”。