#jmeter #jmeter-plugins
#jmeter #jmeter-плагины
Вопрос:
Я пытаюсь использовать UltimateThreadGroup с Java API JMeter, я создаю объект UltimateThreadGroup, как в приведенном ниже коде [2], и добавляю его в хэш-дерево. Наконец, передайте его на выполнение движку JMeter.
Но это дает следующее исключение NullPointerException в середине выполнения. Когда я отлаживал код, проблема, похоже, исходит из следующего метода класса JMeterThread.
общедоступный JMeterThread(тест хэш-дерева, монитор JMeterThreadMonitor, примечание ListenerNotifier, логическое значение 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:
-
Сначала вам нужно создать экземпляр контроллера цикла, например:
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();
-
Во-вторых, вам нужно добавить контроллер цикла с шага 1 в вашу конечную группу потоков:
ultimateThreadGroup.setSamplerController(loopController);
Дополнительная информация:
- Пять способов запустить тест JMeter без использования графического интерфейса JMeter
- jmeter-from-code
В дальнейшем просто сравните файл .jmx, который вы генерируете программно, с тем, который создается графическим интерфейсом JMeter, Вы сможете увидеть, какие поля, свойства и т. Д. Отсутствуют
Комментарии:
1. Спасибо, Дмитрий, добавление контроллера цикла решило проблему с NullPointerException
2. Пришлось установить контроллер цикла как loopController.setLoops(-1), иначе он не будет учитывать определенные нами временные интервалы и выполнит только один цикл