利用LoadRunner对Web Services进行测试时,通常有三种可供采用的方法:

  • 在LoadRunner的Web Services虚拟用户协议中,【Add Service Call】
  • 在LoadRunner的Web Services虚拟用户协议中,【Import SOAP】
  • 在LoadRunner的Web(HTTP/HTML)虚拟用户协议中, 利用web_custom_request函数构造WebService请求

本文将对第一种方法,即【Add Service Call】进行详细讲解。

Web Services是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Services能与其他兼容的组件进行互操作。

而实现互操作的基础,在于Web Services服务器对外提供了可供调用的函数接口API。使用者通过Web Services服务URL地址(确切地说是WSDL,Web services 描述语言)找到具体函数,然后就像调用本地函数一样,根据函数的API传入合法参数,经由Web Services服务器运算得到结果后返回给使用者。

在LoadRunner中,Web Services服务调用函数为web_service_call。下面将详细讲解该函数的使用步骤。

1. 导入Web Services的描述信息WSDL

要使LoadRunner能调用Web Services的接口函数,首先需要在LoadRunner中导入Web Services对应的WSDL文件。

WSDL 是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言。该文档对具体的 Web service 进行了描述,规定了服务的位置,以及此服务所提供的操作(或方法,或服务调用接口API)。

导入WSDL通常使用两种方式:

  • 通过WSDL的URL地址导入
  • 直接导入本地WSDL文件

为了方便本文演示,特挑选了互联网上常用的天气服务Web Service作为案例。

通过WSDL的URL地址进行导入时,操作方式如下图所示。

需要说明的是,填写的URL地址末尾需包含“?WSDL”。换句话说,只有在以“?WSDL”结尾时才对应到WSDL文件的路径。大家可以在浏览器中尝试分别对两个地址进行访问,查看其中的区别。

而如果选择直接导入本地WSDL文件的方式,则需要先将Web Services对应的WSDL文件下载至本地。下载时,只需将Web Services的地址末尾加上“?WSDL”后在IE浏览器中进行访问,然后对网页进行保存时将文件另存为".wsdl"的文件即可。如下图所示。

获取到WSDL文件以后,便可在LoadRunner中进行导入,操作方式如下图所示。

两种导入方式效果都是一样的,采用任意一种方式都能将Web Service的描述信息导入至LoadRunner供其调用。

当然,两种导入方式也存在一定的差异。

  • 采用Import URL的方式可以方便本地获取到最新的Web Service描述,当远程服务器端的Web Service发生变动以后,本地端可直接对WSDL进行更新,而不需对WSDL进行重新导入。在LoadRunner中,甚至可以通过设置使LoadRunner每次打开脚本的时候自动更新WSDL,如下图所示。

  • 采用Import File方式的优点在于,可以对下载到本地的WSDL文件进行手工编辑后再使用;而缺点则是无法获取到最新的Web Service的描述信息,若要更新则需重新下载WSDL文件并重新导入。

明白了两种导入方式的特点之后,大家可以根据实际需求进行选择。

2. 创建调用函数web_service_call

在LoadRunner中导入了Web Services的描述信息后,便可以对Web Service接口函数进行调用。

LoadRunner提供的调用函数为web_service_call。调用该函数时,可以根据其说明文档直接在Editor里面进行编辑,不过更简单且更不易出错的方式还是通过【Add Service Call】进行可视化编辑。帮助文档里对此也有进行说明。

This is a high-level function that lets you modify all the SOAP arguments intuitively. Because editing the arguments is likely to be error-prone, it is recommended that the function be modified in the tree view of Service Test rather than in the script editor.

点击【Add Service Call】后进入Web Service Call的可视化编辑界面,如下图所示。

在Web Service Call的可视化界面中,选择所需调用的Service、Port Name和Operation即可。在上图Operation列表中,可以看到存在5个可供调用的方法,对比下图可知,这和网页上展示的接口函数是一致的。

接下来,我们采用接口函数getWeatherbyCityName进行演示。

在Web Service Call的可视化界面中可以看出,接口函数getWeatherbyCityName只有一个输入参数,即theCityName。而该接口函数则是通过城市名来获取指定城市的天气预报信息。

因此,使用getWeatherbyCityName函数接口时我们需对其传入参数theCityName。具体操作时,选中Input Arguments中的参数名theCityName,勾选其右侧的“Include argument in call”,在Value中输入城市名称即可,此处我们输入的是“广州”,如下图所示。

