如何从Jmeter.jmx项目文件内部获取Jmeter.jmx项目文件的绝对文件夹位置?

如何从Jmeter.jmx项目文件内部获取Jmeter.jmx项目文件的绝对文件夹位置?,jmeter,jmeter-maven-plugin,Jmeter,Jmeter Maven Plugin,我有一个由Maven执行的Jmeter项目,它能够通过路径src/test/Jmeter/external scripts dir/script1.bsh定位外部Beanshell脚本,但是当我在计算机的GUI中直接运行Jmeter时,相对位置不起作用,测试无法独立运行。这迫使我从Maven运行Jmeter 因此,我有一个项目文件位于Maven布局位置,如C:\files\git\projectA\src\test\jmeter\project.jmx,但由于我从安装文件夹C:\Jmeter2.

我有一个由Maven执行的Jmeter项目,它能够通过路径
src/test/Jmeter/external scripts dir/script1.bsh
定位外部Beanshell脚本,但是当我在计算机的GUI中直接运行Jmeter时,相对位置不起作用,测试无法独立运行。这迫使我从Maven运行Jmeter

因此,我有一个项目文件位于Maven布局位置,如
C:\files\git\projectA\src\test\jmeter\project.jmx
,但由于我从安装文件夹
C:\Jmeter2.12
运行jmeter,它找不到我前面提到的外部脚本的相对位置

要解决这个问题,我只需要在包含.jmx文件的目录中设置一个变量。有什么可能的方法可以做到这一点吗

我可以很容易地(使用以下代码)动态地确定Jmeter(
C:\Jmeter2.12
)的主目录,但这并不能帮助我获得项目文件的位置

${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer
  .getFileServer().getBaseDir();)}${__BeanShell(File.separator,)}
是否有类似于上述代码的东西可以让我推断出项目文件的位置?

解决方案是(感谢Ardesco)执行以下操作:

使用测试计划全局变量中设置的以下变量:

projectHome = ${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}
jmeterHome = ${__BeanShell(System.getProperty("user.dir");)}
scriptHome = ${projectHome}/scripts

如果您正在寻找在GUI模式下运行JMeter时定位当前脚本的方法,则可以尝试以下Beanshell表达式:

${__BeanShell(import org.apache.jmeter.gui.GuiPackage;GuiPackage.getInstance().getTestPlanFile();)}
如果将其制动为5条管路,则会出现:

import org.apache.jmeter.gui.GuiPackage;
import org.apache.commons.io.FilenameUtils;
String testPlanFile = GuiPackage.getInstance().getTestPlanFile();
String testPlanFileDir = FilenameUtils.getFullPathNoEndSeparator(testPlanFile);
vars.put("testPlanFileDir", testPlanFileDir);
log.info("testPlanFileDir:" + testPlanFileDir);
当前的.jmx文件将存储为
scriptFile
JMeter变量

参考资料:

  • GuiPackage类
  • 向导
    • 多亏了,我解决了一个问题

      现在,我可以计算这个参数一次,并将其作为用户变量重新使用

      JMETER_SCRIPTS_DIRECTORY=${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}
      
      它的用法是
      ${JMETER\u SCRIPTS\u DIRECTORY}


      有趣的是,它可以在GUI模式和非GUI模式下工作(从命令行)。

      不确定这是否有帮助,但您知道可以使用meter maven插件在GUI模式下运行JMeter吗?只需进入您的项目并执行:mvnjmeter:gui-就可以获得gui/非gui模式执行的jmx测试计划文件位置。我今天就来试试。谢谢。这在从JMeterGUI运行测试时起作用。对于从Maven运行,@djangofan的建议很有帮助。您可以使用_P语法获取属性,因此jmeterHome可以简化为${u_P(user.dir)}。您在这里得到的是Jmeter环境的bin文件夹,而不是JMX文件的位置。@ShaiAlon
      projectHome
      是JMX文件所在的位置,而
      jmeterHome
      实际上是JMeter环境的bin文件夹。但是,问题毕竟是如何获取JMX文件的文件夹而不是bin文件夹。如果通过运行
      /bin/JMeter
      从JMeter安装的根目录正确启动JMeter,jmeterHome就不是环境的
      bin
      文件夹。如果您正确设置了路径,这就是您应该拥有的。我知道这经常被误解,比如jmeter-maven插件,它使用/bin作为主页。