8

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

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

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

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

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

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

4

3 回答 3

9

If you're looking for the way to locate current script when you run JMeter in GUI mode you can try the following Beanshell expression:

${__BeanShell(import org.apache.jmeter.gui.GuiPackage;GuiPackage.getInstance().getTestPlanFile();)}

If you brake this down into 5 lines there will be:

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);

Your current .jmx file fill be stored as scriptFile JMeter Variable.

References:

于 2015-01-08T12:13:31.643 回答
8

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

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

projectHome = ${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}
jmeterHome = ${__BeanShell(System.getProperty("user.dir");)}
scriptHome = ${projectHome}/scripts
于 2015-01-07T19:26:32.550 回答
3

感谢接受的答案,我能够解决相关问题

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

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

它的用法是${JMETER_SCRIPTS_DIRECTORY}在此处输入图像描述

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

于 2020-08-10T14:11:24.100 回答