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

How to get the absolute folder location of a Jmeter .jmx project file from within itself?

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

所以,我有一个项目文件位于 C:\files\git\projectA\src\test\jmeter\Project.jmx 这样的 Maven 布局位置,但是由于我从位于 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 变量。

参考文献:

感谢, I was able to solve a related problem

现在,我可以计算一次这个参数,re-use它作为一个用户变量。

JMETER_SCRIPTS_DIRECTORY=${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}

它的用法是${JMETER_SCRIPTS_DIRECTORY}

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