将 UltimateThreadGroup 与 Java API 一起使用会产生 Nullpointer 异常

Using UltimateThreadGroup with Java API gives Nullpointer exception

我正在尝试将 UltimateThreadGroup 与 JMeter Java API 一起使用,我正在按照以下代码[2] 创建 UltimateThreadGroup 对象并将其添加到哈希树中。 最后交给JMeter引擎去执行。

但它在执行过程中给出了以下 NullPointerException。当我调试代码时,问题似乎来自 JMeterThread class 以下方法。

public JMeterThread(HashTree test, JMeterThreadMonitor monitor, ListenerNotifier note, Boolean isSameUserOnNextIteration)

但是问题在不同的代码行上抛出,从执行到执行。所以很难找出导致 NullPointer 的原因。

有人知道这里发生了什么吗?感谢您的回答。

[1]

    2020-11-03 13:08:20 DEBUG TestCompiler:273 - adding controller: kg.apc.jmeter.threads.UltimateThreadGroup@30b2b76f to sampler config
2020-11-03 13:08:22 ERROR JMeterThread:319 - Test failed!
java.lang.NullPointerException
    at org.apache.jmeter.threads.AbstractThreadGroup.addTestElement(AbstractThreadGroup.java:122)
    at org.apache.jmeter.threads.AbstractThreadGroup.addTestElementOnce(AbstractThreadGroup.java:131)
    at org.apache.jmeter.threads.TestCompiler.subtractNode(TestCompiler.java:151)
    at org.apache.jorphan.collections.HashTree.traverseInto(HashTree.java:997)
    at org.apache.jorphan.collections.HashTree.traverseInto(HashTree.java:994)
    at org.apache.jorphan.collections.HashTree.traverse(HashTree.java:976)
    at org.apache.jmeter.threads.JMeterThread.initRun(JMeterThread.java:704)
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:252)
    at java.lang.Thread.run(Thread.java:748)

[2]

UltimateThreadGroup ultimateThreadGroup = new UltimateThreadGroup();
ultimateThreadGroup.setName(threadGroupName);
ultimateThreadGroup.setProperty(AbstractThreadGroup.ON_SAMPLE_ERROR, AbstractThreadGroup.ON_SAMPLE_ERROR_CONTINUE);
PowerTableModel dataModel = new PowerTableModel(UltimateThreadGroupGui.columnIdentifiers, UltimateThreadGroupGui.columnClasses);
dataModel.addRow(new Integer[]{2, 4, 10, 60, 10});
dataModel.addRow(new Integer[]{3, 4, 10, 120, 10});
CollectionProperty prop = JMeterPluginsUtils.tableModelRowsToCollectionProperty(dataModel, UltimateThreadGroup.DATA_PROPERTY);
ultimateThreadGroup.setData(prop);
ultimateThreadGroup.setEnabled(setEnabled);
ultimateThreadGroup.setProperty(TestElement.TEST_CLASS, UltimateThreadGroup.class.getName());
ultimateThreadGroup.setProperty(TestElement.GUI_CLASS, UltimateThreadGroupGui.class.getName());
  1. 首先您需要创建一个 Loop Controller 实例,例如:

    LoopController loopController = new LoopController();
    loopController.setLoops(1);
    loopController.setFirst(true);
    loopController.setProperty(TestElement.TEST_CLASS, LoopController.class.getName());
    loopController.setProperty(TestElement.GUI_CLASS, LoopControlPanel.class.getName());
    loopController.initialize();
    
  2. 其次您需要 add the Loop Controller from the step 1 到您的终极线程组:

    ultimateThreadGroup.setSamplerController(loopController);
    

更多信息:

接下来只需将您以编程方式生成的 .jmx 与由 JMeter GUI 创建的 .jmx 进行比较,您将能够看到缺少哪些字段、属性等