Loadrunner11中webservice协议脚本总结
Loadrunner11中webservice协议脚本总结
简介 webservices协议是建立可交互操作的分布式应用程序的新平台,它通过一系列的标准和协议来保证程序之间的动态连接,其中最基本的协议包括soap,wsdl,uddi 1)SOAP(simple object access protocl) SOAP是消息传递协议,它规定了web services之间如何传递消息。SOAP基于xml和xsd,xml是soap的数据编码方式,简单说soap规定了: a.传递信息的格式为xml,用于描述信息的内容和处理方法; b.远程对象方法调用的格式; c.异常处理以及其他的相关信息; 2)WSDL(web services Description Language) WSDL是web services的定义语言,和soap一起构成web服务的核心结构单元。wsdl协议规定了有关webservices描述的标准 3)UDDI(Universal Description,Discovery,and Intergration) UDDI是访问登记的标准,它建立了一个平台独立,开放的框架,通过英特网来描述服务,发现业务并整合业务服务。简单来说 UDDI用于集中存放和查找wsdl描述文件,起着目录服务器的作用
脚本开发: 简单介绍使用Loadrunner11来开发webservices协议的脚本三种方法,以天气预报接口为例 1.当我们从开发那边知道接口的wsdl地址,可以使用
web_service_call()函数,具体操作如下:(http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl) 1)打开LR,新建web service协议脚本(使用该协议,菜单栏就会出现SOA Tool选项)
2) 选择菜单栏中SOA Tool---->Mangae Services,点击对话框中的import
3)在Import Service 对话框中的URL中输入wsdl地址,点击import,之后点击OK
4)选择菜单栏中SOA Tool----> Add Service Call
5)输入具体值之后点击OK按钮,等到如下脚本 web_service_call( "StepName=getWeatherbyCityName_101", //步骤名称 "SOAPMethod=WeatherWebService|WeatherWebServiceSoap|getWeatherbyCityName",//服务名称,soap,获取的接口 "ResponseParam=response",//返回参数信息 "Service=WeatherWebService", //webservice的服务 "ExpectedResponse=SoapResult", //请求的返回 "Snapshot=t1555551364.inf", //快照 BEGIN_ARGUMENTS, //开始输入 "theCityName=南京", //输入的参数值 END_ARGUMENTS, //结束输入 BEGIN_RESULT, //开始输出 "getWeatherbyCityNameResult=Param_getWeatherbyCityNameResult", "getWeatherbyCityNameResult/*[2]=Param_cityname",//返回的城市 END_RESULT,//结束输出 LAST); 6)加入事务,参数化与if,对脚本进行判断(加了一个今日天气实况信息,发现
该函数可以输出多个值) lr_start_transaction("getWeatherbyCityName"); web_service_call( "StepName=getWeatherbyCityName_101", //步骤名称 "SOAPMethod=WeatherWebService|WeatherWebServiceSoap|getWeatherbyCityName",//服务名称,soap,获取的接口 "ResponseParam=response",//返回参数信息 "Service=WeatherWebService", //webservice的服务 "ExpectedResponse=SoapResult", //请求的返回 "Snapshot=t1555551364.inf", //快照 BEGIN_ARGUMENTS, //开始输入 "theCityName={cityname}", //输入的参数值 END_ARGUMENTS, //结束输入 BEGIN_RESULT, //开始输出 "getWeatherbyCityNameResult=Param_getWeatherbyCityNameResult", "getWeatherbyCityNameResult/*[2]=Param_cityname",//返回的城市 "getWeatherbyCityNameResult/*[11]=TodayWeather", //返回的对应城市信息 END_RESULT,//结束输出 LAST); if(strcmp(lr_eval_string("{Param_cityname}"),lr_eval_string("{cityname}"))==0) { lr_end_transaction("getWeatherbyCityName", LR_PASS); lr_output_message("成功查询出%s的今日天气情况:%s",lr_eval_string("{Param_cityname}"),lr_eval_string("{TodayWeather}")); } else { lr_end_transaction("getWeatherbyCityName", LR_FAIL); lr_output_message("返回的城市信息为:%s",lr_eval_string("{Param_string}")); } 7)脚本执行结果如下
2.当我们从开发那边知道接口的接口报文信息,可以使用
soap_request()函数,接口文档地址为
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?op=getWeatherbyCityName: 以下是 SOAP 1.2 请求和响应示例 1)先将请求xml保存为xml文件,如放置到F:\getWeatherbyCityName.xml
2)点击菜单栏SOA Tool----> Add Import SOAP,在输入框中输入刚保存文件地址信息
3)点击Manage Services,输入url,SOAP Action 以及Response Parameter值,具体如下
4)点击OK按钮等到的脚本如下 soap_request("StepName=SOAP Request", //步骤名称 "URL=
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx", //url地址 "SOAPEnvelope=" //发送到服务器的XML "<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=t1555556002.inf", LAST); 5)加入事务,参数化与if,对脚本进行判断(
注意输入参数为中文时,需要将
NULL编码转换为utf-8,输出内容为乱码是需要将utf-8编码转换为NULL,使用lr_convert_string_encoding函数) lr_convert_string_encoding(lr_eval_string("{cityname}"),NULL,"utf-8","city"); lr_save_string(lr_eval_string("{city}"),"city_name"); //添加事务 lr_start_transaction("getcityname"); soap_request("StepName=SOAP Request", //步骤名称 "URL=
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx", //url地址 "SOAPEnvelope=" //发送到服务器的XML "<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>{city_name}</theCityName>" "</getWeatherbyCityName>" "</soap:Body>" "</soap:Envelope>", "SOAPAction=
http://WebXml.com.cn/getWeatherbyCityName", "ResponseParam=response", //存储服务器响应返回参数 "Snapshot=t1555556002.inf", LAST); //返回的信息乱码转译,并高亮打印 lr_convert_string_encoding(lr_eval_string("{response}"),"utf-8",NULL,"msg"); lr_error_message(lr_eval_string("{msg}")); //返回值为xml文件格式,该函数自动将返回值转变为中文的了,不需要使用lr_convert_string_encoding,本例获取城市信息 lr_xml_get_values( "XML={response}",//查看的xml "Query=/Envelope/Body/getWeatherbyCityNameResponse/getWeatherbyCityNameResult/string[2]", //查看返回内容路径在,指定元素或者属性 "ValueParam=getcityname", //存储返回的值 LAST);
//本例获取城市天气信息,与脚本判断无关,实际脚本中可以不需要,这边是强化记忆来着 lr_xml_get_values( "XML={response}",//查看的xml "Query=/Envelope/Body/getWeatherbyCityNameResponse/getWeatherbyCityNameResult/string[11]", //查看返回内容路径在,指定元素或者属性 "ValueParam=getWeatherby", //存储返回的值 LAST); //断言判断 if(strcmp(lr_eval_string("{getcityname}"),lr_eval_string("{cityname}"))==0) { lr_end_transaction("getcityname", LR_PASS); lr_output_message("成功查询出%s的今日天气情况:%s",lr_eval_string("{cityname}"),lr_eval_string("{getWeatherby}")); } else { lr_end_transaction("getcityname", LR_FAIL); lr_output_message("查询失败,输入的城市与返回的城市信息不一致,输入城市信息为%s,返回城市信息为%s",lr_eval_string("{cityname}"),lr_eval_string("{getcityname}")); } 6)脚本执行结果如下(实测无问题)
3.可以使用
web_custom_request()函数,也可以做web service协议: 1)将鼠标放置到需要插入脚本的地方,右击,选择增加步骤,输入 web_custom_request,弹出对应设置框
2)点击OK得到的脚本如下 web_custom_request("web_custom_request", "URL=
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx", "Method=POST", "TargetFrame=", "Resource=0", "Referer=", "Mode=HTTP", "EncType=text/xml; charset=utf-8", "Body=<?xml version="1.0" encoding="utf-8"?> <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>string</theCityName> </getWeatherbyCityName> </soap:Body> </soap:Envelope>", LAST); 3)需要将body中的“”进行转译,且Body都需要加上引号,优化之后如下 web_custom_request("web_custom_request", "URL=
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx", "Method=POST", "TargetFrame=", "Resource=0", "Referer=", "Mode=HTTP", "EncType=text/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>string</theCityName>" "</getWeatherbyCityName>" "</soap12:Body>" "</soap12:Envelope>", LAST); 4)加入事务,加关联,if,对脚本进行判断(注意使用lr_convert_string_encoding函数转码) lr_convert_string_encoding(lr_eval_string("{cityname}"),NULL,"utf-8","city"); lr_save_string(lr_eval_string("{city}"),"city_name"); web_reg_save_param_ex( "ParamName=weather_city", "LB=<string>", "RB=</string>", "Ordinal=2", SEARCH_FILTERS, LAST); lr_convert_string_encoding(lr_eval_string("{weather_city}"),NULL,"utf-8","weather_city1"); lr_error_message(lr_eval_string("{weather_city1}")); lr_start_transaction("weather"); web_custom_request("web_custom_request", "URL=
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx", "Method=POST", "TargetFrame=", "Resource=0", "Referer=", "Mode=HTTP", "EncType=text/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>{city_name}</theCityName>" "</getWeatherbyCityName>" "</soap12:Body>" "</soap12:Envelope>", LAST); if(strcmp(lr_eval_string("{weather_city1}"),lr_eval_string("{cityname}"))==0) { lr_end_transaction("weather", LR_PASS); } else { lr_end_transaction("weather", LR_FAIL); }
SOAP工具的简单实用
当我们只知道wsdl地址时,我们可以使用该工具知道具体的请求体,具体如下
1)打开工具,点击页面上的SOAP

2)点击ok,成功项目,点击其他具体的接口,可查看到请求体信息,输入参数,即可得到返回信息(左边请求信息,右边返回信息)

![Loadrunner11中webservice协议脚本总结 随笔 第24张 Loadrunner11中webservice协议脚本总结 随笔 第24张]()
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄













更多精彩