使用LoadRunner对Web Services进行调用--Add Service Call
利用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的更多相关文章
- 使用LoadRunner对Web Services进行调用--Import Soap
利用LoadRunner对Web Services进行测试时,通常有三种可供采用的方法: 在LoadRunner的Web Services虚拟用户协议中,[Add Service Call] 在Loa ...
- Java与.NET 的Web Services相互调用
一:简介 本文介绍了Java与.NET开发的Web Services相互调用的技术.本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如何用 ...
- loadrunner:web services接口测试
本文以实例讲解web services接口测试操作,内容包括:脚本生成.参数化和接口与接口间的取值关联操作. 网站"http://www.webxml.com.cn/zh_cn/web_se ...
- Web Services的相关名词解释:WSDL与SOAP
在对Web Services进行性能测试时,接触到最多的两个名词就是WSDL和SOAP.利用LoadRunner对Web Services进行调用的时候,也存在两种常用方法,即基于WSDL的[Add ...
- 【JAVA错误笔记】 - Unable add facets project AnnotationWebService CXF 2-x Web Services
错误描述: 创建webservice接口服务时候提示: Unable add facets project AnnotationWebService CXF 2-x Web Services Unab ...
- Java Web services: WS-Security with Metro--referenc
As you know from "Introducing Metro," the reference implementations of the JAXB 2.x data-b ...
- asp调用.net xml web services
来源:http://www.cnblogs.com/notus/archive/2006/08/10/473000.html#2662503 (是不是实际上可以用这个办法调用任何xml web ser ...
- BizTalk调用WS-Security的web services
最近做个项目,biztalk跟OTM(Oracle Transportation Management)系统做对接,双方通过web services通讯,这部分是BizTalk调用OTM的web se ...
- PHP 调用asp.net Web Services服务问题总结
原文:PHP 调用asp.net Web Services服务问题总结 PHP是弱类型语言,转换非常不方便. < ?php //soap 客户端 $client=new SoapClient(' ...
随机推荐
- 绝对定位的DIV绝对居中显示
绝对居中:即在客户端上任何分辨率下纵横方向均居中 紫色的正方形为绝对定位的div position:absolute; top: 50%; left: 50%; 只能把div定位在以红色圈为起点的位置 ...
- Jquery 限制文本框输入字数【转】
<script type="text/javascript" src="js/jquery.min.js" ></script> < ...
- 经典关于多态的demo
class Foo { public int a; public Foo() { a = 3; } public int addFive() { a += 5; return a; } public ...
- 求职,找工作,平台大PK
国内 猎聘网:www.lietou.com 拉钩网:Lagou.com 智联招聘:www.zhaopin.com 前程无忧:http://www.51job.com/ 中华英才网:chinahr.co ...
- [上传下载] C# ImageUpload图片上传类教程与源码下载 (转载)
点击下载 ImageUpload.zip 功能如下图片1.设置属性后上传图片,用法如下 /// <summary> /// 图片上传类 /// </summary> //--- ...
- This 在 C# 中的含义
这涉及到c# 中的oo思想,其实不管在c# 或其他编码语言中,很多抽象的概念当你项目经验多了,自然而然就会对这些东西理解的更透彻点,更加具象. 这里有一些面向对象编程的概念需要说明:类(Class)的 ...
- 判断用户输入是否为int整型方法之一!
; string vv = this.textBox2.Text; if (int.TryParse(vv, out age)) { age = int.Parse(this.textBox2.Tex ...
- React学习笔记(三) 组件传值
组件嵌套后,父组件怎么向子组件发送数据呢? 答案是: this.props <script type="text/babel"> var MyFirst = React ...
- mysql 刘道成视频教程 第3课
第3课: 1.mysql中条件使用关键字where: 2.查 select name,content from msg ; select name,content 控制列 where id>2 ...
- js快速排序法
var quickSort = function(arr) { if (arr.length <= 1) { return arr; } var pivotIndex = Math.floor( ...