运行 Java class 与 JMeter (Bean Shell)

Running Java class with JMeter (Bean Shell)

我写了一个Java Class 用于JMeter,将项目打包为.jar 文件并将该文件移动到jmeter 目录的lib/ext 文件夹中。我看过有关如何进行的文档,但他们给出了相互矛盾的答案。

第一种方法是使用BeanShell Sampler 导入我的包和class,创建class 和运行 方法的对象。我使用示例 classes 使用此方法,文件结构比 class 我想要 运行 的文件结构更简单。该示例 class 使用以下 BeanShell 脚本。

import tools.JmeterTools;
JmeterTools jt = new JmeterTools();
jt.foo();

当我尝试将此方法用于 class 我想 运行 时,它指出变量声明错误并且无法找到 Class。我想这是因为我不明白到底要导入什么,因为我项目中的文件结构有点奇怪。

第二个使用 BeanShell 预处理器将 jar 添加到 class 路径。这种方法我根本无法开始工作,但已经阅读了许多其他人获得成功的报道。它的工作原理如下:

addClassPath("directory path to jar\lib\ext\foo.jar");
JMeterTest jtm = new JMeterTest();
jmt.test();

有没有人知道哪种方法效果更好,或者有任何关于如何修复导入的想法?

我在 BeanShell 脚本中使用的导入如下:

import client.JMeterTest;

我的 class 顶部的包行如下

import com.x.foo.client;

您需要将 jar 文件放在 JMETER_HOME/lib 文件夹中。

lib/ext 用于 JMeter extensions/plugins 等

放置 jar 后,您可能需要重新启动 JMeter。

运行 来自 Beanshell 的外部 classes 在满足以下先决条件的情况下应该可以正常工作

  1. 您的依赖项测试位于 JMeter classpath
  2. 需要重新启动 JMeter 才能选择新库
  3. 您需要提供完整的包名称和完整的 class 名称(或通配符)才能导入。

    两者都

    import com.x.foo.client.JMeterTest;
    

    import com.x.foo.client.*;
    
  4. 最后,建议使用 JSR223 Sampler and use "groovy" as a language. Beanshell interpreter has severe performance issues so use it for something very "light" like variable amendment, converting variable to property, etc. For generating the real load use JSR223 and groovy as it implements Compilable interface and hence you can achieve performance similar to native Java code. See Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For! 指南获取有关 groovy 脚本引擎支持的详细说明、基准测试和安装说明。

对于以后遇到此问题的任何人。别人给出的答案是正确的。它对我不起作用,因为我忘记了 Maven 在制作 jar 时不会将文件打包到测试目录中。

如果将来有人这样做,link 可能会有所帮助。 Generate test-jar along with jar file in test package