目录:

1、SoapUI介绍

2、使用SoapUI进行web service性能测试

3、使用LR进行web service性能测试

4、使用JMeter进行web service性能测试


SoapUI介绍

soapUI是一个简单易用的测试Web Service的工具,安装在本地PC机上即可使用。soapUI通过SOAP/HTTP(Hypertext Transfer Protocol)来调用Web Service,从而实现对Web Service的功能/负载/符合性测试。该工具既可作为一个桌面应用软件使用,也可利用插件集成到Eclipse中使用。SoapUI 是基于Java开发的开源工具,因此在安装之前需要先部署Java环境,可以对Web Service进行功能测试,性能测试,回归测试等。soapUI有普通版本和专业版本,普通版本可以实现一般的功能,不需要申请License即可使用,专业版本相对于普通版有更多更灵活的测试步骤可以添加,但需要申请一个免费试用的License才可使用。soapUI的官方网址为http://www.soapui.org/

下面以测试web service:http://fy.webxml.com.cn/webservices/EnglishChinese.asmx?wsdl、SoapUI 4.5.2为例进行说明:

1)打开SoapUI,新建一个工程,输入工程名称和待测试web service的WDSL文件或url地址,下面的选项第一项为默认必选项,后面依次为是否创建测试套、MockService(SoapUI模拟一个web service服务器)等,点击OK。

2)在左侧的树结构中,列出了连接web service 的所有方法请求,双击请求右侧会显示该请求的soap消息体。可以对消息体以及发送的地址进行编辑,修改请求消息体中的?号为实际要发送的数据,点击右上角的小三角形按钮即发送该请求道对应地址的webservice服务器,最右侧显示了服务器返回的消息体。点击Raw可以分别查看请求和响应的消息头(http/soap)。

4)在请求或响应栏中鼠标右键可以值执行各种操作,比如点击save as可以把请求体保存到一个xml文件中。


使用SoapUI进行web service性能测试

1)在待测试的请求上鼠标右键点击增加一个测试套,分别依次输入测试套名、测试用例名、具体的测试步骤名以及断言(检查点)选项。

                 

2)右侧显示了一个测试套结构,可以增加多个测试套和测试步骤(各种类型),点击小三角按钮可以运行该测试,即对web service进行功能测试。在测试套结构中还能进行性能测试和安全测试。

3)在Load Tests上右键新建一个性能测试,弹出性能测试配置界面。

如下图所示,左上角为性能测试操作和配置快捷键,配置参数说明:

Limit:运行时间

Threads:并发线程数(虚拟用户数)

Strategy:并发策略

Test Delay:每个请求间的时延。

Random:

主界面实施显示运行时响应时间、TPS、错误数等监控数据,点击右上角的图像按钮可以显示监控图。

10、无论是性能测试还是功能测试,都需要添加必要的检查点来确认服务器返回了正确的信息,双击上图中的请求进入下图所示的请求界面,点击左上角的加号按钮来增加一个检查点,选择检查点的类型,其中contains为检查是否存在一个特定的字符串,一般常用,点击Add按钮,输入检查的文本,支持正则表达,同样的方法可以增加更多的检查点。

12、添加了检查点后,再次运行功能测试或性能测试时,检查点就会生效,蓝色表示检查点检查通过,红色表示检查不通过,点击下面的检查点可以查看检查点和增加更多的检查点。

13、性能测试运行界面。


使用LR进行web service性能测试

LR中支持web service协议,使用LR进行web service性能测试一般选择web service调用方式或soap调用方式,除这两种方式之外,还可以使用基于http协议和socket协议等方式。

web service调用方式

1)新建一个web service协议类型的脚本,将光标定位到脚本空白处,点击Manage Services按钮,点击Impoert按钮导入待测试的web service,可以选择导入wsdl url、wsdl文件等方式,例如:http://fy.webxml.com.cn/webservices/EnglishChinese.asmx?wsdl,点击import按钮以完成web servcie的导入。

2)点击add service按钮,LR会获取到web service的所有方法,在Operation中选择一个方法,下方显示该方法的输入输出参数,输入输入参数值(可以参数化)和输出参数保存的参数名,点击OK按钮,以自动生成web service调用语句,使用LR的web_service_call函数。

PS:输出参数自动保存在输入的参数中,后续的处理中可以直接使用该参数。

