JMeter-如何执行Http请求列表并收集结果统计信息
我需要按顺序执行Http请求列表,并收集每个请求的结果/统计信息。映射将请求开始时间作为键,将请求对象作为值 我可以分三步完成:JMeter-如何执行Http请求列表并收集结果统计信息,jmeter,Jmeter,我需要按顺序执行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