(zz) Web Service 测试方法

1.WebService简介

WebService是一种革命性的分布式计算技术,本质上就是网络上可用的API,可以直接在网络环境调用的方法。

WebService常用的框架有axis、xfire、cxf等。

WebService发布后,其服务是封装在一个wsdl(Web Services Description Language,Web服务描述语言)文件中,客户端发请求主要是向发布好的wsdl地址以SOAP方式发请求,调用过程如下:

?  服务端:

n  生成服务描述文件,以供客户端获取。

n  接收客户端发来的SOAP请求消息,解析其中的方法调用和参数格式。

n  根据wsdl和wsml的描述,调用相应的COM对象来完成指定功能,并把返回值放入SOAP回应消息返回给用户。

?  客户端:

n  取得服务端的服务描述文件,解析该文件从而获得服务端的服务信息以及调用方式。

n  指定调用方法和参数,生成恰当的SOAP请求消息,发往服务端。

n  等待服务端返回的SOAP回应消息,解析得到返回值。


2.WebService测试说明

WebService的测试主要围绕功能测试、性能测试和安全性测试展开,下面主要描述WebService三大测试的要点。


2.1 WebService功能测试

测试目的:测试系统所实现WebService接口的功能。

进入条件:开发人员提供已实现功能的程序包,和待测试webservice的方法名、参数以及实现的功能描述。

测试要点:不同的参数组合,应按设计要求返回相应的信息。


2.2 WebService性能测试

测试目的:测试系统所实现WebService接口的性能。进入条件:WebService接口的功能测试已完毕。

测试要点:测试并发调用WebService接口,观察其性能表现,主要是在不同的并发量、持续运行时间和数据库不同容量下,事务的响应时间、总事务数、事务的成功率、点击率等,同时监控硬件资源的消耗情况。


2.3 WebService安全性测试

测试目的:测试系统所实现WebService接口的安全性。

进入条件:WebService接口的功能测试已完毕。

测试要点:测试WebService接口的调用是否有用户名、密码验证,恶意调用是否会导致系统崩溃等。


3.WebService功能测试

目前掌握的测试工具soapUI可以进行WebService的功能测试,下面以测试存储服务的PIXManager接口详细介绍使用soapUI进行WebService功能测试的操作步骤。


3.1 新建工程

1、单击‘File’->‘ New soapUI Project’,如下图:

(zz) Web Service 测试方法

 

2、在弹出的对话框中输入待测试的ws信息,然后点击 [OK] 到下一步

Project Name:PIXManager

Initial WSDL/WADL:http://192.168.2.51:8181/WEB-INF/services/PIXManager?wsdl

Create Requests:选中

Create TestSuite:选中

Relative Paths:选中

 (zz) Web Service 测试方法

 

 

3、保存project

 

 (zz) Web Service 测试方法

4、生成初始的测试用例

选择One TestCase for each Operation:每个接口创建一个用例

选择Create new empty requests:创建一个空的请求

Operations:选择待测试的方法

选择Generates a default LoadTest for each created TeseCase:每个用例生成一个负责测试(为后面性能测试做准备)

 (zz) Web Service 测试方法

 

 

5、生成TestSuite

 

(zz) Web Service 测试方法
这里可以根据习惯更改TestSuite的名称,如TestSuite:PIXManager。

6、在soapUI的左侧生成如下目录

 

 (zz) Web Service 测试方法

此时新建project已完成!


3.2 发送请求

1、创建项目的时候我们选择了Create sample requests for all operations,所以每个接口方法都会自动创建一个请求,如下图:

(zz) Web Service 测试方法
2、双击它就可以打开编辑面板,左边是请求内容,右边是响应内容。(zz) Web Service 测试方法

 

3、在Form页面输入参数,单击 按钮执行,右侧查看结果。

 

(zz) Web Service 测试方法
根据反馈的结果判断请求是否发送成功。

输入的xml内容如下:

<?xml version="1.0" encoding="GB2312"?>          <V_PATIENTREGC99999999 xsi:noNamespaceSchemaLocation="PATIENTREGC99999999.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">            <MEDICALSERVICE_NO>01</MEDICALSERVICE_NO>                    <NAME>小花</NAME>                    <BIRTH_DATE>1988-02-01T00:00:00</BIRTH_DATE>                   <GENDER_CD>1</GENDER_CD>           <GENDER_VALUE>男性</GENDER_VALUE>                   <MARITAL_ST_CD>10</MARITAL_ST_CD>            <MARITAL_ST_VALUE>未婚</MARITAL_ST_VALUE>                   <ID_NO_CD>01</ID_NO_CD>               <ID_NO_VALUE>居民身份证</ID_NO_VALUE>                <ID_NO>12586</ID_NO>               <MEDICARE_CD>01</MEDICARE_CD>                  <MEDICARE_VALUE>社会基本医疗保险</MEDICARE_VALUE>            <MEDICAL_INSURANCE_NO>Y001</MEDICAL_INSURANCE_NO>                   <AR_CD>111</AR_CD>                   <AD_CD>01</AD_CD>            <AD_VALUE>户籍住址</AD_VALUE>                   <PROVINCE_NAME>上海</PROVINCE_NAME>           <CITY_NAME>上海</CITY_NAME>           <AREA_NAME>浦东区</AREA_NAME>                 <STREET_ID>霞飞路</STREET_ID>                  <VILLAGE_NAME>街</VILLAGE_NAME>                <HOUSE_NO>门牌号</HOUSE_NO>                 <TEL_TYPE_CD>01</TEL_TYPE_CD>              <TEL_TYPE_VALUE>本人电话</TEL_TYPE_VALUE>                   <TEL_NO>1232312</TEL_NO>                <REGISTER_DATE>2010-09-27T14:31:00</REGISTER_DATE>                <RECORDER_NAME>小芳</RECORDER_NAME>             <REGISTER_PERSON_CODE>01</REGISTER_PERSON_CODE>                   <REGISTER_ORG_CODE>01</REGISTER_ORG_CODE>                  <REGISTER_ORG_NAME>中科</REGISTER_ORG_NAME>          <SEND_TIME>2010-09-27T14:32:00</SEND_TIME>             <SEND_ORG_CODE>798921772</SEND_ORG_CODE>                 <SEND_SYSTEM>222222222222</SEND_SYSTEM>       </V_PATIENTREGC99999999>


4.WebService性能测试

目前掌握的是两个测试工具soapUI和LoadRunner,其中soapUI可以进行WebService的功能和性能测试,而LoadRunner主要是性能测试。

下面分别介绍两个工具进行WebService性能测试的步骤。

 


4.1 采用soapUI测试步骤

基于前面soapUI功能测试的步骤,若已成功,可将脚本参数化后用于性能测试,具体步骤如下:


4.1.1 数据生成器

1、右键单击Test Steps,‘Add Step’->‘DataGen’,如下图:

 (zz) Web Service 测试方法

2、输入步骤名称

 

(zz) Web Service 测试方法
3、设置生成方法

1) 点击 (zz) Web Service 测试方法新建

 

(zz) Web Service 测试方法
2) 定义名称和类型

 

(zz) Web Service 测试方法
Name:自定义,如MEDICALSERVICE_NO

Type:选择‘Number’型,

 

3) 设置为‘Randomize instead of step’

 


(zz) Web Service 测试方法
4.1.2 参数化

打开待参数化的请求,找到需参数化的内容,选中并右键单击,如下图:。

 

(zz) Web Service 测试方法
选择‘Get Data’->‘Step 1:[DataGen]’->‘property [MEDICALSERVICE_NO]’

原来的数据被替换为:${DataGen#MEDICALSERVICE_NO}


4.1.3 场景执行和监控

1、打开‘TestSuite:PIXManager’->‘registerPatientInterface’->‘Load Tests’->‘registerPatientInterface’

 (zz) Web Service 测试方法

2、设置并发线程,单击 执行测试

(zz) Web Service 测试方法


4.1.4 结果分析

 


4.2 采用LoadRunner测试步骤

 


4.2.1 脚本准备

1.选择协议

 

(zz) Web Service 测试方法
2、导入wsdl

 

 

 

 

(zz) Web Service 测试方法

(zz) Web Service 测试方法
(zz) Web Service 测试方法
(zz) Web Service 测试方法
3、Add Service Call

 

 (zz) Web Service 测试方法

(zz) Web Service 测试方法
设置好后生成如下脚本:

         web_service_call( "StepName=registerPatientInterface_101",

                 "SOAPMethod=PIXManager_Service|PIXManager_ServicePort|registerPatientInterface",

                   "ResponseParam=response",

                   "Service=PIXManager_Service",

                   "ExpectedResponse=SoapResult",

                   "Snapshot=t1294907356.inf",

                   BEGIN_ARGUMENTS,

                   "msgID=",

                   "sendMsgOrgID=",

                   "sendMsgPosID=",

                   "eventDateTime=",

                   "eventDateTimeSpecified=",

                   "xml=",

                   END_ARGUMENTS,

                   BEGIN_RESULT,

                   "return=Param_return",

                   END_RESULT,

                   LAST);

 

4、输入参数

1)输入msgID、sendMsgOrgID、sendMsgPosID、eventDateTime、eventDateTimeSpecified;

                   "msgID=11111",

                   "sendMsgOrgID=111111",

                   "sendMsgPosID=111111",

                   "eventDateTime=2011-01-12 10:10:10",

                   "eventDateTimeSpecified=true",

 

2)输入Xml;

                   "xml=<?xml version="1.0" encoding="GB2312"?>           "

                   "<V_PATIENTREGC99999999 xsi:noNamespaceSchemaLocation="PATIENTREGC99999999.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">"

                   "               <MEDICALSERVICE_NO>01</MEDICALSERVICE_NO>"

                   "               <NAME>小花</NAME>"

                   "               <BIRTH_DATE>1988-02-01T00:00:00</BIRTH_DATE>"

                   "               <GENDER_CD>1</GENDER_CD>"

                   "               <GENDER_VALUE>男性</GENDER_VALUE>"

                   "               <MARITAL_ST_CD>10</MARITAL_ST_CD>"

                   "               <MARITAL_ST_VALUE>未婚</MARITAL_ST_VALUE>"

                   "               <ID_NO_CD>01</ID_NO_CD>"

                   "               <ID_NO_VALUE>居民身份证</ID_NO_VALUE>"

                   "               <ID_NO>13504568756</ID_NO>"

                   "               <MEDICARE_CD>01</MEDICARE_CD>"

                   "               <MEDICARE_VALUE>社会基本医疗保险</MEDICARE_VALUE>"

                   "               <MEDICAL_INSURANCE_NO>Y001</MEDICAL_INSURANCE_NO>"

                   "               <AR_CD>111</AR_CD>"

                   "               <AD_CD>01</AD_CD>"

                   "               <AD_VALUE>户籍住址</AD_VALUE>"

                   "               <PROVINCE_NAME>上海</PROVINCE_NAME>"

                   "               <CITY_NAME>上海</CITY_NAME>"

                   "               <AREA_NAME>浦东区</AREA_NAME>"

                   "               <STREET_ID>霞飞路</STREET_ID>"

                   "               <VILLAGE_NAME>街</VILLAGE_NAME>"

                   "               <HOUSE_NO>门牌号</HOUSE_NO>"

                   "               <TEL_TYPE_CD>01</TEL_TYPE_CD>"

                   "               <TEL_TYPE_VALUE>本人电话</TEL_TYPE_VALUE>"

                   "               <TEL_NO>1232312</TEL_NO>"

                   "               <REGISTER_DATE>2010-09-27T14:31:00</REGISTER_DATE>"

                   "               <RECORDER_NAME>小芳</RECORDER_NAME>"

                   "               <REGISTER_PERSON_CODE>01</REGISTER_PERSON_CODE>"

                   "               <REGISTER_ORG_CODE>01</REGISTER_ORG_CODE>"

                   "               <REGISTER_ORG_NAME>中科</REGISTER_ORG_NAME>"

                   "               <SEND_TIME>2010-09-27T14:32:00</SEND_TIME>"

                   "               <SEND_ORG_CODE>798921772</SEND_ORG_CODE>"

                   "               <SEND_SYSTEM>222222222222</SEND_SYSTEM>"

                   "      </V_PATIENTREGC99999999>",

 

5、脚本增强

1)参数化;

 

 

 

 

 (zz) Web Service 测试方法

 

(zz) Web Service 测试方法


(zz) Web Service 测试方法
(zz) Web Service 测试方法

2)增加事务并打印返回结果;

 

         lr_start_transaction("registerPatientInterface");

 

                  if (strstr(lr_eval_string("{Param_return}"),"C99999999$")==NULL)    {

 

 

                   if (strstr(lr_eval_string("{Param_return}"),"empty!")==NULL) {

 

                            lr_end_transaction("registerPatientInterface", LR_STOP);

                            lr_output_message(lr_eval_string("出错了!返回的信息如下:{Param_return}"));

                   }

 

 

                   else{

 

                            lr_end_transaction("registerPatientInterface", LR_FAIL);

                            lr_output_message(lr_eval_string("请求成功,保存失败!返回的信息如下:{Param_return}"));

                   }

 

         }

 

         else{

 

                   lr_end_transaction("registerPatientInterface", LR_PASS);

                   lr_output_message(lr_eval_string("请求成功,保存成功!返回的信息如下:{Param_return}"));

 

         }

 

3)调试;

在run-time settings中设置增强日志类型,以便看到更详细的信息。

 

(zz) Web Service 测试方法
调试完成后调整为:Send messages only when an error occurs

4)去掉默认的事务划分;

 

 (zz) Web Service 测试方法


4.2.2 场景执行和监控

1、脚本调试成功后,点击‘Tools’->‘Create Controller Scenario’,如下图:

 

(zz) Web Service 测试方法
2、设置虚拟用户数,如下图:

 

(zz) Web Service 测试方法
3、调整虚拟用户的增长、下降方式

 


(zz) Web Service 测试方法
4.2.3 结果分析

 


4.WebService安全性测试

暂无