gpt4 book ai didi

jmeter - 尝试使用 JMeter API : Mismatch between jmeter jmx file created from code and the one created by JMeter 生成 JMeter 测试计划 (jmx)

转载 作者:行者123 更新时间:2023-12-03 17:44:12 30 4
gpt4 key购买 nike

我正在尝试使用 jmeter java api 创建一个 jmeter jmx 文件。这就是我所做的,

  • gui.jmx

  • 使用 jmeter gui 应用程序创建一个引用 jmx 文件,我可以与之进行比较。在测试计划中,我只在线程组内添加了一个线程组和一个java采样器。所有值都是默认值。
  • 代码.jmx

  • 使用 jmeter java api,我创建了一个 jmx 文件,其中包含一个测试计划、线程组和 java 采样器。所有值均按照情况 1 设置。

    从代码创建 jmx 文件后,我注意到以下差异,

    1) gui.jmx中的nodes替换为code.jmx中的如下
        <org.apache.jorphan.collections.HashTree>

    虽然这不是问题,但是否可以在 GUI 保存时以某种方式生成以下标记
        <hashTree>

    2) 测试元素节点在 gui.jmx 中包含属性“guiClass”和“testClass”,例如
    这些属性不是在 code.jmx 中生成的,我也没有找到任何 API 来显式设置它们 -> 因此,生成的 code.jmx 不会在 jmeter gui 控制台中打开。这可能意味着生成的 jmx 只能在非控制台模式下使用。这是故意的吗?有什么方法可以使用jmeter api通过代码添加这些属性吗? (不使用 DOM 作为 hack)

    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 api 添加测试元素以便哈希树元素像第一种情况一样相互嵌套的正确方法是什么?

    最佳答案

    最后在查看 jmeter 源代码后,我认为除了我正在做的事情之外,我还需要明确设置 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"));
    }
    }

    关于jmeter - 尝试使用 JMeter API : Mismatch between jmeter jmx file created from code and the one created by JMeter 生成 JMeter 测试计划 (jmx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25511949/

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