JMeter Java API-如何收集测试结果

时间:2019-05-16 16:25:50

标签: jmeter

我知道如何准备测试计划并使用Java API在JMeter中运行它,这里有很多示例。缺少的是一种直接收集结果的方法。

我知道可以将结果保存在.jtl文件中,但这需要我在保存并解析后打开文件(具体取决于其格式)。我已经看到API提供了许多 Result 类,但是我无法弄清楚如何使用它们。我还尝试了调试,以弄清楚所涉及的类并尝试理解执行模型。
任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

是的,我不确定这是否是正确的答案,我认为没有正确的答案,因为这实际上取决于您的需求。至少我设法了解了更多调试测试执行的知识。

基本上,我最终要做的是扩展ResultCollector并将其添加到TestPlan实例。收集器要做的是将收到的事件存储起来,并在测试结束时将其打印出来(但是此时,您可以使用它进行任何操作)

如果您有更好的方法,请告诉我(我想更通用的方法是在不使用ResultCollector的特定实现的情况下实现SampleListener和TestStateListener)

import java.util.LinkedList;
import org.apache.jmeter.reporters.ResultCollector;
import org.apache.jmeter.samplers.SampleEvent;

public class RealtimeResultCollector extends ResultCollector{

    LinkedList<SampleEvent> collectedEvents = new LinkedList<>();

    /**
     * When a test result is received, store it internally
     *
     * @param event
     *            the sample event that was received
     */
    @Override
    public void sampleOccurred(SampleEvent event) {
        collectedEvents.add(event);
    }

    /**
     * When the test ends print the response code for all the events collected
     *
     * @param host
     *            the host where the test was running from
     */
    @Override
    public void testEnded(String host) {
        for(SampleEvent e: collectedEvents){
            System.out.println("TEST_RESULT: Response code = " + e.getResult().getResponseCode()); // or do whatever you want ...
         }
    }
}

在主代码或您创建测试计划的任何地方的代码

...
HashTree ht = new HashTree();

...

TestPlan tp = new TestPlan("MyPlan");

RealtimeResultCollector rrc = new RealtimeResultCollector();

// after a lot of confugration, before executing the test plan ...

ht.add(tp);
ht.add(ht.getArray()[0], rtc);

有关上面代码的详细信息,您可以在zgrepcode.com上找到许多示例