JMeter以编程方式测试SOAP web服务

JMeter以编程方式测试SOAP web服务,jmeter,Jmeter,使用JMeterAPI,我尝试以编程方式调用SOAP web服务。 在执行服务之后,当我检查web服务服务器日志时,那里没有事务/条目。似乎SOAP请求根本没有发送到服务器。但是,当我尝试在没有JMeterAPI的情况下直接使用SOAPConnection调用方法调用web服务时,它工作正常,服务器可以生成日志 请任何人检查一下,并纠正我使用JMeterAPI发送SOAP请求的错误 My full source code is as follows: JMeterUtils.setJMeter

使用JMeterAPI,我尝试以编程方式调用SOAP web服务。 在执行服务之后,当我检查web服务服务器日志时,那里没有事务/条目。似乎SOAP请求根本没有发送到服务器。但是,当我尝试在没有JMeterAPI的情况下直接使用SOAPConnection调用方法调用web服务时,它工作正常,服务器可以生成日志

请任何人检查一下,并纠正我使用JMeterAPI发送SOAP请求的错误

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;