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’->‘Step 1:[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",

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)参数化;

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中设置增强日志类型,以便看到更详细的信息。

调试完成后调整为:Send messages only when an error occurs

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

4.2.2 场景执行和监控

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

2、设置虚拟用户数,如下图:

3、调整虚拟用户的增长、下降方式

4.2.3 结果分析

4.WebService安全性测试

暂无

WebService测试方案的更多相关文章

  1. 从Google开源RE2库学习到的C++测试方案

    最近因为科研需求,一直在研究Google的开源RE2库(正则表达式识别库),库源码体积庞大,用C++写的,对于我这个以前专供Java的人来说真的是一件很痛苦的事,每天只能啃一点点.今天研究了下里面用到 ...

  2. webservice测试实例

    webservice测试实例(LR8.1) 接口声明:这个接口是sina的短信服务接口,我只是用来做脚本学习使用,不会对其产生压力:希望读者也只是用来进行录制学习,而不是产生压力. 接口文档:http ...

  3. 基于soapUI构建WebService测试框架

    基于soapUI构建WebService测试框架 http://www.docin.com/p-775523285.html

  4. Android MediaCodec硬编兼容性测试方案

    作者:阿宝 更新:2016-08-15 来源:彩色世界(https://blog.hz601.org/2016/08/15/android-mediacodec-hardcode-compatibil ...

  5. HttpDNS的坑以及一个针对安卓不太完善的测试方案

    背景:单位因为域名劫持(具体表象是某个地区的用户ping不通域名或者因为DNS解析的ip跨网段导致访问速度很慢)需要运维经常去定位,于是提出了httpDNS方案. 想法是美好的,现实是残酷的.没引入这 ...

  6. webservice 测试页面

    转载:http://www.cnblogs.com/JuneZhang/archive/2013/01/24/net.html 解决WebService 测试窗体只能用于来自本地计算机的请求 问题: ...

  7. 从轻测到上线,WeTest与《一起来捉妖》测试方案大公开

    从2016年Pokémon GO引发的AR游戏热潮开始,国内就一直在期待新的一款具备代表性的AR游戏的头部作品. 4月11日的腾讯首款AR探索手游<一起来捉妖>不仅为国内市场注入了新的活力 ...

  8. Memory及其controller芯片整体测试方案(下篇)

    {  第三部分  }  DDR总线的设计.调试和验证  在计算机架构中,DDR作为程序运算的动态存储器,面对如高性能计算.图形计算.移动计算.工业应用等领域的要求,发展出DDR4,以及用于图形计算的G ...

  9. Memory及其controller芯片整体测试方案(上篇)

    如果你最近想买手机,没准儿你一看价格会被吓到手机什么时候偷偷涨价啦! 其实对于手机涨价,手机制造商也是有苦难言,其中一个显著的原因是存储器芯片价格的上涨↗↗↗ >>> 存储器memo ...

随机推荐

  1. 使用SQL Server临时表来实现字符串合并处理

    处理的数据 CREATE TABLE tb(col1 varchar(10),col2 int) INSERT tb SELECT 'a',1 union ALL SELECT 'a',2 union ...

  2. Difference between TCP and UDP

    refered from http://www.cyberciti.biz/faq/key-differences-between-tcp-and-udp-protocols/ TCP UDP Rel ...

  3. 我喜欢的两个js类实现方式

    闭包实现 变量是不会变的:) var myApplication = function(){ var name = 'Yuri'; var age = '34'; var status = 'sing ...

  4. install postgis(2.0) on ubuntu(12.04)

    1. 安装postgis sudo apt-add-repository ppa:sharpie/for-science # To get GEOS 3.3.2 sudo apt-add-reposi ...

  5. centos7 安装nodejs,git

    yum -y install gcc make gcc-c++ openssl-devel wget 下载源码及解压: wget http://nodejs.org/dist/v0.10.26/nod ...

  6. AMD规范

    common.js主要语法就是 var math=require('math'); math.add(2,3); require()用于加载模块就行了. 二行math.add(2, 3),在第一行re ...

  7. BCTF Web Code–考脑洞,你能过么?

    BCTF Web Code–考脑洞,你能过么? 1)打开链接,是一张图片 根据URL特点推断可能是有文件包含漏洞 2) 将jpg参数修改成index.php,查看源代码,发现base64编码后的代码 ...

  8. Qt 5.7 > QML

    本文档翻译自Qt官方文档: http://doc.qt.io/qt-5/qtqml-index.html Qt QML Qt QML模块使用QML语言为开发应用与库提供一个框架.它定义并实现了语言与引 ...

  9. 第八十七节,html5+css3pc端固定布局,大纲算法,section和div,结构分析

    html5+css3pc端固定布局,大纲算法,section和div,结构分析 一.大纲算法 在HTML5中有一个很重要的概念,叫做HTML5 大纲算法(HTML5Outliner),它的用途是为用户 ...

  10. iOS开发QQ空间半透明效果的实现

    //1.首先我们可以确定的是cell的半透明, /* white The grayscale value of the color object, specified as a value from ...