我正在尝试使用创建jmeter文件。这就是我所做的
使用jmeter应用程序创建一个引用jmx文件,我可以与其进行比较。在测试计划中,我只在线程组中添加一个线程组和一个java采样器。所有值都是默认值。
使用jmeter,我创建了一个包含测试计划、线程组和java采样器的jmx文件。所有的值都是按照情况1设置的。
在根据代码创建jmx文件之后,我注意到以下不同之处,
1) gui.jmx中的节点在code.jmx中被替换为
<org.apache.jorphan.collections.HashTree>虽然这不是一个问题,但是否有可能在GUI保存时生成以下标记
<hashTree>2) testClass节点包含在guiClass中的属性'testClass‘和’testClass‘,例如,这些属性不是在code.jmx中生成的,我也没有找到任何API显式地设置它们为->,因此生成的code.jmx不能在jmeter控制台中打开。这可能意味着生成的jmx可以仅在控制台模式下使用。这是故意的吗?是否有某种方式可以通过使用jmeter的代码添加这些属性?(不使用DOM作为黑客)
3) gui.jmx的xml结构如下:
<hashTree>
<TestPlan ...>
...
</TestPlan>
<hashTree>
<ThreadGroup ...>
...
</ThreadGroup>
**<hashTree/>**
</hashTree>
</hashTree>注意HashTree元素的嵌套。当这在JMeter GUI中打开时,元素相互嵌套。
code.jmx的xml结构如下,
<org.apache.jorphan.collections.HashTree>
<TestPlan ...>
...
</TestPlan>
**<org.apache.jorphan.collections.HashTree/>**
<ThreadGroup ...>
...
</ThreadGroup>
**<org.apache.jorphan.collections.HashTree/>**
</org.apache.jorphan.collections.HashTree>注意标签位置的不同。没有筑巢。它们都在同一个层次上。为什么会发生这种事。使用jmx添加测试元素的正确方法是什么,以便像第一种情况一样,哈希树元素相互嵌套?
发布于 2014-08-30 18:22:55
最后,在查看the源代码之后,我发现除了我正在做的事情之外,我还需要显式地设置guiClass和testClass参数。
testPlan.setProperty(TestElement.TEST_CLASS,TestPlan.class.getName());testPlan.setProperty(TestElement.GUI_CLASS,TestPlanGui.class.getName());
类似于其他测试元素,如ThreadGroup、JavaSampler等。
完整的代码如下,
package com.test;
import java.io.FileOutputStream;
import org.apache.jmeter.control.LoopController;
import org.apache.jmeter.control.gui.LoopControlPanel;
import org.apache.jmeter.control.gui.TestPlanGui;
import org.apache.jmeter.protocol.java.control.gui.JavaTestSamplerGui;
import org.apache.jmeter.protocol.java.sampler.JavaSampler;
import org.apache.jmeter.save.SaveService;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.testelement.TestPlan;
import org.apache.jmeter.threads.ThreadGroup;
import org.apache.jmeter.threads.gui.ThreadGroupGui;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.collections.HashTree;
public class JMXCreator {
public static void main(String[] argv) throws Exception {
// Initialize the configuration variables
String jmeterHome = "D:\\apache-jmeter-2.11";
JMeterUtils.setJMeterHome(jmeterHome);
JMeterUtils.loadJMeterProperties(JMeterUtils.getJMeterBinDir()
+ "\\jmeter.properties");
JMeterUtils.initLogging();
JMeterUtils.initLocale();
// TestPlan
TestPlan testPlan = new TestPlan();
testPlan.setName("Test Plan");
testPlan.setEnabled(true);
testPlan.setProperty(TestElement.TEST_CLASS, TestPlan.class.getName());
testPlan.setProperty(TestElement.GUI_CLASS, TestPlanGui.class.getName());
// ThreadGroup controller
LoopController loopController = new LoopController();
loopController.setEnabled(true);
loopController.setLoops(5);
loopController.setProperty(TestElement.TEST_CLASS,
LoopController.class.getName());
loopController.setProperty(TestElement.GUI_CLASS,
LoopControlPanel.class.getName());
// ThreadGroup
ThreadGroup threadGroup = new ThreadGroup();
threadGroup.setName("Thread Group");
threadGroup.setEnabled(true);
threadGroup.setSamplerController(loopController);
threadGroup.setNumThreads(5);
threadGroup.setRampUp(10);
threadGroup.setProperty(TestElement.TEST_CLASS,
ThreadGroup.class.getName());
threadGroup.setProperty(TestElement.GUI_CLASS,
ThreadGroupGui.class.getName());
// JavaSampler
JavaSampler javaSampler = new JavaSampler();
javaSampler.setClassname("my.example.sampler");
javaSampler.setEnabled(true);
javaSampler.setProperty(TestElement.TEST_CLASS,
JavaSampler.class.getName());
javaSampler.setProperty(TestElement.GUI_CLASS,
JavaTestSamplerGui.class.getName());
// Create TestPlan hash tree
HashTree testPlanHashTree = new HashTree();
testPlanHashTree.add(testPlan);
// Add ThreadGroup to TestPlan hash tree
HashTree threadGroupHashTree = new HashTree();
threadGroupHashTree = testPlanHashTree.add(testPlan, threadGroup);
// Add Java Sampler to ThreadGroup hash tree
HashTree javaSamplerHashTree = new HashTree();
javaSamplerHashTree = threadGroupHashTree.add(javaSampler);
// Save to jmx file
SaveService.saveTree(testPlanHashTree, new FileOutputStream(
"d:\\test.jmx"));
}
}发布于 2017-03-15 16:24:52
只是评论一下
<org.apache.jorphan.collections.HashTree>如果在saveservice.properties文件中设置:
hashTree=org.apache.jorphan.collections.HashTree
而不是:
hashTree=org.apache.jorphan.collections.ListedHashTree
你会得到
<hashTree>发布于 2014-08-27 16:53:32
从Java创建JMeter测试并不是真正支持的方法,您可以将您的测试计划公开给JMeter中的更改。
我不会这么做的。
我认为您这样做是为了根据一些选定的变量动态创建测试脚本,这不是正确的方法。
我JMeter去做你想用的东西:
还可以看看Jenkins和Maven的例子:
https://stackoverflow.com/questions/25511949
复制相似问题