java - 基于jmeter api从java构建复杂的jmx文件

标签 java jmeter

我正在从 Java 构建 jmeter GUI 的 .jmx 文件。 .jmx 仅由 http 代理采样器和线程组组成。线程组和代理采样器都是基于列表构建的,因此它们按照一定的顺序排列。但是,我的问题是,与列表进行比较时,构造的 .jmx 的顺序完全错误。

我已阅读并尝试“不使用 JMeter GUI 启动 JMeter 测试的五种方法”。我所做的就是尝试将“纯粹用 Java 创建新的 JMeter 测试”推广到多个线程组和 http 代理采样器。这是我编写的最少代码:

public static void createJmx(ArrayList<ArrayList<String>> calls, ArrayList<HashMap<String, String>> httpSamplerList) throws Exception {
        // get log file length
        int numberOfCalls = calls.size();
        int numberOfhttpSampler = httpSamplerList.size();

        // Engine
        StandardJMeterEngine jm = new StandardJMeterEngine();
        String jmeterHome = "D:\\Jenkins-Global-Workspace\\apache-jmeter-5.1.1";
        // jmeter.properties
        JMeterUtils.setJMeterHome(jmeterHome);
        JMeterUtils.loadJMeterProperties("D:\\Jenkins-Global-Workspace\\apache-jmeter-5.1.1\\bin\\jmeter.properties");

        JMeterUtils.initLogging();
        JMeterUtils.initLocale();

        // Create HashTree structure

        HashTree testPlanTree = new HashTree();
        TestPlan testPlan = new TestPlan("Create JMeter Script From Java Code");
        testPlanTree.add(testPlan);
        HTTPSamplerProxy examplecomSampler = null;
        LoopController loopController;
        ThreadGroup threadGroup = null;
        HashTree threadGroupHashTree = null;
        int j=0;
        for (int i = 0; i < numberOfCalls; i++) {
            if (calls.get(i).size() == 3) {
                System.out.println(calls.get(i));
                loopController = new LoopController();
                loopController.setLoops(1);
                loopController.setFirst(true);
                loopController.setProperty(TestElement.TEST_CLASS, LoopController.class.getName());
                loopController.setProperty(TestElement.GUI_CLASS, LoopControlPanel.class.getName());
                loopController.initialize();

                threadGroup = new ThreadGroup();
                threadGroup.setName(calls.get(i).get(1));
                threadGroup.setNumThreads(1);
                threadGroup.setRampUp(1);
                threadGroup.setSamplerController(loopController);
                threadGroup.setProperty(TestElement.TEST_CLASS, ThreadGroup.class.getName());
                threadGroup.setProperty(TestElement.GUI_CLASS, ThreadGroupGui.class.getName());
                testPlan.setProperty(TestElement.TEST_CLASS, TestPlan.class.getName());
                testPlan.setProperty(TestElement.GUI_CLASS, TestPlanGui.class.getName());
                testPlan.setUserDefinedVariables((Arguments) new ArgumentsPanel().createTestElement());

                threadGroupHashTree = testPlanTree.add(testPlan, threadGroup);
            }
            else {
                System.out.println(calls.get(i));
                examplecomSampler = new HTTPSamplerProxy();
                examplecomSampler.setDomain("example.com");
                examplecomSampler.setPort(80);
                examplecomSampler.setPath("/");
                examplecomSampler.setMethod("GET");
                examplecomSampler.setName(Integer.toString(j)); // currently use a integer number naming as test
                examplecomSampler.setProperty(TestElement.TEST_CLASS, HTTPSamplerProxy.class.getName());
                examplecomSampler.setProperty(TestElement.GUI_CLASS, HttpTestSampleGui.class.getName());
                threadGroupHashTree.add(examplecomSampler);
                j++;
            }
        }
//    // save generated test plan to JMeter's .jmx file format
    SaveService.saveTree(testPlanTree, new FileOutputStream(".\\test.jmx"));
//        
    }

我使用变量 j 来跟踪 http 采样器的顺序,但某些 http 采样器以错误的顺序完成。

有人知道原因以及如何解决吗?

干杯

最佳答案

对于那些偶然发现这篇文章的人。如果哈希树中有多个模块,并且您希望它们的顺序与添加到树中的顺序相同。请使用

org.apache.jorphan.collections.ListedHashTree;

而不是

org.apache.jorphan.collections.HashTree;

关于java - 基于jmeter api从java构建复杂的jmx文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56649473/

相关文章:

java - 将 Guice 依赖注入(inject)添加到 web.xml 中配置的 Servlet

Java 源文件夹 Eclipse

performance - 是否可以使用表达式在 JMeter 中创建用户定义变量?

performance - 回放录制的脚本

java - 配置 Apache JMeter HTTP(S) 测试脚本记录器时遇到错误

java - 从浏览器启动应用程序

java - 如何为 Scala 中的列表赋予默认值?

jmeter - 如何在jmeter中对csv数据集配置的文件名文本进行参数化

java - 多线程声明期间静态变量初始化

java - 响应消息 : java. sql.SQLException: Fail to convert to internal representation: jmeter