【发布时间】:2017-02-01 13:33:15
【问题描述】:
我需要按顺序执行 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);
}
假设结果集中有 5 条请求详情记录。请求开始时间差为 60 秒。现在,我执行后收到如下结果:
summary = 1 in 00:00:01 = 0.9/s Avg: 1002 Min: 1002 Max: 1002 Err: 0 (0.00%)
delay = 0
summary = 1 in 00:00:01 = 1.1/s Avg: 850 Min: 850 Max: 850 Err: 0 (0.00%)
delay = 60000
summary = 1 in 00:00:01 = 1.5/s Avg: 612 Min: 612 Max: 612 Err: 0 (0.00%)
delay = 60000
summary = 1 in 00:00:01 = 1.1/s Avg: 859 Min: 859 Max: 859 Err: 0 (0.00%)
delay = 60000
summary = 1 in 00:00:01 = 1.1/s Avg: 849 Min: 849 Max: 849 Err: 0 (0.00%)
【问题讨论】:
标签: jmeter