如何使用 Java 代码在 Jmeter .jmx 文件中添加正则表达式提取器和 cookie 管理器?

How to add regex extractor and cookie managers in Jmeter .jmx file using Java code?

我正在使用 Java 代码为 Jmeter GUI 编写 .jmx 文件。我想从用于 "login" 的 HTTP 代理采样器中提取 GET 响应,该响应用作识别用户的会话 ID。此外,我需要下一个采样器来使用正在提取的变量。另外,我还需要每个线程组一个cookie管理器。

我应该调用哪个 API 将提取器添加到 http 代理采样器并将 cookie 管理器添加到线程组?

我已经创建了http采样器,设置了路径和参数。我现在只需要一个提取器来帮助我获取变量和一个 cookie 管理器

下面是我创建线程组并将http采样器添加到线程组的代码

HashTree testPlanTree = new ListedHashTree();
        TestPlan testPlan = new TestPlan("Create JMeter Script From Java Code");
        testPlanTree.add(testPlan);
        HTTPSamplerProxy newSampler = null;
        LoopController loopController;
        ThreadGroup threadGroup = null;
        HashTree threadGroupHashTree = null;
        int i = 1; // exclude the first empty call
        for (ArrayList<String> elementList : calls) {
            if (elementList.size() == 3) {
                System.out.println(elementList);
                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(elementList.get(1) + "_" + elementList.get(2));
                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 {
                newSampler = new HTTPSamplerProxy();
                LinkedHashMap<String, ArrayList<String>> arguments = httpSamplerList.get(i);
                if (elementList.get(0).equals("Login")) {
                    newSampler.setMethod(arguments.get("HTTPSampler.method").get(0));
                    newSampler.add
                }

                else if  (elementList.get(0).equals("Logout"))
                    newSampler.setMethod(arguments.get("HTTPSampler.method").get(0));
                else
                    newSampler.setMethod(elementList.get(0));

                System.out.println(httpSamplerList.get(i));

                newSampler.setPort(8080);
                newSampler.setPath(arguments.get("HTTPSampler.path").get(0));
                newSampler.setName(elementList.get(0)); // currently use a integer number naming as test
                newSampler.setProperty(TestElement.TEST_CLASS, HTTPSamplerProxy.class.getName());
                newSampler.setProperty(TestElement.GUI_CLASS, HttpTestSampleGui.class.getName());

                // Set up arguments
                if (arguments.get("arguments").size() > 0) {
                    if (arguments.get("HTTPSampler.method").get(0).equals("GET")) {
                        for (int j = 0; j < arguments.get("arguments").size(); j=j+2) {
                            newSampler.addArgument(arguments.get("arguments").get(j), arguments.get("arguments").get(j+1));
                        }
                    }
                    else if (arguments.get("HTTPSampler.method").get(0).equals("POST")||arguments.get("HTTPSampler.method").get(0).equals("PUT")) {
                        newSampler.addNonEncodedArgument("",arguments.get("arguments").get(0) , "");
                        newSampler.setPostBodyRaw(true);
                    }
                }
                threadGroupHashTree.add(newSampler);
                i++;
            }
        }
  1. HTTP Cookie Manager:

    CookieManager cookieManager = new CookieManager();
    cookieManager.setName("HTTP Cookie Manager");
    cookieManager.setProperty(TestElement.TEST_CLASS, CookieManager.class.getName());
    cookieManager.setProperty(TestElement.GUI_CLASS, CookiePanel.class.getName());
    
  2. Regular Expression Extractor

    RegexExtractor regexExtractor = new RegexExtractor();
    regexExtractor.setName("Regular Expression Extractor");
    regexExtractor.setProperty("RegexExtractor.useHeaders", "false");
    regexExtractor.setProperty("RegexExtractor.refname", "yourVariable");
    regexExtractor.setProperty("RegexExtractor.regex", "yourRegex");
    regexExtractor.setProperty("RegexExtractor.template", "yourTemplate");
    regexExtractor.setProperty("RegexExtractor.match_number", "yourMatchNumber");
    regexExtractor.setProperty("RegexExtractor.default", "yourDefaultValue");
    regexExtractor.setProperty(TestElement.TEST_CLASS, RegexExtractor.class.getName());
    regexExtractor.setProperty(TestElement.GUI_CLASS, RegexExtractorGui.class.getName());
    

查看 Five Ways To Launch a JMeter Test without Using the JMeter GUI 以了解有关 运行 JMeter 测试的不同选项的更多信息,包括以编程方式创建测试计划。