如何从Java代码执行JMeter测试用例

时间:2014-09-23 10:50:34

标签: eclipse jmeter java-7

如何从Java代码运行JMeter测试用例?

我已关注Blazemeter.com的示例Here

我的代码如下:

public class BasicSampler {

public static void main(String[] argv) throws Exception {
    // JMeter Engine
    StandardJMeterEngine jmeter = new StandardJMeterEngine();

    // Initialize Properties, logging, locale, etc.
    JMeterUtils.loadJMeterProperties("/home/stone/Workbench/automated-testing/apache-jmeter-2.11/bin/jmeter.properties");
    JMeterUtils.setJMeterHome("/home/stone/Workbench/automated-testing/apache-jmeter-2.11");
    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("/home/stone/Workbench/automated-testing/apache-jmeter-2.11/bin/examples/CSVSample.jmx");
    HashTree testPlanTree = SaveService.loadTree(in);
    in.close();

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

}

但是我一直在控制台中收到以下消息,我的测试永远不会执行。

  

INFO 2014-09-23 12:04:40.492 [jmeter.e]():启用运行版后将启动监听器   INFO 2014-09-23 12:04:40.511 [jmeter.e]():要恢复到之前的行为,请定义jmeterengine.startlistenerslater = false

我还尝试从jmeter.properties文件中取消注释jmeterengine.startlistenerslater = false

2 个答案:

答案 0 :(得分:2)

  1. 你怎么知道你的“测试永远不会执行”?
  2. jmeter.log文件中的内容(它应该位于项目的根目录中)。或者,请注释JMeterUtils.initLogging()行以查看STDOUT中的完整输出
  3. 您是否更改了“获取用户详细信息”CSV数据集配置中的相对路径CSVSample_user.csv,因为它可能会解析为Using CSV DATA SET CONFIG
  4. 中建议的其他位置
  5. CSVSample.jtl文件是否在任何地方生成(默认情况下,它应该在项目的根目录中)?里面有什么?
  6. 代码看起来不错,我很确定问题在于CSVSample_user.csv文件的路径,并且您的日志中有java.io.FileNotFoundException之类的内容。请仔细检查CSVSample.jmx文件是否包含有效的完整路径到CSVSample_user.csv。

    更新评论中的答案

      默认情况下,
    1. jmeter.log文件应位于Eclipse工作区文件夹下
    2. 调查CSVSample.jmx有一个View Resulst in Table侦听器,配置为在~/CSVSample.jtl
    3. 下存储结果
    4. 如果您想查看摘要生成器消息和“经典”.jtl报告,请在jmeter.configure(testPlanTree);节之前添加下几行

      Summariser summer = null;
      String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");
      if (summariserName.length() > 0) {
          summer = new Summariser(summariserName);
      }
      
      String logFile = "/path/to/jtl/results/file.jtl";
      ResultCollector logger = new ResultCollector(summer);
      logger.setFilename(logFile);
      testPlanTree.add(testPlanTree.getArray()[0], logger);
      

答案 1 :(得分:0)

尝试使用库 - https://github.com/abstracta/jmeter-java-dsl

支持将 JMeter 测试实现为 java 代码。

以下示例展示了如何实现和执行 REST API 测试。同样的方法也适用于其他类型的测试。

  @Test
  public void testPerformance() throws IOException {
    TestPlanStats stats = testPlan(
      threadGroup(2, 10,
        httpSampler("http://my.service")
          .post("{\"name\": \"test\"}", Type.APPLICATION_JSON)
      ),
      //this is just to log details of each request stats
      jtlWriter("test" + Instant.now().toString().replace(":", "-") + ".jtl")
    ).run();
    assertThat(stats.overall().elapsedTimePercentile99()).isLessThan(Duration.ofSeconds(5));
  }