如何从内部获取 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 变量。
参考文献:
- GuiPackage class JavaDoc
- How to use BeanShell: JMeter's favorite built-in component向导
感谢, 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 模式(从命令行)下工作。
我有一个由 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 变量。
参考文献:
- GuiPackage class JavaDoc
- How to use BeanShell: JMeter's favorite built-in component向导
感谢
现在,我可以计算一次这个参数,re-use它作为一个用户变量。
JMETER_SCRIPTS_DIRECTORY=${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}
它的用法是${JMETER_SCRIPTS_DIRECTORY}
。
有趣的是,它可以在 GUI 模式和非 GUI 模式(从命令行)下工作。