- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 JSR223 采样器中,我可以使用 sampler
变量访问当前测试元素。
从那里,我如何导航 TestElement
对象树?例如,如何访问父测试元素(然后是父元素等)或如何访问 TestPlan
测试元素?
背景:
我想使用 Groovy 从 JSR223 采样器动态创建 JDBC 连接配置元素。
从其他问题(例如,here)和网络搜索(例如,here),我知道如何自上而下创建测试计划元素(例如,如何创建测试计划并向下构建树从那里)。所以我知道如何执行 new DataSourceElement()
,它是一个 TestElement
,但我不知道如何将该新元素添加到测试计划中。在采样器脚本中,我可以访问 sampler
( Sampler ) 和 ctx
( JMeterContext ) 变量,但我不知道如何导航测试元素树。
我尝试只使用 sampler.addTestElement
但配置元素在采样器元素下并不是真正有效。不过,我确实尝试过,但是当我尝试在 JDBC 请求中使用它时,找不到配置元素(错误:“找不到名为:'myDatabaseThreadPool' 的池,确保变量名称与 JDBC 连接配置的变量名称匹配").
我希望如果我可以获得 TestPlan
元素并向其添加配置元素,那么它就可以工作。
FWIW,我的测试计划是这样的:
我可以进一步详细说明为什么要动态创建 JDBC 连接配置,但是如果有关于如何从我的采样器脚本中导航测试元素树的简单答案,我会喜欢无论如何都要知道这一点。
最佳答案
正如您所提到的,您可以访问 JMeterContext通过 ctx
简写。因此您可以访问 StandardJMeterEngine通过 ctx.getEngine();
方法获取类实例。
调查StandardJMeterEngine source你可以看到测试计划被存储为 HashTree 结构:
private HashTree test;
所以选择在:
public
并从源代码重新编译JMeter测试
值引用代码:
import org.apache.jmeter.engine.StandardJMeterEngine;
import org.apache.jmeter.testelement.TestPlan;
import org.apache.jorphan.collections.HashTree;
import org.apache.jorphan.collections.SearchByClass;
import java.lang.reflect.Field;
import java.util.Collection;
StandardJMeterEngine engine = ctx.getEngine();
Field test = engine.getClass().getDeclaredField("test");
test.setAccessible(true);
HashTree testPlanTree = (HashTree) test.get(engine);
SearchByClass testPlans = new SearchByClass(TestPlan.class);
testPlanTree.traverse(testPlans);
Collection testPlansRes = testPlans.getSearchResults();
TestPlan testPlan = (TestPlan)testPlansRes.toArray()[0];
//do what you need with "testPlanTree" and/or "testPlan"
查看 How to Use BeanShell: JMeter's Favorite Built-in Component有关使用 JMeter 和 Java API 从脚本测试元素获取更多信息的指南。
关于jmeter - 如何从采样器脚本中导航 JMeter 测试元素树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37860448/
我是一名优秀的程序员,十分优秀!