LR12中针对WebServices协议的三种脚本开发模式
一,webservices协议简介
webservices是建立可交互操作的分布式应用程序的新平台,它通过一系列的标准和协议来保证程序之间的动态连接,
其中最基本的协议包括soap,wsdl,uddi.
1,SOAP(simple object access protocl)
SOAP是消息传递协议,它规定了web services之间如何传递消息。SOAP基于xml和xsd,xml是soap的数据编码方式。
2,WSDL(web services Description Language)
WSDL是web services的定义语言,和soap一起构成web服务的核心结构单元。wsdl协议规定了有关webservices描述的标准。
3,UDDI(Universal Description,Discovery,and Intergration)
UDDI是访问登记的标准,它建立了一个平台独立,开放的框架,通过英特网来描述服务,发现业务并整合业务服务。简单来说
UDDI用于集中存放和查找wsdl描述文件,起着目录服务器的作用。
二,我们在性能测试的工作中,难免会遇到webservices协议的接口,这里我简单介绍一下用loadrunner12来开发webservices协议脚本
的三种模式,咱们就以天气预报的网站来为例吧:
1,web_service_call模式
1)启动“virtual user Generator”,新建“web services”虚拟用户,
2)选择上方SOA Tool中的Add Service Call,如下图
3)弹出New Web Service Call对话框,选择Service-import service
4)输入要测试的网址
5)下面选择Operation,输入城市,以及设置获取返回值参数
6)点击OK后,得到下面的脚本
Action()
{
web_service_call(
"StepName=getWeatherbyCityName_104", //步骤名称
"SOAPMethod=WeatherWebService|WeatherWebServiceSoap|getWeatherbyCityName", //服务名称|soap获取哪个接口
"ResponseParam=response", //返回的参数信息
"Service=WeatherWebService", //webservices的服务
"ExpectedResponse=SoapResult", //请求返回的信息
"Snapshot=t1555545923.inf", //快照
BEGIN_ARGUMENTS, //输入参数开始
"theCityName=广州", //请求的参数与值
END_ARGUMENTS, //结束参数
BEGIN_RESULT, //返回值的开始
"getWeatherbyCityNameResult/*[1]=Param_string", //保存返回参数
END_RESULT, //返回值结束
LAST); return 0;
}
6)然后做参数化,断言
Action()
{
lr_start_transaction("获取天气预报"); web_service_call(
"StepName=getWeatherbyCityName_104", //步骤名称
"SOAPMethod=WeatherWebService|WeatherWebServiceSoap|getWeatherbyCityName", //服务名称|soap获取哪个接口
"ResponseParam=response", //返回的参数信息
"Service=WeatherWebService", //webservices的服务
"ExpectedResponse=SoapResult", //请求返回的信息
"Snapshot=t1555545923.inf", //快照
BEGIN_ARGUMENTS, //输入参数开始
"theCityName={city_name}", //请求的参数与值
END_ARGUMENTS, //结束参数
BEGIN_RESULT, //返回值的开始
"getWeatherbyCityNameResult/*[2]=Param_string", //保存返回参数
END_RESULT, //返回值结束
LAST); if(strcmp(lr_eval_string("{Param_string}"),lr_eval_string("{city_name}"))==0)
{
lr_end_transaction("获取天气预报",LR_PASS);
}
else
{
lr_end_transaction("获取天气预报",LR_FAIL);
} return 0;
}
7)最后保存,设置日志级别,然后Replay我们的脚本
2,soap_request模式
1)打开WeatherWebService网站,
2)复制上面的代码,在notepad++中新建一个文件,将代码粘贴上去,保存到D盘,然后在loadrunner12中
点击下图的import SOAP
3)在对话框中,我们输入保存的xml文件地址,输入URL,URL=http://{Host}+{POST} 参数从
上图所示取,输入对应的SOAPAction,具体如下图所示
4)点击OK,生成下面的脚本
Action()
{ soap_request("StepName=SOAP Request",
"URL=http://www.webxml.com.cn/WebServices/WeatherWebService.asmx",
"SOAPEnvelope="
"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
"<soap:Body>"
"<getWeatherbyCityName xmlns=\"http://WebXml.com.cn/\">"
"<theCityName>广州</theCityName>"
"</getWeatherbyCityName>"
"</soap:Body>"
"</soap:Envelope>",
"SOAPAction=http://WebXml.com.cn/getWeatherbyCityName",
"ResponseParam=response",
"Snapshot=t1555549382.inf",
LAST); return 0;
}
5)这里有个难题就是如何做xml断言?我们看一下下图的响应示例
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length <?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<getWeatherbyCityNameResponse xmlns="http://WebXml.com.cn/">
<getWeatherbyCityNameResult>
<string>string</string>
<string>string</string>
</getWeatherbyCityNameResult>
</getWeatherbyCityNameResponse>
</soap12:Body>
</soap12:Envelope>
这里引入lr_xml_get_values函数来获取xml的返回值
XPath query中填入city值的xpath定位的绝对路径:/Envelope/Body/getWeatherbyCityNameResponse/getWeatherbyCityNameResult/string[2]
6)最后加入事物函数,做断言
Action()
{
lr_convert_string_encoding(lr_eval_string("{city_name}"),NULL,"utf-8","city");
lr_save_string(lr_eval_string("{city}"),"cityName"); lr_start_transaction("获取天气预报"); soap_request("StepName=SOAP Request",
"URL=http://www.webxml.com.cn/WebServices/WeatherWebService.asmx",
"SOAPEnvelope="
"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
"<soap:Body>"
"<getWeatherbyCityName xmlns=\"http://WebXml.com.cn/\">"
"<theCityName>{cityName}</theCityName>"
"</getWeatherbyCityName>"
"</soap:Body>"
"</soap:Envelope>",
"SOAPAction=http://WebXml.com.cn/getWeatherbyCityName",
"ResponseParam=response",
"Snapshot=t1555549382.inf",
LAST);
lr_convert_string_encoding(lr_eval_string("{response}"),"utf-8",NULL,"msg"); lr_xml_get_values(
"XML={response}",
"Query=/Envelope/Body/getWeatherbyCityNameResponse/getWeatherbyCityNameResult/string[2]",
"ValueParam=city_code",
LAST);
lr_output_message("返回城市名称:%s",lr_eval_string("city_code")); if(strcmp(lr_eval_string("{city_code}"),lr_eval_string("{city_name}"))==0)
{
lr_end_transaction("获取天气预报", LR_PASS);
}
else
{
lr_end_transaction("获取天气预报", LR_FAIL);
} return 0;
}
7)保存后点击Replay,得到下面的结果:
3,web_custom_request模式
输入对应的URL,body里面输入SOAP的请求体,点击确定,最后生成如下的代码
Action()
{
web_custom_request("web_services",
"URL=http://www.webxml.com.cn/WebServices/WeatherWebService.asmx",
"Method=POST",
"TargetFrame=",
"Resource=1",
"Referer=",
"Mode=HTTP",
"EncType=application/soap+xml; charset=utf-8",
"Body=<?xml version=\"1.0\" encoding=\"utf-8\"?>"
"<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">"
"<soap12:Body>"
"<getWeatherbyCityName xmlns=\"http://WebXml.com.cn/\">"
"<theCityName>59287</theCityName>"
"</getWeatherbyCityName>"
"</soap12:Body>"
"</soap12:Envelope>",
LAST); return 0;
}
后面做脚本强化就行了。
LR12中针对WebServices协议的三种脚本开发模式的更多相关文章
- 性能测试学习 第八课--LR12中针对WebServices协议的三种脚本开发模式
一,webservices协议简介 webservices是建立可交互操作的分布式应用程序的新平台,它通过一系列的标准和协议来保证程序之间的动态连接, 其中最基本的协议包括soap,wsdl,uddi ...
- vue中通过cross-env插件配置三种环境(开发,测试,生产)打包,不用切换api
1. 话不多说,第一步就是安装必要的插件 npm install cross-env --save 2.修改config里面的参数,这里只展示一个test,其他类似 3.修改package.json ...
- Java中获取键盘输入值的三种方法
Java中获取键盘输入值的三种方法 Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值 ...
- 【Loadrunner】使用LR录制HTTPS协议的三种方法
使用LR录制HTTPS协议的三种方法 一.最简单的方法:浏览器配置打开浏览器,安装证书,配置完成后直接用http协议录制即可(配置完成的标识就是打开网页,不显示安全提示) 二.LR配置修改操作步骤如下 ...
- 【转载】取得系统中网卡MAC地址的三种方法
From:http://blog.csdn.net/zhangting1987/article/details/2732135 网卡地址这个概念有点混淆不清.因为实际上有两个地址,mac地址和物理地址 ...
- Tomcat中部署web应用的三种方式
Tomcat中部署web应用的三种方式(静态部署) 第一种,针对war或解压后的war,最为常用的是直接操作webapp目录,将完整的war包或者web应用直接放到webapp目录下.使用 ...
- 【mvrp多协议vlan注册协议给予三种注册方式的验证】
MVRP 多vlan注册协议给予三种注册模式的配置 一:根据项目需求搭建好拓扑图如下 二:配置: 首先对项目做理论分析,sw1,sw2,sw3所组成的直连网络中,为使不同的PC之间进行通信,按vlan ...
- MVC3中,在control里面三种Html代码输出形式
MVC3中,在control里面三种Html代码输出形式:ViewData["msg"] = "<br /> Title <br />" ...
- Android平台中实现对XML的三种解析方式
本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...
随机推荐
- 判断点在不在多边形范围内c#
C# 计算地图上某个坐标点的是否在多边形内 这个方法引用自群友的博客 https://www.xiaofengyu.com/?p=143 使用百度地图的时候,常常会用到判断一个点是否在一个多边形的 ...
- 网易im即时通讯 移动端嵌入web
近期产品需求要在wapapp 内部嵌入网易im聊天客服功能,内部需求不是很多,不过还是第一次接触,有点抓耳,,, 希望召集更多大神交流878269930 增加用户默认发送自定义消息功能:
- 2.7python简历心得(重点)
2019-2-7 20:07:20 绝地求生被盗了,...因为群邮件木马导致! 正好不要想买显卡啦!又省了好多钱!!! 努力多学技能!并且深入了解,精通自己技能!!!坚持学习!! 要学会拓展自己的技能 ...
- requestAnimationFrame移动端实现回到顶部效果
$('#backToTop').click(function(){ var dist = $(document).height() - $(window).height(); timer = requ ...
- thinkphp框架,数据动态缓存后,或数据已读取出来,想分页怎么办
//读取缓存后赋值到数组,通过array_slice函数处理,如: $blog = S('blogname'); //赋值 $count = count($blog); //条数统计 $page = ...
- 第一次c++作业小结
之前从未接触过c++,上完第一节课后也还是懵懵懂懂.当知道有作业要完成时,也是无从下手.在仔细阅读教材以及同学的帮助下,我了解了如何编写最简单的程序,也算是踏入c++的大门.希望自己的第一次作业能够符 ...
- python中关于turtle库的学习笔记
一.基础概念 1.画布:画布就是turtle为我们展开用于绘图区域, 我们可以设置它的大小和初始位置.常用的画布方法有两个:screensize()和setup(). (1)turtle.screen ...
- Flask(python)异步(ajax)返回json格式数据
主要讨论两个问题,第一个是关于json.dumps 与jsonify区别,第二个是几种异步的区别(见jQuery中的$.getJSON.$.ajax.$.get.$.post的区别). json.du ...
- Android Studio开发快速创建MVP框架插件AndroidMVP
转载:https://www.jianshu.com/p/60cd98bbc358 Android开发中,我们为了代码的解耦以及后期的维护方便,都会采用一些开发框架,常用的有MVC.MVP.MVVM. ...
- webpack 4.0 配置文件 webpack.config.js文件的放置位置
一般webpack.config.js是默认放在根目录的,不在根目录的时候需要在package.json中制定位置,我的配置文件目录是config/webpack.config.js,在package ...