Jmeter BSF使用Groovy,导入一个脚本';s函数对另一个函数的作用

Jmeter BSF使用Groovy,导入一个脚本';s函数对另一个函数的作用,groovy,jmeter,Groovy,Jmeter,我在Jmeter BSF中使用groovy,有时我的函数被频繁使用,可以移动到一些脚本中,而不是用作库。 我的方法是创建一个文件,比如“library.groovy”,并在其中添加一些函数 public void function() { println("hello!"); } 然后在我的BSF脚本中使用以下代码 import library.groovy; function(); 这两个文件位于同一目录中,但脚本拒绝定位库。我还试图显式地将这个函数包装到类中,但也没有效果 有人能

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

public void function()
{
    println("hello!");
}
然后在我的BSF脚本中使用以下代码

import library.groovy;
function();
这两个文件位于同一目录中,但脚本拒绝定位库。我还试图显式地将这个函数包装到类中,但也没有效果

有人能提出解决办法吗

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

我认为您需要将助手方法包装在一个类中,然后导入该类。因此,助手方法文件应该包含

package library

class UsefulFunctions {
   static function() {
        println 'hello'
    }
}
然后在测试脚本中,说

import static library.UsefulFunctions.*

function()

现在,这只是表面上的,但我希望它足以让您开始。

我认为您需要将助手方法包装在一个类中,然后导入该类。因此,助手方法文件应该包含

package library

class UsefulFunctions {
   static function() {
        println 'hello'
    }
}
然后在测试脚本中,说

import static library.UsefulFunctions.*

function()

现在,这只是一个表面现象,但我希望它足以让您开始。

我最终得到了如下两个文件: “MyHelloClass.groovy”

还有“HelloScript.groovy”


然后我可以从Jmeter在BSF中运行“HelloScript.groovy”。

我得到了如下两个文件: “MyHelloClass.groovy”

还有“HelloScript.groovy”


然后我可以从Jmeter在BSF中运行“HelloScript.groovy”。

我刚刚遇到了这个问题,并以一种看起来更美观的方式解决了它。这基本上是winstaan74的答案,但需要额外的比特数才能使其工作

您拥有函数的groovy文件,名为say: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断言/listener/where指向该脚本:

import My.JmeterFunctions.*

def my_hello_class_instance = new MyHelloClass();
my_hello_class_instance.hello();
这就是我的工作。如果您希望将.jar组织到不同于jmeter/lib的文件夹中,我相信您可以使用(从)运行jmeter: $jmeter-Jsearch_path=/path/to/yourfunction.jar


但我自己并没有试过。我只是遇到了这个问题,并以一种对我来说更好看的方式解决了它。这基本上是winstaan74的答案,但需要额外的比特数才能使其工作

您拥有函数的groovy文件,名为say: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断言/listener/where指向该脚本:

import My.JmeterFunctions.*

def my_hello_class_instance = new MyHelloClass();
my_hello_class_instance.hello();
这就是我的工作。如果您希望将.jar组织到不同于jmeter/lib的文件夹中,我相信您可以使用(从)运行jmeter: $jmeter-Jsearch_path=/path/to/yourfunction.jar


但是我自己没有试过。

正如我提到的,我试过这个,但在Jmeter BSF中总是出现“无法解析类”错误。正如我提到的,我试过这个,但在Jmeter BSF中总是出现“无法解析类”错误。不确定为什么,但是我在尝试你的代码时得到了这个结论:
javax.script.ScriptException:groovy.lang.MissingPropertyException:没有这样的属性:类的props:MyHelloClass
。不知道为什么,但我在尝试你的代码时得到了这个结论:
javax.script.ScriptException:groovy.lang.MissingPropertyException:没有这样的属性:类的props:MyHelloClass