JMeterJavaAPI-如何收集测试结果

JMeterJavaAPI-如何收集测试结果,jmeter,Jmeter,我知道如何准备一个测试计划并使用JavaAPI在JMeter中运行它,有很多关于如何做的例子。缺少的是直接收集结果的方法。我知道可以将结果保存在.jtl文件中,但这需要我在保存后打开该文件并对其进行分析(取决于其格式)。我看到API提供了相当多的结果类,但我不知道如何使用它们。我还尝试过调试,试图找出涉及哪些类,并试图理解执行模型 非常感谢您的任何帮助对,我不确定这是否是正确的答案,我认为没有正确的答案,因为这取决于您的需要。至少我对调试测试执行有了更多的了解 基本上,我最终做的是扩展Resul

我知道如何准备一个测试计划并使用JavaAPI在JMeter中运行它,有很多关于如何做的例子。缺少的是直接收集结果的方法。

我知道可以将结果保存在.jtl文件中,但这需要我在保存后打开该文件并对其进行分析(取决于其格式)。我看到API提供了相当多的结果类,但我不知道如何使用它们。我还尝试过调试,试图找出涉及哪些类,并试图理解执行模型

非常感谢您的任何帮助

对,我不确定这是否是正确的答案,我认为没有正确的答案,因为这取决于您的需要。至少我对调试测试执行有了更多的了解

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

如果您有更好的方法,请让我知道(我想更通用的方法是实现SampleListener和TestStateListener,而不使用ResultCollector的特定实现)

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

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);