JMeter以编程方式测试SOAP web服务
使用JMeterAPI,我尝试以编程方式调用SOAP web服务。 在执行服务之后,当我检查web服务服务器日志时,那里没有事务/条目。似乎SOAP请求根本没有发送到服务器。但是,当我尝试在没有JMeterAPI的情况下直接使用SOAPConnection调用方法调用web服务时,它工作正常,服务器可以生成日志 请任何人检查一下,并纠正我使用JMeterAPI发送SOAP请求的错误JMeter以编程方式测试SOAP web服务,jmeter,Jmeter,使用JMeterAPI,我尝试以编程方式调用SOAP web服务。 在执行服务之后,当我检查web服务服务器日志时,那里没有事务/条目。似乎SOAP请求根本没有发送到服务器。但是,当我尝试在没有JMeterAPI的情况下直接使用SOAPConnection调用方法调用web服务时,它工作正常,服务器可以生成日志 请任何人检查一下,并纠正我使用JMeterAPI发送SOAP请求的错误 My full source code is as follows: JMeterUtils.setJMeter
My full source code is as follows:
JMeterUtils.setJMeterHome("JmeterHome");
JMeterUtils.loadJMeterProperties("JmeterHome\\bin\\jmeter.properties");
JMeterUtils.initLogging();
JMeterUtils.initLocale();
HashTree testPlanTree=new HashTree();
HTTPSampler httpSampler=new HTTPSampler();
httpSampler.setDomain("domain");
httpSampler.setPort(<port number>);
httpSampler.setProtocol("http");
httpSampler.setPath("/wsdl");
httpSampler.setMethod("GET");
httpSampler.setName("Webservice Sampler");
httpSampler.setPostBodyRaw(true);
HeaderManager headerManager=new HeaderManager();
headerManager.add(new Header("SM_USER", "xyz@abc.com"));
headerManager.add(new Header("Content-Type","text/xml; charset=utf-8"));
headerManager.add(new Header("SOAPAction","http://example.com:<port number>/services/MyWebService?wsdl"));
httpSampler.setHeaderManager(headerManager);
HTTPArgument httpArgument=new HTTPArgument();
httpArgument.setValue(<SOAP Message>);
httpSampler.addTestElement(httpArgument);
LoopController loopController=new LoopController();
loopController.setLoops(1);
loopController.addTestElement(httpSampler);
loopController.setFirst(true);
loopController.initialize();
ThreadGroup threadGroup=new ThreadGroup();
threadGroup.setNumThreads(5);
threadGroup.setRampUp(1);
threadGroup.setSamplerController(loopController);
TestPlan testPlan=new TestPlan("Web Service Operations Test Plan");
testPlanTree.add("testPlan", testPlan);
testPlanTree.add("threadGroup",threadGroup);
testPlanTree.add("httpSampler",httpSampler);
testPlanTree.add("loopController",loopController);
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);
jmeter.run();
System.exit(0);
I am getting the following output in the Jmeter log file:
2017/01/10 19:50:14 INFO - jmeter.threads.JMeterThread: Thread finished: 1-1
2017/01/10 19:50:14 INFO - jmeter.threads.JMeterThread: Thread is done: 1-3
2017/01/10 19:50:14 INFO - jmeter.threads.JMeterThread: Thread finished: 1-3
2017/01/10 19:50:14 INFO - jmeter.threads.JMeterThread: Thread is done: 1-4
2017/01/10 19:50:14 INFO - jmeter.threads.JMeterThread: Thread finished: 1-4
2017/01/10 19:50:14 INFO - jmeter.threads.JMeterThread: Thread is done: 1-5
2017/01/10 19:50:14 INFO - jmeter.threads.JMeterThread: Thread finished: 1-5
2017/01/10 19:50:14 INFO - jmeter.engine.StandardJMeterEngine: Notifying test listeners of end of test
2017/01/10 19:50:14 INFO - jmeter.reporters.Summariser: summary = 5 in 00:00:02 = 3.1/s Avg: 877 Min: 780 Max: 1088 Err: 0 (0.00%)
The following results captured on result file:
2017-01-10 19:50:13.070,894, Webservice Sampler,200,OK, 1-2,text,true,,35016,0,5,5,887,0,0
2017-01-10 19:50:13.070,1088, Webservice Sampler,200,OK, 1-1,text,true,,35016,0,5,5,1082,0,0
2017-01-10 19:50:13.466,813, Webservice Sampler,200,OK, 1-3,text,true,,35016,0,3,3,806,0,0
2017-01-10 19:50:13.666,780, Webservice Sampler,200,OK, 1-4,text,true,,35016,0,2,2,776,0,0
2017-01-10 19:50:13.866,811, Webservice Sampler,200,OK, 1-5,text,true,,35016,0,1,1,802,0,0
如果您不推荐创建JMeter测试的方法,请查看以了解如何使用JMeter GUI进行测试 如果出于某种原因,您需要以编程方式创建SOAP请求,则可以通过调用将现有.jmx脚本作为参数传递的方法来获得已知良好的测试计划hashtree结构,这样您就可以在调试器中使用JMeter API重新创建一个参考测试计划 您可以找到将头管理器添加到HTTP请求的示例
在任何情况下,我强烈建议您通过侦听器或类似的嗅探工具仔细检查脚本是否正在执行它应该执行的操作。我遵循了您的建议,现在我能够以编程方式访问web服务。我认为请求头没有正确地附加到请求。我收到以下日志异常:logException=java.lang.RuntimeException:未经授权的访问:在输入请求中找不到用户ID。我已按如下方式添加请求头:HTTPSamplerProxy httpSampler=new HTTPSamplerProxy;HeaderManager HeaderManager=新的HeaderManager;headerSmUser=新的HeaderSM\u用户,xyz@example.com; Header-headerContentType=新的HeaderContent类型,text/xml;字符集=utf-8;收割台收割台收割台收割台=新收割台收割台收割台,;headerManager.addheaderSmUser;headerManager.addheaderContentType;headerManager.AddHeaderSoaPacation;httpSampler.setHeaderManager;