|
loadrunner测试web service的方法总结
有三种方法成功:
Add Service Call方法步骤
1.首先向开发要到wsdl的地址。(本例中用的是http://IP:7001/sofa/services/com/yss/sofa/framework/test/services/WebService?wsdl)打开之后显示的应该是一个XML格式的解释性的文件。
2.打开loadrunner,新建一个脚本,使用web services脚本协议。打开之后快捷工具栏会跟HTTP不太一样,如下(第三行的三个按钮下面要用到):
3.点击Manage Services按钮,在弹出框中的左上角的导入打开输入wsdl地址框。
4.在打开的地址框中添加刚刚的wsdl地址,然后点击导入,之后无需做任何事情直接点击OK关闭Manage Services窗口。到这里这个web services的信息都已经进入到脚本配置文件中了。
5.点击Add Services Call按钮,弹出对应方法的调用界面。其中input是输入,output是输出,就是方法的参数和返回值。右边Method里边写的是可以调用的方法。在输入下面的是方法的各个参数,点击之后弹出界面能够输入想带入的参数值。
6.点击确定,会生成相应的loadrunner请求函数。
web_service_call( "StepName=getTestBeans_102",
"SOAPMethod=WebService|WebServicePort|getTestBeans",
"ResponseParam=response",
"Service=WebService",
"ExpectedResponse=SoapResult",
"Snapshot=t1369381795.inf",
BEGIN_ARGUMENTS,
"arg0=5000",
END_ARGUMENTS,
BEGIN_RESULT,
END_RESULT,
LAST);
到此脚本完成,回放成功,如果还不放心就打开全部日志回放能够看到全部的请求和响应,以此判断是否正确。
SOAP方法步骤
此方法需要解析WSDL文件生成对应的XML文档,我使用的是soapUI工具,当然大家如果足够强也可以看着解释文件手动翻译。
1.第一步和第二步跟上面一样,不重复了。
2.打开soapUI工具(没有的自己到网上去找直接安装就行),点击File,新建一个soapUI工程。
3.在弹出框中输入WSDL地址并点击OK确定。
4.工具解析地址反馈回来的XML之后会生成对应的可以操作的函数,双击解析后生成的工程会看到解析出来的结果。
5.在解析的结果中找到Service Endpoints找到下面输入框中的地址,记住这个地址,下面需要用到。
6.双击左侧的请求,会生成对应的XML文件,在参数中间(<arg0>5000</arg0>)输入想要带进去的参数值。然后右键弹出菜单中选择保存,保存成一个XML文件。
7.关闭soapUI,点击Import SOAP按钮打开新增SOAP请求界面。如果弹出Cannot inser outside a function.是表示在脚本中的输入光标位置不对。在弹出框中点击浏览找到刚刚保存的XML文件。
7.确定之后会自动生成更大的一个输入框,在URL输入框中输入第5步保存下来的地址。
8.点击OK,生成SOAP脚本,如下:
soap_request("StepName=SOAP Request",
"URL=http://IP:7001/sofa/services/com/yss/sofa/framework/test/services/WebService",
"SOAPEnvelope="
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"http://services.test.framework.sofa.yss.com/\">"
"<soapenv:Header></soapenv:Header>"
"<soapenv:Body>"
"<ser:getTestBeans>"
"<arg0>5000</arg0>"
"</ser:getTestBeans>"
"</soapenv:Body>"
"</soapenv:Envelope>",
"SOAPAction=",
"ResponseParam=response",
"Snapshot=t1369385831.inf",
LAST);
到此脚本完成,回放成功,如果还不放心就打开全部日志回放能够看到全部的请求和响应,以此判断是否正确。
POST请求方法步骤
1.用以上soapUI工具访问webservice接口,用wireshark截包工具接下来网络包,发现依然是用HTTP协议进行访问的。保存包的内容。
2.建立一个HTTP协议脚本,用insert->New Step按钮新增一个用户自定义请求。
其中Method写成POST表示是一个POST请求。
URL写wsdl的地址。
body中将截到的数据包的body直接复制进去,点击确定就会生成相应函数。
web_custom_request("web_custom_request",
"URL=http://IP:7001/acs/services/com/yss/acs/interfaces/Service?wsdl",
"Method=POST",
"TargetFrame=",
"Resource=0",
"Referer=",
"Body=<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:int=\"http://interfaces.acs.yss.com/\"><soapenv:Header></soapenv:Header><soapenv:Body><int:getTransferCommands><arg1>2013-04-05</arg1><arg2>2013-04-05</arg2></int:getTransferCommands></soapenv:Body></soapenv:Envelope>",
LAST);
两个脚本的对比总结
两个脚本都放在场景里进行了一下测试,测试的结果有两个感受:
1.在各方面资源足够的情况下三个脚本的压力是一样的。
2.Add Service Call方法占用压力机的资源极多,一个普通的PC机上25个用户CPU都会达到90%,而SOAP方法几乎不占CPU,上了100个用户CPU才25%。怀疑前一种方法在上场景中进行压力的过程中还需要不停的读取Manage Services中的配置和地址,所以占用压力机CPU特别高。
3.采用SOAP方法无法用普通的关联函数web_reg_save_param做关联,而需要用到XML取值操作函数,并且在获取值之前还要先写一个XML函数来告诉脚本这次获取时的标准XML格式,研究两个小时未果,过段放弃。采用了POST请求方式之后跟过去HTTP协议脚本没有发现任何区别,关联和检查点操作都完全一致,关联的左右两边只要写上XML中的两个边界即可,这个时候需要注意关联第几个数据。
4.目前没有其他的感受,在可能的情况下尽量使用POST方法吧,如果没有转换工具自己又不能转换还不能截包再考虑使用Add Service Call方法。 |
|