若需要调用getWeatherbyCityName函数的返回结果,则需要事先将其返回结果保存至参数里面。具体操作时,选中Output Arguments中的参数名getWeatherbyCityNameResult[1],勾选其右侧的“Save returned value in parameter”,在Parameter中输入参数名即可。如下图所示。

完成对Input Arguments和Output Arguments的设置后,点击【OK】按钮,便可看见脚本中新增了一个web_service_call函数,如下图所示。

通过上图可知,之前我们在可视化界面的所有设置均已转换至web_service_call函数。

3. 回放脚本,查看结果

在“Run-time Settings”中打开日志“Extended log”,勾选“Parameter substitution”和“Data returned by server”。运行脚本后,查看“Replay Log”,如下图所示。

详细结果如下所示。

theWeatherInfo = <getWeatherbyCityNameResult XmlType="DynamicParameter"><string>广东</string><string>广州</string><string>59287</string><string>59287.jpg</string><string>2013-8-2 21:50:12</string><string>24℃/30℃</string><string>8月3日 大雨转中雨</string><string>无持续风向微风</string><string>9.gif</string><string>8.gif</string><string>今日天气实况:气温:26℃;风向/风力:东风 2级;湿度:96%;空气质量:优;紫外线强度:弱</string><string>穿衣指数:热,适合穿T恤、短薄外套等夏季服装。\n过敏指数:极不易发,无需担心过敏,可放心外出,享受生活。\n运动指数:较不宜,有较强降水,请在室内进行休闲运动。\n洗车指数:不宜,今天有雨,雨水和泥水会弄脏爱车。\n晾晒指数:不宜,有较强降水会淋湿衣物,不适宜晾晒。\n旅游指数:较不宜,有强降雨,建议您最好还是在室内活动。\n路况指数:湿滑,路面湿滑,车辆易打滑,减慢车速。\n舒适度指数:较不舒适,白天有雨,气温较高,闷热。\n空气污染指数:优,气象条件非常有利于空气污染物扩散。\n紫外线指数:弱,辐射较弱,涂擦SPF12-15、PA+护肤品。</string><string>25℃/32℃</string><string>8月4日 阵雨转晴</string><string>无持续风向微风</string><string>3.gif</string><string>0.gif</string><string>25℃/34℃</string><string>8月5日 晴</string><string>无持续风向微风</string><string>0.gif</string><string>0.gif</string><string>广州是广东省的省会,是中国南方最大的海滨城市,广州位于东经113。17`,北纬23。8`,地处中国大陆南部,广东省南部,珠江三角洲北缘。广州临南海,邻近香港特别行政区,是中国通往世界的南大门,广州属丘陵地带。中国的第三大河----珠江从广州市中心穿流而过。广州是一座历史文化名城。相传在远古时候,曾有五位仙人,身穿五色彩服、骑着嘴衔稻穗的五色仙羊降临此地,把稻穗赠给百姓,祝愿这里永无饥荒。从此,广州便有“羊城”、“穗城”的美称,“五羊”也成为广州的象征。广州既是中国也是世界名城,又是一座古城,因历史上有五羊仙子降临献稻穗的故事,广州又称为“羊城”和“穗城”,简称“穗”;广州一年四季如春、繁花似锦,除夕迎春花市闻名海内外,故又有“花城”的美誉。广州地处低纬,属南亚热带季风气候区。地表接受太阳辐射量较多,同时受季风的影响,夏季海洋暖气流形成高温、高湿、多雨的气候;冬季北方大陆冷风形成低温、干燥、少雨的气候。年平均气温为21.4-21.9度,年降雨量平均为1623.6-1899.8mm,北部多于南部。1982年,广州被国务院选定为全国首批历史文化名城之一,是我国重点旅游城市。1999年1月,广州被评为优秀旅游城市。景观:白云山、莲花山、南海神庙、佛山祖庙、广州动物园等。</string></getWeatherbyCityNameResult>

通过IE浏览器访问该Web Service,查询“广州”时得到结果如下图所示。

通过对比LoadRunner的Replay Log和浏览器的返回页面可知,LoadRunner对Web Service进行了正确的调用。

4. 完善脚本

脚本虽已调试成功,可以得到正确的结果。但若要进行性能测试,我们还需对脚本进行参数化,如下图所示。

或者,如果我们是只想利用返回报文的一小部分,而不是全部。在这种情况下,我们可以指定将某部分保存至参数,以便后续的使用。

例如,我们只想获得某个城市当天的最低温度和最高温度。通过返回报文可知,该字段是输出结果中的第6个字段。那么,我们便可以将该字段保存至一个参数,这里指定为Lowest_Highest_Temperature,如下图所示。

