当 运行 从 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 日志中打印它们,我就可以看到它们。
但是,当我尝试在线程组中使用此参数作为用户数时,它不起作用。
更多信息:
- 我有一个设置线程来计算 csv 文件的行数,并且
向 属性 插入一个值,以便在下一个线程中我将
使用此 属性 设置用户数量。 (这个逻辑是
在测试期间发生两次)。
- 我正在使用以下 Maven 依赖项:ApacheJMeter_http V2.11(2.13 与 common-pools2 和 d-haven 产生冲突)
- eclipse(如果重要的话)
- 目标是我将传递给测试的唯一参数 运行 是测试文件。
- 测试中的prop语句是这样的
${__P(paramName)}
也试过$(__property{paramName})
.
- 我还在文件本身中创建了一个 属性 而不是在 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>
我在 JMeter 中进行了测试,使用 GUI 它 运行 非常完美,但是当我 运行 它使用我的 Java 代码时(就像从这里: http://blazemeter.com/blog/5-ways-launch-jmeter-test-without-using-jmeter-gui), 我无法从属性中检索参数。 如果我在 beanshell 日志中打印它们,我就可以看到它们。 但是,当我尝试在线程组中使用此参数作为用户数时,它不起作用。
更多信息:
- 我有一个设置线程来计算 csv 文件的行数,并且 向 属性 插入一个值,以便在下一个线程中我将 使用此 属性 设置用户数量。 (这个逻辑是 在测试期间发生两次)。
- 我正在使用以下 Maven 依赖项:ApacheJMeter_http V2.11(2.13 与 common-pools2 和 d-haven 产生冲突)
- eclipse(如果重要的话)
- 目标是我将传递给测试的唯一参数 运行 是测试文件。
- 测试中的prop语句是这样的
${__P(paramName)}
也试过$(__property{paramName})
. - 我还在文件本身中创建了一个 属性 而不是在 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>