从JSR223采样器,我可以使用采样器
变量访问当前测试元素。
从那里,我如何导航< code>TestElement对象的树?例如,我如何访问父测试元素(然后它是父的,等等)或者我如何访问< code>TestPlan测试元素?
背景:
我想使用Groovy从JSR223采样器中动态创建一个JDBC连接配置元素。
从其他问题(例如,这里)和网络搜索(例如,这里),我知道如何自上而下地创建测试计划元素(例如,如何创建测试计划并从那里构建树)。因此,我知道如何执行新的数据源元素(),
这是一个测试元素,
但我不知道如何将该新元素添加到测试计划中。在采样器脚本中,我可以访问采样器
(采样器)和ctx
(JMeterContext)变量,但我不知道如何导航测试元素树。
我尝试只使用< code > sampler . addtestelement ,但是配置元素在sampler元素下实际上是无效的。尽管如此,我还是做了尝试,但当我试图在JDBC请求中使用config元素时,找不到它(错误:“未找到名为:' myDatabaseThreadPool '的池,请确保变量名与JDBC连接配置的变量名匹配”)。
我希望如果我能得到TestPlan
元素并添加配置元素,那么它就会起作用。
FWIW,我的测试计划是这样的:
我可以更详细地介绍为什么我要动态创建 JDBC 连接配置,但是如果有一个简单的答案,说明如何从我的采样器脚本中导航测试元素树,我无论如何都想知道。
正如您所提到的,您可以通过ctx
速记访问JMeterContext。因此,您可以通过ctx访问StandardJMeterEngine类实例。获取引擎()
方法。
查看StandardJMeterEngine源代码,您可以看到测试计划被存储为HashTree结构:
private HashTree test;
因此,选择如下:
将访问修饰符更改为公共,
并从源重新编译 JMeter
- 使用跟踪 - Java 反射 API 以访问
测试
值
参考代码:
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和JavaAPI的更多信息。
我在jmeter中面临一个问题,我想知道我能否解决这个问题。我需要在远程计算机上运行一个脚本。当我在电脑上通过命令行运行脚本时,它正在工作。 我想在我的计算机上用Jmeter运行它(与脚本运行相同)。我尝试了ssh采样器,但没有成功。我想使用操作系统采样器。可以吗?我可以在远程计算机上运行脚本吗?我找到的唯一解释来自blazemeter网站,并提到:“同样,由于通过操作系统进程采样器运行“plin
我想知道,如何在groovy脚本中对a做出反应。我正在使用While控制器迭代CSV中的所有行,并在实际测试计划之前生成JMeter变量。对于不同的CSV文件,我需要多次执行此操作,因此我不想在While控制器中停止线程。 我想象了这样的事情: CSV_VALUE1是JMeter变量的值,CSV_VALUE2是变量的名称。 测试计划 我也很欣赏更好的解决方案,它遍历CSV文件的每一行,并根据我的约
null 有什么主意吗?我该怎么做?我知道我不能只使用Once Controller,因为每个请求也是由每个线程执行的。
但是根据目前的需求,我们需要从mongodb中获取数据,将这些动态值传递给HTTP请求采样器,我的意思是我们需要根据数据库中的动态值构建HTTP请求采样器? 你能不能请谁帮我一下。
File jmeterHome=new File(system.getproperty(“jmeter.home”));String slash=System.GetProperty(“file.separator”);
我可以点击每个请求,按“发送”,一次运行一个。我将。json从loadium导出到。jmx 测试计划-->线程组-->[采样器1,采样器2,..]这些采样器是我的每个请求,我希望一次只运行一个,但是当我按下“run”按钮时,所有的采样器/请求都开始运行。