运行结果如下图所示。

当然,此处只是列举了一个简单的例子。通过对web_service_call函数的灵活应用,可以实现更多复杂、强大的功能。

使用LoadRunner对Web Services进行调用--Add Service Call的更多相关文章

  1. 使用LoadRunner对Web Services进行调用--Import Soap

    利用LoadRunner对Web Services进行测试时,通常有三种可供采用的方法: 在LoadRunner的Web Services虚拟用户协议中,[Add Service Call] 在Loa ...

  2. Java与.NET 的Web Services相互调用

    一:简介 本文介绍了Java与.NET开发的Web Services相互调用的技术.本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如何用 ...

  3. loadrunner:web services接口测试

    本文以实例讲解web services接口测试操作,内容包括:脚本生成.参数化和接口与接口间的取值关联操作. 网站"http://www.webxml.com.cn/zh_cn/web_se ...

  4. Web Services的相关名词解释:WSDL与SOAP

    在对Web Services进行性能测试时,接触到最多的两个名词就是WSDL和SOAP.利用LoadRunner对Web Services进行调用的时候,也存在两种常用方法,即基于WSDL的[Add ...

  5. 【JAVA错误笔记】 - Unable add facets project AnnotationWebService CXF 2-x Web Services

    错误描述: 创建webservice接口服务时候提示: Unable add facets project AnnotationWebService CXF 2-x Web Services Unab ...

  6. Java Web services: WS-Security with Metro--referenc

    As you know from "Introducing Metro," the reference implementations of the JAXB 2.x data-b ...

  7. asp调用.net xml web services

    来源:http://www.cnblogs.com/notus/archive/2006/08/10/473000.html#2662503 (是不是实际上可以用这个办法调用任何xml web ser ...

  8. BizTalk调用WS-Security的web services

    最近做个项目,biztalk跟OTM(Oracle Transportation Management)系统做对接,双方通过web services通讯,这部分是BizTalk调用OTM的web se ...

  9. PHP 调用asp.net Web Services服务问题总结

    原文:PHP 调用asp.net Web Services服务问题总结 PHP是弱类型语言,转换非常不方便. < ?php //soap 客户端 $client=new SoapClient(' ...

随机推荐

  1. (转)META http-equiv="refresh" 实现网页自动跳转

    ***.html自动跳转文件代码如下: <HTML> <HEAD><META http-equiv="Refresh" content="5 ...

  2. AbstractMethodError using UriBuilder on JAX-RS

    问题描述:Eclipse调试JAX-RS服务没问题,但是在发布服务端时候抛出异常 java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder. ...

  3. 基于url拦截实现权限控制

    用户表,角色表,用户角色表,权限表,权限角色表 1.用户通过认证(可以是验证用户名,密码等) 2.登陆拦截器,为公开的url放行, 登陆时,将用户信息放入session中,获得用户的权限集合,将集合放 ...

  4. [Twisted] 部署Twisted

    Twisted提供了基础设施,来实现可重用.可配置的方式来部署. 1.Service Twisted使用Service来实现了许多协议,如TCP,FTP,HTTP,SSH等. 实现的IService接 ...

  5. jfreechart环形图完美实现

    邮件发送由于不支持js,项目只能在后台生成环形图,用jfreechart完全可以实现,即:RingPlot. 这就拿jfreechart生成的最终效果,依赖jar包jfreechart,如果有任何细节 ...

  6. ACM Sdut 2158 Hello World!(数学题,排序) (山东省ACM第一届省赛C题)

    题目描述 We know thatIvan gives Saya three problems to solve (Problem F), and this is the firstproblem. ...

  7. jQuery仿苏宁易购导航

    最近看了些网上的各类导航网站源码,自己学习制作了一个仿苏宁易购的导航栏 jQuery部分代码 $(function(){ $(".CategoryTree>ul>li" ...

  8. [lua]尝试一种Case语法糖

    function CaseT(arg) function proxy(caller) caller.yield(r) end -- proxy return function (cond) if (c ...

  9. mysql基本介绍和优化技巧

    一. mysql框架和基本介绍 1. 框架图 更详细: 2. 存储引擎 MYISAM与INNODB对比: MYISAM:mysql5.1及以前版本的默认存储引擎.支持全文检索,压缩,表级锁等,但不支持 ...

  10. 搬瓦工vps搭建vpn

    一.下载centos6一键安装包 wget --no-check-certificate https://raw.githubusercontent.com/teddysun/across/maste ...