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

时间:2015-01-07 00:06:37

标签: 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.12的安装文件夹中运行了jmeter,所以找不到我提到的外部脚本的相对位置早。

要解决这个问题,我需要的是将变量设置为包含.jmx文件的目录。有没有办法做到这一点?

我可以很容易地动态确定Jmeter(C:\Jmeter2.12)的主页(使用下面的代码),但这无助于我获取项目文件的位置。

${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer
  .getFileServer().getBaseDir();)}${__BeanShell(File.separator,)}

是否有类似上述代码的内容可以让我推断出项目文件的位置?

3 个答案:

答案 0 :(得分:7)

如果您在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变量。

参考文献:

答案 1 :(得分:6)

解决方案是(感谢Ardesco)做以下事情:

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

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

答案 2 :(得分:0)

多亏了accepted answer,我才得以解决related problem

现在,我可以计算一次此参数,然后将其重新用作用户变量。

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

其用法是${JMETER_SCRIPTS_DIRECTORY}enter image description here

有趣的是,它既可以在GUI模式下运行,也可以在非GUI模式下运行(通过命令行)。