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选项)              Loadrunner11中webservice协议脚本总结 随笔 第1张 Loadrunner11中webservice协议脚本总结 随笔 第2张         2) 选择菜单栏中SOA Tool---->Mangae Services,点击对话框中的import                              Loadrunner11中webservice协议脚本总结 随笔 第3张 Loadrunner11中webservice协议脚本总结 随笔 第4张     3)在Import Service 对话框中的URL中输入wsdl地址,点击import,之后点击OK          Loadrunner11中webservice协议脚本总结 随笔 第5张 Loadrunner11中webservice协议脚本总结 随笔 第6张     4)选择菜单栏中SOA Tool----> Add Service Call              Loadrunner11中webservice协议脚本总结 随笔 第7张 Loadrunner11中webservice协议脚本总结 随笔 第8张     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)脚本执行结果如下          Loadrunner11中webservice协议脚本总结 随笔 第9张 Loadrunner11中webservice协议脚本总结 随笔 第10张   2.当我们从开发那边知道接口的接口报文信息,可以使用 soap_request()函数,接口文档地址为 http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?op=getWeatherbyCityName:      以下是 SOAP 1.2 请求和响应示例     1)先将请求xml保存为xml文件,如放置到F:\getWeatherbyCityName.xml          Loadrunner11中webservice协议脚本总结 随笔 第11张 Loadrunner11中webservice协议脚本总结 随笔 第12张     2)点击菜单栏SOA Tool----> Add Import SOAP,在输入框中输入刚保存文件地址信息          Loadrunner11中webservice协议脚本总结 随笔 第13张 Loadrunner11中webservice协议脚本总结 随笔 第14张               3)点击Manage Services,输入url,SOAP Action 以及Response Parameter值,具体如下          Loadrunner11中webservice协议脚本总结 随笔 第15张 Loadrunner11中webservice协议脚本总结 随笔 第16张     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)脚本执行结果如下(实测无问题)              Loadrunner11中webservice协议脚本总结 随笔 第17张 Loadrunner11中webservice协议脚本总结 随笔 第18张 3.可以使用 web_custom_request()函数,也可以做web service协议:         1)将鼠标放置到需要插入脚本的地方,右击,选择增加步骤,输入 web_custom_request,弹出对应设置框                  Loadrunner11中webservice协议脚本总结 随笔 第19张 Loadrunner11中webservice协议脚本总结 随笔 第20张         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                  Loadrunner11中webservice协议脚本总结 随笔 第21张Loadrunner11中webservice协议脚本总结 随笔 第22张          2)点击ok,成功项目,点击其他具体的接口,可查看到请求体信息,输入参数,即可得到返回信息(左边请求信息,右边返回信息)                  Loadrunner11中webservice协议脚本总结 随笔 第23张Loadrunner11中webservice协议脚本总结 随笔 第24张
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