当 运行 从 java 进行 Jmeter 测试时,它不使用属性

When Running Jmeter test from java its not using the properties

我在 JMeter 中进行了测试,使用 GUI 它 运行 非常完美,但是当我 运行 它使用我的 Java 代码时(就像从这里: http://blazemeter.com/blog/5-ways-launch-jmeter-test-without-using-jmeter-gui), 我无法从属性中检索参数。 如果我在 beanshell 日志中打印它们,我就可以看到它们。 但是,当我尝试在线程组中使用此参数作为用户数时,它不起作用。

更多信息:

  1. 我有一个设置线程来计算 csv 文件的行数,并且 向 属性 插入一个值,以便在下一个线程中我将 使用此 属性 设置用户数量。 (这个逻辑是 在测试期间发生两次)。
  2. 我正在使用以下 Maven 依赖项:ApacheJMeter_http V2.11(2.13 与 common-pools2 和 d-haven 产生冲突)
  3. eclipse(如果重要的话)
  4. 目标是我将传递给测试的唯一参数 运行 是测试文件。
  5. 测试中的prop语句是这样的${__P(paramName)}也试过$(__property{paramName}).
  6. 我还在文件本身中创建了一个 属性 而不是在 bean 中使用 shell JMeterUtils.setProperty("paramName","5");

添加 bean shell 片段:

import org.apache.jmeter.util.JMeterUtils;
import java.io.*;

BufferedReader br = new BufferedReader(new FileReader("C:\res\movieResultData.csv"));
String line;

int counter = 0;
while ((line = br.readLine()) != null) {
   counter++;
}
br.close();
JMeterUtils.setProperty("statsThreadNum",Integer.toString(counter-1));

我的java代码:

    @Test
public void ttt() throws Exception {
    // JMeter Engine
    StandardJMeterEngine jmeter = new StandardJMeterEngine();

    // Initialize Properties, logging, locale, etc.
    JMeterUtils.loadJMeterProperties("C:\apache-jmeter-2.12\bin\jmeter.properties");
    JMeterUtils.setJMeterHome("C:\apache-jmeter-2.12");
    //JMeterUtils.initLogging();// you can comment this line out to see extra log messages of i.e. DEBUG level
    JMeterUtils.initLocale();

    // Initialize JMeter SaveService
    SaveService.loadProperties();

    // Load existing .jmx Test Plan
    FileInputStream in = new FileInputStream("C:\apache-jmeter-2.12\bin\statsTests2.jmx");
    HashTree testPlanTree = SaveService.loadTree(in);
    in.close();

    // Run JMeter Test
    jmeter.configure(testPlanTree);
    jmeter.run();
}

正确的语法应该是:

${__P(prop_name)}

如果您 运行 它仅通过 java 实现,请确保在 JVM 启动时将 属性 文件传递​​给它或使用以下代码片段:

  JMeterUtils.loadJMeterProperties("/path/to/your/jmeter/bin/jmeter.properties");

您是否使用 Apache Exec 从 java 作为外部进程启动 JMeter? 如果是这样,请确保使用以下选项构建 CMD 行语句:

-p, --propfile {argument}
            the jmeter property file to use
-G, --globalproperty (argument)[=(value)]
            Define Global properties (sent to servers)

向我们展示您用于在 SetUp 中设置属性的 Beanshell 片段可能会有用。

编辑: 我相信问题可能出在您的 Beanshell 访问属性的方式上。我从来不需要访问 JMeterUtils class 来操作 JMX 中的变量或属性。

用于分配 属性:

的 Beanshell 语法
props.put("test_prop_name","prop_value");

获取 属性:

的 Beanshell 语法
props.get("test_prop_name");

用于将 属性 分配给变量的 Beanshell 语法:

vars.put("test_var_name",props.get("test_prop"));

然后可以像这样在采样器中引用此变量:

${test_var_name}

或者您应该能够像这样在采样器中直接访问 属性:

${__P(test_prop_name)}

此外,如果您希望修复 JMeter 2.13 的 Maven 问题,请使用以下 POM:

<dependencies>
    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter_config</artifactId>
        <version>2.13</version>
        <scope>provided</scope>
        <exclusions>
            <exclusion>
                <groupId>commons-math3</groupId>
                <artifactId>commons-math3</artifactId>
            </exclusion>
            <exclusion>
                <groupId>commons-pool2</groupId>
                <artifactId>commons-pool2</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter_java</artifactId>
        <version>2.13</version>
        <scope>provided</scope>
        <exclusions>
            <exclusion>
                <groupId>commons-math3</groupId>
                <artifactId>commons-math3</artifactId>
            </exclusion>

            <exclusion>
                <groupId>commons-pool2</groupId>
                <artifactId>commons-pool2</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-math3</artifactId>
        <version>3.4.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
        <version>2.3</version>
        <scope>provided</scope>
    </dependency>
</dependencies>