Jmeter 测试WebService
继上一记录JMeter的简单使用, 这里,记录JMeter 如何测试WebService ,虽然WebService的速度比其它的RPC 要慢很多,但实际的系统使用它还是很多的 。
如何使用JMeter 见上一记录,或googel .
参考官网:http://jmeter.apache.org/usermanual/build-ws-test-plan.html
1. 在线程组下新建一个 WebService(SOAP)Request.
2. 只需要在WSDL这一项,写上你的WSDL的位置即可。
点一下 载入WSDL 和 配置 ,下面几项都可以自动生成。
3. 最关键的也就是下面的 SOAP/XML -RPC Data . 这一项参数很多人不知道怎么填。
这里有一些是跟SOAP相关的,如果你自已写一个WS的客户端调用的话,中间有很多都是WS中的jar包帮你生成的,
我这里是取自前人写的一段, 有种方法可以得到,你先用WS的客户端包,写一个WS的调用程序,去调用你系统中的WS服务,写一个过滤器如Filter, 每次请求,都会进入这个里面,你在这个里面把请求过来的URL都打印出来,看看,都会有请求的封装的SOAP相关的协议了,你就COPY 上去,就可以了。
3.1 在此给出两个:
1. 我的WS服务中只有一个参数,都是XML格式的,如果你也是,可以用以下试试:
<?xml version="1.0" encoding="gb2312" standalone="yes"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> </soap:Header> <soapenv:Body> <ser:call xmlns:ser="http://service.rc.infores.gpdi.com"> <ser:in0> <ser:bak1/> <ser:bak2/> <ser:funcCode/> <ser:reqCode/> <ser:sourceCode/> <ser:sync/> <ser:sysCode/> <ser:sysPwd/> <ser:targetCode/> <ser:version/> </ser:in0> <ser:in1><![CDATA[ 你自已的XML格式的请求数据 ]]></ser:in1> </ser:call> </soapenv:Body> </soapenv:Envelope>
2. 说明,如果你方法中的方法名不是叫 call 的话,你就把它改一下,如果你的方法中只有一个参数,或两个,也把下面的 <ser:in0>中间的去掉,加上你的参数。如果是发的XML,就可以用上面的参数。
如:
<?xml version="1.0" encoding="gb2312" standalone="yes"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> </soap:Header> <soapenv:Body> <ser:sayHello xmlns:ser="http://service.rc.infores.gpdi.com"> <ser:in0><![CDATA[ 4444444444 ]]></ser:in0> </ser:sayHello> </soapenv:Body> </soapenv:Envelope>
3,或用以下这个:
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ns1:sayHello xmlns:ns1="http://com.gxlu.ngrm.external.guangzhou.server"> <target xsi:type="xsd:string">Yerasel </target> </ns1:sayHello> </soap:Body> </soap:Envelope>
说明:1. ns1:sayHello 中的 sayHello是调用WS的服务的方法名称,可以修改为你自已的WS服务中的方法。
2. target 为WS服务中的参数的名称,最好一致,我试了下,有一个参数的话,随便取个名,也可以调用到。
4. 配完了,就可以加入监听器,观看结果:
说明,设置线程的个数都在 线程组 中设置
OK,JMeter测试WS结束 。
最后再说下,在Eclipse jEE 版本中,也带有一个界面测试WS的客户端:
下面有一个请求的发送调用服务的XML,可以把这段xml copy 到上面Jmeter中的 SOAP/XML-RPC Data 中即可:
如:
请求的SOAP/XML-RPC Data 为:
把这段放到上面示例中,运行即可。
返回的XML为:
有一个问题:
如果方法中有两个参数,或三个参数,时,用eclispe 或JMeter去调用时,都会报 :