我在JMeter中进行了测试,并且使用GUI运行完美,但是当我使用我的Java代码运行它时(如下所示: http://blazemeter.com/blog/5-ways-launch-jmeter-test-without-using-jmeter-gui),我无法从属性中检索参数。 如果我在beanshell日志中打印它们,我可以看到它们。 但是,当我尝试在线程组中使用此参数作为用户数量时,它无法正常工作。
更多信息:
${__P(paramName)}
也尝试了$(__property{paramName})
。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();
}
答案 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>