【问题标题】:Launch jmeter from junit test从junit测试启动jmeter
【发布时间】:2017-04-16 21:57:49
【问题描述】:

有没有办法在 selenium/junit 测试用例中集成记录的 jmeter 脚本(测试由多个用户执行的记录的一系列操作所施加的负载)。这样我就只用java执行那个selenium/junit测试用例,它给了我junit报告的性能结果? 我发现一些帖子告诉我如何将 selenium webdriver 集成到 jmeter 中,但不是相反。

【问题讨论】:

  • 从来没有听说过这样的事情,但通常使用 JMeter API 和 JUnit Runner 是可能的。不是小作品。我建议改用 Jenkins 插件:wiki.jenkins-ci.org/display/JENKINS/JMeter+Plugin
  • 你能澄清你在问什么吗?你最初写的问题完全没有意义。 jmeter 和 selenium 是两种不同的工具,用于非常不同的事情,而 junit 只是一个测试框架。你到底想做什么?
  • @Corey Goldberg,OP 问题(从 junit 运行 jmeter 测试)是有道理的,它太大而无法回答
  • 如果接受的答案是您想要的,那么问题不正确。此方案与“将jmeter测试集成到junit”无关

标签: java selenium junit jmeter load-testing


【解决方案1】:

您可以使用JMeter Java API 执行现有的 JMeter 测试,示例代码如下所示:

import org.apache.jmeter.engine.StandardJMeterEngine;
import org.apache.jmeter.reporters.ResultCollector;
import org.apache.jmeter.reporters.Summariser;
import org.apache.jmeter.save.SaveService;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.collections.HashTree;

import java.io.File;

public class JMeterFromCode {

    public static void main(String[] args) throws Exception {

        // JMeter Engine
        StandardJMeterEngine jmeter = new StandardJMeterEngine();

        // Initialize Properties, logging, locale, etc.
        JMeterUtils.loadJMeterProperties("/tmp/jmeter/bin/jmeter.properties");
        JMeterUtils.setJMeterHome("/tmp/jmeter");
        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 Test Plan
        HashTree testPlanTree = SaveService.loadTree(new File("/tmp/jmeter/bin/test.jmx"));

        Summariser summer = null;
        String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");
        if (summariserName.length() > 0) {
            summer = new Summariser(summariserName);
        }


        // Store execution results into a .jtl file
        String logFile = "/tmp/jmeter/bin/test.jtl";
        ResultCollector logger = new ResultCollector(summer);
        logger.setFilename(logFile);
        testPlanTree.add(testPlanTree.getArray()[0], logger);

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

替换:

  • 所有出现的 /tmp/jmeter - 带有 JMeter 安装路径
  • /tmp/jmeter/bin/test.jmx - 带有 .jmx 文件的路径,包含记录的 JMeter 脚本
  • /tmp/jmeter/bin/test.jtl - .jtl 结果文件的所需位置

有关执行 JMeter 测试的可能性的更多信息,请参阅 Five Ways To Launch a JMeter Test without Using the JMeter GUI 文章,也许您会发现一个更简单的集成解决方案,因为 JMeter 测试可以通过 Maven pluginAnt Task 与 Selenium 测试一起执行。

【讨论】:

  • 谢谢,这正是我想要的!有什么方法可以使用相同的 API 对报告的结果提出断言?例如,如果总运行时间少于 2 秒等,则测试应该通过。
  • 在 JMeter 测试计划中您可以使用Duration Assertion,详情请查看How to Use JMeter Assertions in Three Easy Steps。如果您将 JMeter 相关代码包装到 JUnit 或 TestNG 测试中,您可以执行以下操作:long before = System.currentTimeMillis(); //jmeter code long after = System.currentTimeMillis(); if ((after - before) > 2000) { Assert.fail("Duration of 2 seconds exceeded");}
猜你喜欢
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
  • 2012-10-12
  • 1970-01-01
  • 2017-04-29
  • 1970-01-01
相关资源
最近更新 更多