Soap调用方式

1)首先需要准备发送web service请求的soap(xml文件),可以借助SoapUI工具来通过WSDL生成发送的soap,并保存在本地xml文件中,将光标定位到脚本空白处,点击Import SOAP按钮,选择本地soap请求xml文件,输入URL,如=http://fy.webxml.com.cn/webservices/EnglishChinese.asmx,SOAP Action可以不输入,点击ok按钮LR自动生成soap请求脚本,soap_request函数。

对于web service,无论以上哪种调用方式,LR自动将服务器放回的消息保存在参数response和stepname_response中,后续处理中可以直接使用该参数,而无需(也不能)额外使用通用的关联函数来保存服务器的返回。另外可以使用LR中提供的lr_xml_get_values等系列xml处理函数来处理response的xml数据,以提取其中的某些值。

  以上测试方式都是LR直接支持的Web service接口来实现性能测试的,除此之外,还可以将web service看成是http,本质上仍然是http,因此也可以通过LR支持的http协议对实现对web service的性能测试, 比如使用web_customer_request函数来模拟web service的请求。


对于web service性能测试,SoapUI与LR的比较

分别使用SoapUI和LR的web service调用方式测试同一个web service方法,使用相同的参数值,设置相同的并发用户数和持续时间以及都不设置思考时间,其中LR_1脚本不含检查点,LR_2中含有检查点,测试的结果如下下表:

由上表可以分析出如下结论:

1)SoapUI 是专门针对WS接口的测试工具, 在实现对相同接口测试时,SoapUI 表现出来的性能更优越。

2)SoapUI 在发送请求时,是直接以组装好的soap报文进行发送,而LR 是使用 web_service_call 方法,从方法传入相应的参数,再由LR组装为soap报文后, 再发往接口进行调用,因此LR在组装报文时,会有相应时间的耗费。LR 脚本中创建的事务,就包含了这段组装报文的时间,因此响应时间会比 SoapUI 的响应时间更大。

3)对于 LR,在测试中若增加对返回结果的校验,也会耗费一定的时间,从上面的数据可以看出,时间差大约 0.12s 左右,这也与校验中使用的方法有关系,如果方法高效的话,这个时间差也将更少。

4)SoapUI 提供的结果数据的分析不如 LR 那么详细与全面, 但对于接口级的测试已足够,且速度更优。

LR 与SoapUI 的差别应该还有更多,在此尚未研究的更深入。

此外,目前WS接口有多种语言可以实现,除了 JAVA、 C++,还有WCF,WCF接口生成的WSDL,LoadRunner 读取时直接失败,暂找不到解决方法。而使用SoapUI已测试通过。


使用LR进行web service性能测试实例脚本

CMES设备在线激活场景LR性能测试脚本---web service调用:

 Action()
{
//License文件句柄
long CmesLicenseFiledes; //License文件名
char CmesLicneseFileName[] = "D:\\CmesLicneseFile_"; //License文件长度
int CmesLisenceLen; //Vuserid
char vuserid_str[]; //当前时间
char curtime_str[]; //License count
int count; //集合点
lr_rendezvous("CmesActivationt_Rendezous"); //start CmesActivationt
lr_start_transaction("CmesActivationt"); web_service_call( "StepName=createLicenseByLac_101",
"SOAPMethod=ConnectSdpWebServiceService|ConnectSdpWebServicePort|createLicenseByLac",
"ResponseParam=response",
"Service=ConnectSdpWebServiceService",
"ExpectedResponse=SoapResult",
"Snapshot=t1376988055.inf",
BEGIN_ARGUMENTS,
"taskOrder={Param_taskOrder}",
"esn=ABCD{Param_esn_part1}{Param_esn_part2}",
END_ARGUMENTS,
BEGIN_RESULT,
"return/resultCode=Param_resultCode",
END_RESULT,
LAST); //end CmesActivationt
if(atoi(lr_eval_string("{Param_resultCode}"))==) lr_end_transaction("CmesActivationt", LR_PASS);
else
lr_end_transaction("CmesActivationt", LR_FAIL); // lr_think_time(3); //获取响应文件长度
CmesLisenceLen = strlen(lr_eval_string("{response}"));
lr_output_message("CmesLisenceLen: %d!",CmesLisenceLen); //license文件名
strcpy(vuserid_str,lr_eval_string("{vuserid_Param}"));
strcpy(curtime_str,lr_eval_string("{curtime_Param}")); strcat(CmesLicneseFileName,vuserid_str);
strcat(CmesLicneseFileName,"_");
strcat(CmesLicneseFileName,curtime_str); if(CmesLisenceLen>)
{
//以写方式打开文本文件
if((CmesLicenseFiledes = fopen(CmesLicneseFileName,"wt"))==NULL)
{
lr_output_message("Open File Failed!");
return -;
} //写入文件内容
count = fwrite(lr_eval_string("{response}"),,CmesLisenceLen,CmesLicenseFiledes);
lr_output_message("Write %d Lisence!",count); //关闭文件
fclose(CmesLicenseFiledes);
} lr_think_time(); return ;
}

