提问人:Matthias 提问时间:11/15/2023 更新时间:11/15/2023 访问量:21
JMeter 插件开发:以编程方式将标准 ThreadGroup 添加到 Testplan 中
JMeter Plugin development: add standard ThreadGroup to Testplan programmatically
问:
我正在尝试自己实现一个新的 JMeter 插件。到目前为止,我所做的是添加一个顶级菜单条目,并在单击它以启动我的插件工作流程时。
我想实现将 deafult ThreadGroup 添加到根 Testplan 中。我是这样尝试的:
public void addNewThreadGroupWithSamplers() {
GuiPackage guiPackage = GuiPackage.getInstance();
JMeterTreeNode testPlanNode = (JMeterTreeNode) guiPackage.getTreeModel().getRoot();
// Create a new Thread Group
ThreadGroup threadGroup = new ThreadGroup();
threadGroup.setName("New Thread Group");
// Add the new Thread Group to the Test Plan and get its node
JMeterTreeNode threadGroupNode;
try {
threadGroupNode = guiPackage.getTreeModel().addComponent(threadGroup, testPlanNode);
} catch (IllegalUserActionException e) {
e.printStackTrace();
}
// Refresh the JMeter GUI
guiPackage.getMainFrame().repaint();
}
不幸的是,我从 那里得到一个空指针异常,该异常指出JMeterTreeModel
Uncaught Exception java.lang.NullPointerException: Cannot invoke "org.apache.jmeter.gui.JMeterGUIComponent.clearGui()" because "guicomp" is null in thread Thread[AWT-EventQueue-0,6,main]. See log file for details.
异常发生在 JMeter 的这一行:
JMeterGUIComponent guicomp = guiPackage.getGui(component);
之addComponent()
UI的某些内容似乎未初始化,或者可能是什么原因。您能否通过示例将我精确定位到lcation或提供解决方案?
答:
1赞
Dmitri T
11/15/2023
#1
你缺少一些明显的必需元素,如Loop Controller,它是Thread Group的一个组成部分,以及通过TestElement提供的属性。
如果这确实是你要找的,你可以使用以下代码:
import org.apache.jmeter.threads.ThreadGroup;
import org.apache.jmeter.threads.gui.ThreadGroupGui;
import org.apache.jmeter.gui.GuiPackage
import org.apache.jmeter.gui.tree.JMeterTreeNode
import org.apache.jmeter.exceptions.IllegalUserActionException
import org.apache.jmeter.control.LoopController;
import org.apache.jmeter.control.gui.LoopControlPanel;
import org.apache.jmeter.testelement.TestElement;
GuiPackage guiPackage = GuiPackage.getInstance();
JMeterTreeNode testPlanNode = (JMeterTreeNode) guiPackage.getTreeModel().getRoot();
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();
ThreadGroup threadGroup = new ThreadGroup();
threadGroup.setName("Example Thread Group");
threadGroup.setNumThreads(1);
threadGroup.setRampUp(1);
threadGroup.setSamplerController(loopController);
threadGroup.setProperty(TestElement.TEST_CLASS, ThreadGroup.class.getName());
threadGroup.setProperty(TestElement.GUI_CLASS, ThreadGroupGui.class.getName());
JMeterTreeNode threadGroupNode;
try {
threadGroupNode = guiPackage.getTreeModel().addComponent(threadGroup, testPlanNode);
} catch (IllegalUserActionException e) {
e.printStackTrace();
}
// Refresh the JMeter GUI
guiPackage.getMainFrame().repaint();
演示:
更多信息:
但是,最好看一下以编程方式构建测试计划用户手册一章
评论
0赞
Matthias
11/15/2023
这非常有帮助。我完全不知道 LoopController。但是,使用 JSR223 Sampler 进行快速试验的技巧对我来说也非常好,感谢您再次提醒它。我知道采样器,但没有考虑使用它来创建新的节点元素。也感谢您提供进一步的阅读材料。这是一个很好的答案。
评论