从Java代码运行JMeter负载测试后获取聚合汇总值

时间:2017-02-26 14:33:57

标签: java jmeter

我正在使用以下代码从Java应用程序运行JMeter负载测试。

StandardJMeterEngine jmeter = new StandardJMeterEngine();

JMeterUtils.setJMeterHome(jmeterHome);
JMeterUtils.loadJMeterProperties(jmeterProperties);
JMeterUtils.initLogging();
JMeterUtils.initLocale();

HTTPSampler httpSampler = new HTTPSampler();
httpSampler.setDomain(host);
httpSampler.setPort(port);
httpSampler.setPath(path);
httpSampler.setMethod("GET");
httpSampler.setName("load test");

LoopController loopController = new LoopController();
loopController.setLoops(1);
loopController.setFirst(true);
loopController.initialize();

ThreadGroup threadGroup = new ThreadGroup();
threadGroup.setName("Sample Thread Group");
threadGroup.setNumThreads(userCount);
threadGroup.setRampUp(1);
threadGroup.setSamplerController(loopController);

HashTree testPlanTree = new HashTree();
TestPlan testPlan = new TestPlan("load test");
testPlanTree.add(testPlan);
HashTree threadGroupHashTree = testPlanTree.add(testPlan, threadGroup);
threadGroupHashTree.add(httpSampler);

jmeter.configure(testPlanTree);
jmeter.run();

运行此脚本后,我希望获得总平均延迟等聚合汇总值。我知道摘要报告可以登录到csv文件,然后我可以通过再次读取该文件来计算平均延迟。但我只是想知道有没有办法在没有编写和读取csv文件的情况下获得聚合值?

我已经在这里提到了以下文章和几个相关问题。

https://www.blazemeter.com/blog/5-ways-launch-jmeter-test-without-using-jmeter-gui http://uttesh.blogspot.com/2015/04/jmeter-load-testing-by-code-jmeter-api.html

1 个答案:

答案 0 :(得分:1)

一种方法是创建像ResultCollector这样的客户类(在我的情况下,这是JmeterOutListener.java)并从那里收集值,因为您可以访问它们。您可以在sampleOccurred方法中执行任何操作。

您可以解码ResultCollector课程,并进一步了解它的功能。

<强> JMeterTestFromCode.java

public class JMeterTestFromCode {

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

         String jmeterHome1 = "/rezsystem/apache-jmeter-2.11/apache-jmeter-2.11";
         File jmeterHome=new File(jmeterHome1);
         String slash = System.getProperty("file.separator");

         if (jmeterHome.exists()) {
             File jmeterProperties = new File(jmeterHome.getPath() + slash + "bin" + slash + "jmeter.properties");
             if (jmeterProperties.exists()) {
                 //JMeter Engine
                 StandardJMeterEngine jmeter = new StandardJMeterEngine();

                 //JMeter initialization (properties, log levels, locale, etc)
                 JMeterUtils.setJMeterHome(jmeterHome.getPath());
                 JMeterUtils.loadJMeterProperties(jmeterProperties.getPath());
                 JMeterUtils.initLogging();// you can comment this line out to see extra log messages of i.e. DEBUG level
                 JMeterUtils.initLocale();

                 // JMeter Test Plan, basically JOrphan HashTree
                 HashTree testPlanTree = new HashTree();     

                 // HTTP Sampler
                 HTTPSampler httpSampler = new HTTPSampler();
                 httpSampler.setDomain("www.google.com");
                 httpSampler.setPort(80);
                 httpSampler.setPath("/");
                 httpSampler.setMethod("GET");

                 // Loop Controller
                 TestElement loopCtrl = new LoopController();
                 ((LoopController)loopCtrl).setLoops(1);
                 ((LoopController)loopCtrl).addTestElement(httpSampler);
                 ((LoopController)loopCtrl).setFirst(true);

                 // Thread Group
                 SetupThreadGroup threadGroup = new SetupThreadGroup();
                 threadGroup.setNumThreads(1);
                 threadGroup.setRampUp(1);
                 threadGroup.setSamplerController((LoopController)loopCtrl);

                 // Test plan
                 TestPlan testPlan = new TestPlan("MY TEST PLAN");

                 testPlanTree.add("testPlan", testPlan);
                 testPlanTree.add("loopCtrl", loopCtrl);
                 testPlanTree.add("threadGroup", threadGroup);
                 testPlanTree.add("httpSampler", httpSampler);     

                 JmeterOutListener jmeterOutListener = new JmeterOutListener();
                 testPlanTree.add(testPlanTree.getArray()[0], jmeterOutListener);

                 // Run Test Plan
                 jmeter.configure(testPlanTree);
                 jmeter.run();

                 System.exit(0);

             }
         }

         System.err.println("jmeter.home property is not set or pointing to incorrect location");
         System.exit(1);    

    }
}

<强> JmeterOutListener.java

public class JmeterOutListener extends AbstractListenerElement implements SampleListener,Clearable,Serializable,TestListener,Remoteable,NoThreadClone{

    public JmeterOutListener() {
        // TODO Auto-generated constructor stub
    }

    @Override
    public void testEnded() {
        // TODO Auto-generated method stub
    }

    @Override
    public void testEnded(String arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void testStarted() {
        // TODO Auto-generated method stub
    }

    @Override
    public void testStarted(String arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void testIterationStart(LoopIterationEvent arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void clearData() {
        // TODO Auto-generated method stub
    }

    @Override
    public void sampleOccurred(SampleEvent event) {

        SampleResult sample = event.getResult();

        System.out.println("sampleOccurred().sample.getTimeStamp() : " + sample.getTimeStamp());
        System.out.println("sampleOccurred().sample.getTime() : " + sample.getTime());
        System.out.println("sampleOccurred().sample.getSampleLabel() : " + sample.getSampleLabel());
        System.out.println("sampleOccurred().sample.getResponseCode() : " + sample.getResponseCode());
        System.out.println("sampleOccurred().sample.getResponseMessage() : " + sample.getResponseMessage());
        System.out.println("sampleOccurred().sample.getThreadName() : " + sample.getThreadName());
        System.out.println("sampleOccurred().sample.isSuccessful() : " + sample.isSuccessful());

        String              message             = null;
        AssertionResult[]   results             = sample.getAssertionResults();
        if (results != null)
        {
            for (int i = 0; i < results.length; ++i) {
                message = results[i].getFailureMessage();
                System.out.println("sampleOccurred().message : " + message);
                if (message != null) {
                    break;
                }
            }
        }

        System.out.println("sampleOccurred().sample.getBytes() : " + sample.getBytes());
        System.out.println("sampleOccurred().sample.getGroupThreads() : " + sample.getGroupThreads());
        System.out.println("sampleOccurred().sample.getAllThreads() : " + sample.getAllThreads());
        System.out.println("sampleOccurred().sample.getURL() : " + sample.getURL());
        System.out.println("sampleOccurred().sample.getLatency() : " + sample.getLatency());
        System.out.println("sampleOccurred().sample.getDataEncodingWithDefault() : " + sample.getDataEncodingWithDefault());
        System.out.println("sampleOccurred().sample.getSampleCount() : " + sample.getSampleCount());
        System.out.println("sampleOccurred().sample.getErrorCount() : " + sample.getErrorCount());

    }

    @Override
    public void sampleStarted(SampleEvent arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void sampleStopped(SampleEvent arg0) {
        // TODO Auto-generated method stub
    }

}