Soap调用:

 Action()
{ //License文件句柄
long CmesLicenseFiledes; //License文件名
char CmesLicneseFileName[] = "D:\\CmesLicneseFile_"; //License文件长度
int CmesLisenceLen; //Vuserid
char vuserid_str[]; //当前时间
char curtime_str[]; //License count
int count; lr_think_time(); //start CmesActivationt
lr_start_transaction("CmesActivationt_soap"); soap_request("StepName=SOAP Request",
"URL=http://dggtsv037-ap.huawei.com/ESDP/services/hlems/connectSdpForLicense",
"SOAPEnvelope="
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Header><sdp:identity xmlns:sdp=\"http://impl.service.license.hlems.it.huawei.com/\" xmlns:ns2=\"http://service.license.hlems.it.huawei.com/\"><password>testPassword</password><username>cmes</username></sdp:identity></soap:Header><soap:Body><ns2:createLicenseByLac xmlns:ns2=\"http://service.license.hlems.it.huawei.com/\"><taskOrder>{Param_taskOrder}</taskOrder><esn>ABCDESN{Param_esn_part2}</esn></ns2:createLicenseByLac></soap:Body></soap:Envelope>",
"SOAPAction=",
"ResponseParam=response",
"Snapshot=t1376990110.inf",
LAST); lr_xml_get_values("XML={response}",
"FastQuery=/Envelope/Body/createLicenseByLacResponse/return/resultCode",
"ValueParam=Para_resultcode",
LAST); if(atoi(lr_eval_string("{Para_resultcode}"))==)
lr_end_transaction("CmesActivationt_soap", LR_PASS);
else
lr_end_transaction("CmesActivationt_soap", LR_FAIL); //获取响应文件长度
CmesLisenceLen = strlen(lr_eval_string("{response}"));
lr_output_message("CmesLisenceLen: %d!",CmesLisenceLen); //license文件名
strcpy(vuserid_str,lr_eval_string("{vuserid_Param}"));
strcpy(curtime_str,lr_eval_string("{Param_esn_part2}")); strcat(CmesLicneseFileName,vuserid_str);
strcat(CmesLicneseFileName,"_");
strcat(CmesLicneseFileName,curtime_str); if(CmesLisenceLen>)
{
//以写方式打开文本文件
if((CmesLicenseFiledes = fopen(CmesLicneseFileName,"wt"))==NULL)
{
lr_output_message("Open File Failed!");
return -;
} //写入文件内容
count = fwrite(lr_eval_string("{response}"),,CmesLisenceLen,CmesLicenseFiledes);
lr_output_message("Write %d Lisence!",count); //关闭文件
fclose(CmesLicenseFiledes);
} lr_think_time(); return ;
}

使用JMeter进行web service性能测试

使用JMeter同样可以构建soap请求来对web service进行测试,以下以JMeter的2.10 r1533061版本为例演示。待测试的soap url为(天气预报):

http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl

1)通过soapUI工具获得待测方法的请求soap体:

2)在jmeter中建立测试计划--线程组并添加SOAP/XML-RPC Request采样器,输入wsdl url地址和上一步或得的请求soap体内容:

3)通过察看结果树监视器即可确认请求是否成功:

参考网络资料:

《SoapUI学习文档》

《SoapUI使用手册》

