Есть ли способ динамически установить пользовательскую переменную в файле jmx во время запуска теста с использованием Java?
Пока я могу напечатать имя, используя этот код:
try {
// JMeter Engine
StandardJMeterEngine jmeter = new StandardJMeterEngine();
// Initialize Properties, logging, locale, etc.
JMeterUtils.loadJMeterProperties("c:\\path\\jmeter.properties");
JMeterUtils.setJMeterHome("C:\\path\\apache-jmeter-5.0");
JMeterUtils.initLocale();
// Initialize JMeter SaveService
SaveService.loadProperties();
// Load existing .jmx Test Plan
Path path = Paths.get("C:\\path\\whatever.jmx");
HashTree testPlanTree = SaveService.loadTree(path.toFile());
// Run JMeter Test
jmeter.configure(testPlanTree);
JMeterTreeModel treeModel = new JMeterTreeModel();
JMeterTreeNode root = (JMeterTreeNode) treeModel.getRoot();
treeModel.addSubTree(testPlanTree, root);
SearchByClass<TestPlan> testPlan = new SearchByClass<>(TestPlan.class);
testPlanTree.traverse(testPlan);
Collection<TestPlan> testPlans = testPlan.getSearchResults();
for (TestPlan testPlan1 : testPlans) {
System.out.println(testPlan1.getName());
JMeterProperty udvProperty = testPlan1.getUserDefinedVariablesAsProperty();
Arguments arg = (Arguments) udvProperty.getObjectValue();
CollectionProperty arguments = arg.getArguments();
arguments.forEach(c -> {
System.out.println(c);
});
}
// jmeter.run();
}
catch (IOException | IllegalUserActionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Я почти у цели!Но просто нужно несколько предложений о том, является ли это правильное направление?Или есть другой лучший подход?
Обновление: Я могу установить переменную, изменив код выше:
try {
// JMeter Engine
StandardJMeterEngine jmeter = new StandardJMeterEngine();
// Initialize Properties, logging, locale, etc.
JMeterUtils.loadJMeterProperties("c:\\path\\jmeter.properties");
JMeterUtils.setJMeterHome("C:\\path\\apache-jmeter-5.0");
JMeterUtils.initLocale();
// Initialize JMeter SaveService
SaveService.loadProperties();
// Load existing .jmx Test Plan
Path path = Paths.get("C:\\path\\whatever.jmx");
HashTree testPlanTree = SaveService.loadTree(path.toFile());
// Run JMeter Test
jmeter.configure(testPlanTree);
JMeterTreeModel treeModel = new JMeterTreeModel();
JMeterTreeNode root = (JMeterTreeNode) treeModel.getRoot();
treeModel.addSubTree(testPlanTree, root);
SearchByClass<TestPlan> testPlan = new SearchByClass<>(TestPlan.class);
testPlanTree.traverse(testPlan);
Collection<TestPlan> testPlans = testPlan.getSearchResults();
for (TestPlan testPlan1 : testPlans) {
System.out.println(testPlan1.getName());
JMeterProperty udvProperty = testPlan1.getUserDefinedVariablesAsProperty();
Arguments arg = (Arguments) udvProperty.getObjectValue();
CollectionProperty arguments = arg.getArguments();
arguments.forEach(c -> {
Argument j = (Argument) c.getObjectValue();
System.out.println("-----j--- " + j.getName());
j.setValue("whatever value");
System.out.println(j);
});
}
// jmeter.run();
}
catch (IOException | IllegalUserActionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}