gpt4 book ai didi

jmeter - 如何从采样器脚本中导航 JMeter 测试元素树

转载 作者:行者123 更新时间:2023-12-04 17:58:53 24 4
gpt4 key购买 nike

在 JSR223 采样器中,我可以使用 sampler 变量访问当前测试元素。

从那里,我如何导航 TestElement 对象树?例如,如何访问父测试元素(然后是父元素等)或如何访问 TestPlan 测试元素?

背景:

我想使用 Groovy 从 JSR223 采样器动态创建 JDBC 连接配置元素。

从其他问题(例如,here)和网络搜索(例如,here),我知道如何自上而下创建测试计划元素(例如,如何创建测试计划并向下构建树从那里)。所以我知道如何执行 new DataSourceElement(),它是一个 TestElement,但我不知道如何将该新元素添加到测试计划中。在采样器脚本中,我可以访问 sampler ( Sampler ) 和 ctx ( JMeterContext ) 变量,但我不知道如何导航测试元素树。

我尝试只使用 sampler.addTestElement 但配置元素在采样器元素下并不是真正有效。不过,我确实尝试过,但是当我尝试在 JDBC 请求中使用它时,找不到配置元素(错误:“找不到名为:'myDatabaseThreadPool' 的池,确保变量名称与 JDBC 连接配置的变量名称匹配").

我希望如果我可以获得 TestPlan 元素并向其添加配置元素,那么它就可以工作。

FWIW,我的测试计划是这样的:

  • 测试计划
    • 线程组 1(可以是设置线程组)
      • JSR223 采样器(这是我要创建动态配置的地方)
    • 线程组 2(多线程)
      • JDBC 请求(使用动态配置中指定的池变量名)
    • 查看结果树

我可以进一步详细说明为什么要动态创建 JDBC 连接配置,但是如果有关于如何从我的采样器脚本中导航测试元素树的简单答案,我会喜欢无论如何都要知道这一点

最佳答案

正如您所提到的,您可以访问 JMeterContext通过 ctx 简写。因此您可以访问 StandardJMeterEngine通过 ctx.getEngine(); 方法获取类实例。

调查StandardJMeterEngine source你可以看到测试计划被存储为 HashTree 结构:

private HashTree test;

所以选择在:

引用代码:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com