我有一个由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,)}
是否有类似上述代码的内容可以让我推断出项目文件的位置?
答案 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}
。
有趣的是,它既可以在GUI模式下运行,也可以在非GUI模式下运行(通过命令行)。