我知道如何准备测试计划并使用Java API在JMeter中运行它,这里有很多示例。缺少的是一种直接收集结果的方法。
我知道可以将结果保存在.jtl文件中,但这需要我在保存并解析后打开文件(具体取决于其格式)。我已经看到API提供了许多 Result 类,但是我无法弄清楚如何使用它们。我还尝试了调试,以弄清楚所涉及的类并尝试理解执行模型。
任何帮助将不胜感激
答案 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上找到许多示例