【发布时间】:2019-10-18 05:08:46
【问题描述】:
我们有 JMeter 脚本,其中包含许多测试元素,例如测试片段,包括控制器、beanshell 采样器、ssh 采样器、JDBC 等。当我们尝试使用 Java 代码(如下)运行 JMX 脚本时,脚本的包含控制器部分被跳过。我们通过提及绝对路径和相对路径来使用包含控制器运行测试片段。请建议我们如何使用下面的 Java 代码在 JMX 文件中制作测试片段。
我们有一个 JMeter 脚本,比如 xyz.jmx,它是使用包含控制器从 ABC.jmx jemeter 脚本调用的。
public class Test_INV_TI_001_XML extends BaseClass {
StandardJMeterEngine jmeter = new StandardJMeterEngine();
Summariser summer = null;
JMeterResultCollector results;
@Test()
public void INV_TI_001_XML() throws Exception {
File JmxFile1 = new File("/Path/To/JMX/File/ABC.jmx");
HashTree testPlanTree = SaveService.loadTree(JmxFile1);
JMeterTreeModel treeModel = new JMeterTreeModel();
JMeterTreeNode root = (JMeterTreeNode) treeModel.getRoot();
treeModel.addSubTree(testPlanTree, root);
SearchByClass<ReplaceableController> replaceableControllers =
new SearchByClass<>(ReplaceableController.class);
testPlanTree.traverse(replaceableControllers);
Collection<ReplaceableController> replaceableControllersRes = replaceableControllers.getSearchResults();
for (ReplaceableController replaceableController : replaceableControllersRes) {
replaceableController.resolveReplacementSubTree(root);
}
HashTree clonedTree = JMeter.convertSubTree(testPlanTree,true);
jmeter.configure(clonedTree);
String summariserName = JMeterUtils.getPropDefault("summariser.name", "TestSummary");
if (summariserName.length() > 0) {
summer = new Summariser(summariserName);
}
results = new JMeterResultCollector(summer);
testPlanTree.add(testPlanTree.getArray()[0], results);
jmeter.runTest();
while (jmeter.isActive())
{
System.out.println("StandardJMeterEngine is Active...");
Thread.sleep(3000);
}
if (results.isFailure())
{
TestAutomationLogger.error("TEST FAILED");
Assert.fail("Response Code: " + JMeterResultCollector.getResponseCode() + "\n" + "Response Message: " + JMeterResultCollector.getResponseMessage() + "\n" + "Response Data: " + JMeterResultCollector.getResponseData());
}
}
}
当使用上述代码执行 ABC.jmx 脚本时,在 ABC.jmx 脚本中调用的 xyz.jmx 也应该被调用并成功执行。
【问题讨论】: