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?’,如下图:

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:选中
3、?保存project

4、?生成初始的测试用例
选择One TestCase for each Operation:每个接口创建一个用例
选择Create new empty requests:创建一个空的请求
Operations:选择待测试的方法
选择Generates a default LoadTest for each created
TeseCase:每个用例生成一个负责测试(?为后面性能测试做准备?)
5、?生成TestSuite

这里可以根据习惯更改TestSuite的名称,如TestSuite:PIXManager。
6、?在soapUI?的左侧生成如下目录

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

2?、双击它就可以打开编辑面板,左边是请求内容,右边是响应内容。
3?、在Form?页面输入参数,单击?按钮执行,右侧查看结果。

根据反馈的结果判断请求是否发送成功。
输入的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
’,如下图:

2?、输入步骤名称
3、设置生成方法
1)??点击?

?新建
2)定义名称和类型

Name:自定义,如MEDICALSERVICE_NO
Type:选择‘Number’型,
3)?
设置为‘Randomize instead of
step
’

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

选择‘Get Data’->‘Step1:[DataGen]’->‘property [MEDICALSERVICE_NO]’
原来的数据被替换为:${DataGen#MEDICALSERVICE_NO}
4.1.3 场景执行和监控
1?、打开‘TestSuite?:PIXManager?’->?‘registerPatientInterface?’->
‘Load
Tests
‘registerPatientInterface
2?、设置并发线程,单击?执行测试
4.1.4 结果分析
4.2 采用LoadRunner测试步骤
4.2.1 脚本准备
1.?选择协议
2、导入wsdl


3、Add Service Call


设置好后生成如下脚本:
web_service_call( “StepName=registerPatientInterface_101″,
“SOAPMethod=PIXManager_Service|PIXManager_ServicePort|registerPatientInterface”,
“ResponseParam=response”, “Service=PIXManager_Service”, “ExpectedResponse=SoapResult”, “Snapshot=t1294907356.inf”, “eventDateTimeSpecified=”, “return=Param_return”, |
4?、输入参数
1)输入msgID、sendMsgOrgID、sendMsgPosID、eventDateTime、eventDateTimeSpecified;
“sendMsgOrgID=222221″, “sendMsgPosID=222221″, “eventDateTime=2011-01-12 10:10:10″, “eventDateTimeSpecified=true”,sans-serif"> 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>”
”
<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>”
”
<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)参数化;




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}”)); lr_end_transaction(“registerPatientInterface”,LR_FAIL); lr_output_message(lr_eval_string(“请求成功,保存失败!返回的信息如下:{Param_return}”)); lr_end_transaction(“registerPatientInterface”,LR_PASS); lr_output_message(lr_eval_string(“请求成功,保存成功!返回的信息如下:{Param_return}”)); |
3)调试;
在run-time settings中设置增强日志类型,以便看到更详细的信息。

调试完成后调整为:Send messages only when an error occurs
4)去掉默认的事务划分;

4.2.2 场景执行和监控
1?、脚本调试成功后,点击‘Tools?’->
‘Create
Controller Scenario
2、设置虚拟用户数,如下图:
3、调整虚拟用户的增长、下降方式

4.2.3 结果分析
4.WebService安全性测试
暂无
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|