JMeter 从 java 中的测试计划中获取特定节点

JMeter get specific node from testplan in java

在我的 JMeter 测试文件中,我有多个用户定义的变量节点,我想在特定情况下激活或停用它们。 因此,我需要将它们作为 Java 中的 JMeterTreeNode 对象获取。所以而不是 treeModel.getRoot();我想要 treeModel.getNodeByName() 这样的东西,这样我的代码就可以看起来像这样:

JMeterTreeModel treeModel = new JMeterTreeModel(new Object());
JMeterTreeNode variablesNode= (JMeterTreeNode) treeModel.getNodeByName("jmeterNodeNameOrId");
if (true)        
{        
  variablesNode.setEnabled(true);
}
  1. 您将无法在运行时“停用”“节点”

  2. 此外 User Defined Variables 在任何 JSR223 测试元素之前被处理,因此在您的代码开始执行之前很久就会“激活”它们。

    Note that all the UDV elements in a test plan - no matter where they are - are processed at the start.

“停用”节点的唯一方法是在测试开始前将其禁用,我能想到的最方便的方法是 Taurus 自动化框架,其中:

有 JMeter enhancements 可在运行时添加 disabled/enable 功能,您可以投票或贡献。

Bug 65702 - Add field disabled on all component

Bug 62495

Add option to disable View Results Tree/Listeners

所以,我找到了一个可行的解决方案。 Dmitris 的回答让我看了一下 jmx 作为 xml。 UserDefinedVariables 是一个“参数”节点。

所以首先我必须得到参数部分

SearchByClass searcher = new SearchByClass(Arguments.class);
testPlanTree.traverse(searcher); //testPlanTree is a param
Object[] o = searcher.getSearchResults().toArray();
return o[0] //just the first one

在另一种方法中,我可以像这样使用它

JMeterTreeModel treeModel = new JMeterTreeModel(new Object());
JMeterTreeNode root = (JMeterTreeNode) treeModel.getRoot();
treeModel.addSubTree(testPlanTree, root);
            
JMeterTreeNode argumentNode = treeModel.getNodeOf(getArgumentsMethodFromAbove(testPlanTree));
String vars = argumentNode.getTestElement().getName();

然后你可以做

if (vars.equals("foo"))
{
   argumentNode.setEnabled(false);
}