Web Service性能测试方案的更多相关文章

  1. Web Service 性能测试工具比较

    背景 希望选择一款Web Service性能测试工具,能真实模拟大量用户访问网站时的请求,从而获取服务器当前的请求处理能力(请求数/秒).以微信服务器为例,每个用户用独立的登录token,做各种操作, ...

  2. 性能测试工具 Web Service 性能测试工具比较

    [转自]https://testerhome.com/topics/3003 背景 希望选择一款Web Service性能测试工具,能真实模拟大量用户访问网站时的请求,从而获取服务器当前的请求处理能力 ...

  3. 关于封装Dll为Web Service技术方案的讨论

    关于web架构技术方案的讨论整理 Sonictl 2014年1月25日10:05:52 本着"三人行必有我师"的学习态度,我在近期跟x老师做了大量沟通,结合我们单位对于" ...

  4. .Net调用Java端带有WS-Security支持的Web Service各方案实战【转】

    原文:http://www.xuebuyuan.com/641669.html 到现在为止,我们AEP平台已经发布很长一段时间了,也有很多ISV接入并上线了,就语言而言,目前主要有三类:Java..N ...

  5. 【转】基于CXF Java 搭建Web Service (Restful Web Service与基于SOAP的Web Service混合方案)

    转载:http://www.cnblogs.com/windwithlife/archive/2013/03/03/2942157.html 一,选择一个合适的,Web开发环境: 我选择的是Eclip ...

  6. .NET基础拾遗(7)Web Service的开发与应用基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...

  7. Web Service

    Web Service全称XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.是:通过SOAP ...

  8. WCF、Net remoting、Web service概念及区别

    Windows通信基础(Windows Communication Foundation,WCF)是基于Windows平台下开发和部署服务的软件开发包(Software Development Kit ...

  9. [C#]動態叫用Web Service

    http://www.dotblogs.com.tw/jimmyyu/archive/2009/04/22/8139.aspx 摘要 Web Service對大家來說想必都不陌生,也大都了解Web S ...

随机推荐

  1. Mysql or Mongodb LBS快速实现方案

    http://www.wubiao.info/470 前两篇文章: 查找附近的xxx 球面距离以及Geohash方案探讨 (http://www.wubiao.info/372) 微信.陌陌 架构方案 ...

  2. jQuery信息提示工具jquery.poshytip (转载)

    转载地址:http://www.helloweba.com/view-blog-123.html Poshy Tip是一款非常友好的信息提示工具,它基于jQuery,当鼠标滑向链接时,会出现一个信息提 ...

  3. Xamarin.Android开发实践(十四)

    Xamarin.Android之ListView和Adapter 一.前言 如今不管任何应用都能够看到列表的存在,而本章我们将学习如何使用Xamarin去实现它,以及如何使用适配器和自定义适配器(本文 ...

  4. 电赛菜鸟营培训(四)——STM32F103CB之ADC转换

    一.ADC概念 实现模拟信号转换成数字信号就是这样子= = 二.代码框架 #include "stm32f10x.h" void delay(u32 kk) { while(kk- ...

  5. python reduce()函数

    reduce()函数 reduce()函数也是Python内置的一个高阶函数.reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传 ...

  6. Xamarin iOS开发中的编辑、连接、运行

    Xamarin iOS开发中的编辑.连接.运行 创建好工程后,就可以单击Xamarin Studio上方的运行按钮,如图1.37所示,对HelloWorld项目进行编辑.连接以及运行了.运行效果如图1 ...

  7. HDU2222 Keywords Search(AC自动机模板)

    AC自动机是一种多模式匹配的算法.大概过程如下: 首先所有模式串构造一棵Trie树,Trie树上的每个非根结点都代表一个从根出发到该点路径的字符串. 然后每个结点都计算出其fail指针的值,这个fai ...

  8. 模板模式(C++) 【转】

    模板模式(template)在面向对象系统的设计和开发过程中,一定会有这样的情况:对于一些功能,在不同的对象身上展示不同的作用,但是功能的框架是一样的,这就是模板(template)模式的用武之地,我 ...

  9. chrome inspect 远程调测:Chrome on Android之一 普通调试

    本文PC环境: Chrome: 版本 33.0.1750.22 dev MAC OS:OS X 10.9.1 特别注意:Chrome DevToolsl使用时会联接到appspot.com,而此网址被 ...

  10. JS正则表达式验证数字(很全)

    1.<script type="text/javascript"> 2.     function validate(){ 3.       var reg = new ...