从Java运行Jmeter测试时,它不使用属性

时间:2015-04-16 14:33:54

标签: java maven jmeter beanshell

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

更多信息:

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

    添加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();
    }
    

1 个答案:

答案 0 :(得分:2)

正确的语法应该是:

${__P(prop_name)}

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

  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的snippit可能很有用。

编辑: 我相信问题可能在于您的Beanshell如何访问属性。我从来没有必要访问JMeterUtils类来操作JMX中的变量或属性。

用于分配属性的Beanshell语法:

props.put("test_prop_name","prop_value");

获取属性的Behellhell语法:

props.get("test_prop_name");

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

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>