JMeter-如何执行Http请求列表并收集结果统计信息

JMeter-如何执行Http请求列表并收集结果统计信息,jmeter,Jmeter,我需要按顺序执行Http请求列表,并收集每个请求的结果/统计信息。映射将请求开始时间作为键,将请求对象作为值 我可以分三步完成: 使用Oracle表中提供的请求基础详细信息构建结果集 迭代结果集 2a)获取每条记录,创建包含详细信息的请求对象,并构建一个映射,其中请求开始时间为键,请求对象为值 2b)使用请求对象数据形成SOAP请求XML消息,并将其作为值添加到HttpArguement 2c)创建JMeter测试计划,配置JMeter,执行计划并收集结果 2d)根据请求之间的请求开始时间计算延

我需要按顺序执行Http请求列表,并收集每个请求的结果/统计信息。映射将请求开始时间作为键,将请求对象作为值

我可以分三步完成:

  • 使用Oracle表中提供的请求基础详细信息构建结果集
  • 迭代结果集

    2a)获取每条记录,创建包含详细信息的请求对象,并构建一个映射,其中请求开始时间为键,请求对象为值

    2b)使用请求对象数据形成SOAP请求XML消息,并将其作为值添加到HttpArguement

    2c)创建JMeter测试计划,配置JMeter,执行计划并收集结果

    2d)根据请求之间的请求开始时间计算延迟时间,并将正在运行的线程设置为睡眠状态

  • 最后,在执行所有记录后,服务被终止

  • 现在,我可以成功地执行测试了。但是,我不确定这是正确的方法。请检查一下,如果我错了请告诉我

    另外,现在我得到了编码的个人请求的结果摘要。但是,我喜欢在执行所有请求之后获得累积统计数据。如何做到这一点?请引导我

    完整代码如下:

    // Build the result set [baseReqRecords] of request details from the database
    
    while (baseReqRecords.next()) {
        // Get the request details
        // Get the start time
    
        long delay = 0;
    
        if (previousRequestStartTime != null) {
            delay = ((requestStartTime.getTime() - previousRequestStartTime
                    .getTime()));
        }
    
        HTTPSamplerProxy httpSampler = new HTTPSamplerProxy();
        httpSampler.setName("SOAP Request");
        httpSampler.setEnabled(true);
        httpSampler.setPostBodyRaw(true);
    
        HTTPArgument httpArgument = new HTTPArgument();
        httpArgument.setAlwaysEncoded(false);
        httpArgument.setMetaData("=");
    
        if (operationsMap.get(reqOperation).equals(
                <<DESIRED_OPERATION>>)) {
            // build the request context object from the request details
            httpArgument.setValue(<<SOAP MESSAGE>>);
        }
    
        Arguments arguments = new Arguments();
        arguments.addArgument(httpArgument);
    
        System.out.println("HTTP Argument value: "
                + httpArgument.getValue());
    
        HeaderManager headerManager = new HeaderManager();
        headerManager.add(new Header("<<SM_USER>>",
                "<<value>>"));
        headerManager.add(new Header("Content-Type",
                "text/xml; charset=utf-8"));
        headerManager
                .add(new Header(
                        "SOAPAction",
                        "<<ACTION_URL>>"));
        headerManager.setName(JMeterUtils
                .getResString("header_manager_title"));
        headerManager.setProperty(TestElement.GUI_CLASS,
                HeaderPanel.class.getName());
        headerManager.setProperty(TestElement.TEST_CLASS,
                HeaderManager.class.getName());
    
        System.out.println("Headers: " + headerManager.getHeaders());
    
        httpSampler.setArguments(arguments);
        httpSampler.setDomain("<<SERVER>>");
        httpSampler.setPort(<<PORT>>);
        httpSampler
                .setPath("<<PATH>>");
        httpSampler.setMethod("POST");
        httpSampler.setName("Sampler");
        httpSampler.setFollowRedirects(true);
        httpSampler.setAutoRedirects(false);
        httpSampler.setUseKeepAlive(true);
        httpSampler.setDoMultipartPost(false);
        httpSampler.setMonitor(false);
        httpSampler.setProperty(TestElement.GUI_CLASS,
                HttpTestSampleGui.class.getName());
        httpSampler.setProperty(TestElement.TEST_CLASS,
                HTTPSamplerProxy.class.getName());
    
        LoopController loopController = new LoopController();
        loopController.setEnabled(true);
        loopController.setFirst(true);
        loopController.setContinueForever(false);
        loopController.setLoops(1);
        loopController.setProperty(TestElement.GUI_CLASS,
                LoopControlPanel.class.getName());
        loopController.setProperty(TestElement.TEST_CLASS,
                LoopController.class.getName());
        loopController.initialize();
    
        ThreadGroup threadGroup = new ThreadGroup();
        threadGroup.setNumThreads(1);
        threadGroup.setRampUp(1);
        threadGroup.setScheduler(false);
        threadGroup.setSamplerController(loopController);
        threadGroup.setEnabled(true);
        threadGroup.setProperty(TestElement.GUI_CLASS,
                ThreadGroupGui.class.getName());
        threadGroup.setProperty(TestElement.TEST_CLASS,
                ThreadGroup.class.getName());
    
        TestPlan testPlan = new TestPlan(
                "Test Plan");
        testPlan.setComment("Service Operations Test Plan");
        testPlan.setFunctionalMode(false);
        testPlan.setSerialized(false);
        testPlan.setUserDefinedVariables((Arguments) new ArgumentsPanel()
                .createTestElement());
        testPlan.setProperty(TestElement.GUI_CLASS,
                TestPlanGui.class.getName());
        testPlan.setProperty(TestElement.TEST_CLASS,
                TestPlan.class.getName());
    
        HashTree testPlanTree = new HashTree();
    
        HashTree samplerTree = new HashTree();
        samplerTree.add(httpSampler, headerManager);
    
        testPlanTree.add(testPlan);
        HashTree threadGroupHashTree = testPlanTree.add(testPlan,
                threadGroup);
        threadGroupHashTree.add(samplerTree);
    
        SaveService.saveTree(testPlanTree, new FileOutputStream(
                "jmeter_api.jmx"));
    
        Summariser summary = null;
        String summariserName = JMeterUtils.getPropDefault(
                "summariser.name", "summary");
        if (summariserName.length() > 0) {
            summary = new Summariser(summariserName);
        }
    
        String reportFile = "report.jtl";
        ResultCollector logger = new ResultCollector(summary);
        logger.setFilename(reportFile);
        testPlanTree.add(testPlanTree.getArray()[0], logger);
    
        jmeter.configure(testPlanTree);
    
        previousRequestStartTime = requestStartTime;
        jmeter.run();
    
        System.out.println("delay = " + delay);
    
        Thread.sleep(delay);
    }
    

    统计信息被写入
    report.jtl
    文件,您可以选择打开它,即查看请求摘要。您还可以使用
    report.jtl
    文件构建一个

    jmeter -g report.jtl -o /path/to/report/folder
    
    我建议对您的请求使用不同的标签,因为它们都有
    SOAP请求
    名称,所以在最终报告中无法区分它们


    实际上,您甚至不需要JavaAPI,您可以使用它从Oracle获取请求数据并迭代结果集

    再次感谢Dmitri的回答。我不会定期向数据库发送任何查询。例如,在每个示例上更新/插入数据库。我真的需要在这里使用JDBC请求采样器吗?
    jmeter -g report.jtl -o /path/to/report/folder