Jmeter 测试WebService

                                                                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 为:

- < soapenv:Envelope xmlns:soapenv =" http://schemas.xmlsoap.org/soap/envelope/ " xmlns:q0 =" http://server.guangzhou.external.ngrm.gxlu.com " xmlns:xsd =" http://www.w3.org/2001/XMLSchema " xmlns:xsi =" http://www.w3.org/2001/XMLSchema-instance ">
- < soapenv:Body >
- < q0:sayHello >
  < q0:in0 > 3333 </ q0:in0 >
  </ q0:sayHello >
  </ soapenv:Body >
  </ soapenv:Envelope >

 

把这段放到上面示例中,运行即可。

返回的XML为:

- < soap:Envelope xmlns:soap =" http://schemas.xmlsoap.org/soap/envelope/ " xmlns:xsd =" http://www.w3.org/2001/XMLSchema " xmlns:xsi =" http://www.w3.org/2001/XMLSchema-instance ">
- < soap:Body >
- < ns1:sayHelloResponse xmlns:ns1 =" http://server.guangzhou.external.ngrm.gxlu.com ">
  < ns1:out > hello world from 3333 </ ns1:out >
  </ ns1:sayHelloResponse >
  </ soap:Body >
  </ soap:Envelope >

 

 

有一个问题: 

    如果方法中有两个参数,或三个参数,时,用eclispe 或JMeter去调用时,都会报 :

- < soap:Envelope xmlns:soap =" http://schemas.xmlsoap.org/soap/envelope/ " xmlns:xsd =" http://www.w3.org/2001/XMLSchema " xmlns:xsi =" http://www.w3.org/2001/XMLSchema-instance ">
- < soap:Body >
- < soap:Fault >
  < faultcode > soap:Server </ faultcode >
  < faultstring > Error invoking 'com.gxlu.ngrm.external.guangzhou.server.HelloWorldService.sayHello3(java.lang.String, java.lang.String, java.lang.String)'. Nested exception is java.lang.reflect.InvocationTargetException: null </ faultstring >
  </ soap:Fault >
  </ soap:Body >
  </ soap:Envelope >                           这是在Eclipse 的WS 客户端下测试的,在JMeter中报一些的错。
这种错误,不解,我的方法参数都是String 类型 ,
 还忘知道的兄弟们告之下,谢谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值