1、web services协议简介

web services协议是建立可交互操作的分布式应用程序的新平台,它通过一系列标准和协议来保证程序之间的动态链接,其中最基本的协议包括soap,wsdl,uddi。

2、若开发只给了一个webservices的url,未提供报文请求格式,要怎么操作?http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl

用soap ui工具可获得

1)新建soap项目,命名且输入wsdl url,点击ok即可;

2)可查看到该url下的所有接口,双击你要查看的接口名,就可以在右边窗口查看到响应的请求报文;

3、loadrunner操作

创建web services脚本,以获取天气预报服务为例;http://www.webxml.com.cn/WebServices/WeatherWebService.asmx

a、此次运用了三个模式来创建脚本请求:web_service_call、soap_request、web_custom_request

b、请求中带中文,不转码导致得到的响应非所期望的,此时需要转码,如下:

lr_convert_string_encoding("深圳",NULL,"utf-8","cityname");
          lr_save_string(lr_eval_string("{cityname}"),"cityname");

c、响应中由于有中文显示出为乱码,转码如下:

lr_convert_string_encoding(lr_eval_string("{response}"),"utf-8",NULL,"msg");

d、若响应时一个xml,可用lr_xml_get_values()

例:lr_xml_get_values("XML={response}",
        "Query=/Envelope/Body/getWeatherbyCityNameResponse/getWeatherbyCityNameResult/string[2]",
                      "ValueParam=getcityname",
                      LAST);

web_service_call模式:

1)在SOA Tools中选中Manage Services

2)导入url地址

3)直接点击ok

4)在SOA Tools里点击add service call

5)选择好服务名、接口和soap,再填写输入参数

6)填写输出参数名

点击ok后,在loadrunner里生成了web_service_call请求;

对脚本请求做修改,添加事物、if判断,脚本如下:

Action()
{
        lr_start_transaction("获取天气预报城市名");
        web_service_call( "StepName=getWeatherbyCityName_101",//步骤名称 
        "SOAPMethod=WeatherWebService|WeatherWebServiceSoap|getWeatherbyCityName",//服务名称 soap  获取那个接口 (城市天气预报) 
        "ResponseParam=response",//返回的参数信息 
        "Service=WeatherWebService",//webservice的服务 
        "ExpectedResponse=SoapResult",//请求的返回
        "Snapshot=t1555823842.inf",//快照 
        BEGIN_ARGUMENTS,//输入参数 开始 
        "theCityName={cityname}",//请求输入,城市=深圳或者其它城市名称 
        END_ARGUMENTS,//结束参数 
        BEGIN_RESULT,//返回值的开始 
        "getWeatherbyCityNameResult/*[2]=Param_string",//返回参数保存在Param_string
        END_RESULT,//返回值 的结束 
        LAST);
        if (strcmp(lr_eval_string("{Param_string}"),lr_eval_string("{cityname}"))==0)
        {
        lr_end_transaction("获取天气预报城市名", LR_PASS);
        }
        else
        {
        lr_end_transaction("获取天气预报城市名", LR_FAIL);
        }
        
    return 0;
}

soap request模式:

1)在SOA Tools下选中import SOAP;

2)选中soap的xml文件,根据例子,填写好url和soap actions;

3)点击ok,生成一个soap_request请求在脚本里;

4)修改脚本,添加if判断,脚本如下:

Action()
{
    lr_convert_string_encoding(lr_eval_string("{getcity}"),NULL,"utf-8","cityname");
    lr_save_string(lr_eval_string("{cityname}"),"cityname1");
    lr_start_transaction("获取城市天气预报");
    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>{cityname1}</theCityName>"
                "</getWeatherbyCityName>"
            "</soap:Body>"
        "</soap:Envelope>",                                        
        "SOAPAction=http://WebXml.com.cn/getWeatherbyCityName",                                        
        "ResponseParam=response",    //存储服务器 响应的输出参数名称                                     
        "Snapshot=t1555845699.inf",                                        
        LAST);

//lr_convert_string_encoding(lr_eval_string("{response}"),"utf-8",NULL,"msg");
    //lr_output_message("msg结果:%s",lr_eval_string("{msg}"));
    lr_xml_get_values("XML={response}",
        "Query=/Envelope/Body/getWeatherbyCityNameResponse/getWeatherbyCityNameResult/string[2]",
                      "ValueParam=getcityname",
                      LAST);

if (strcmp(lr_eval_string("{getcityname}"),lr_eval_string("{getcity}"))==0)
        {
        lr_end_transaction("获取城市天气预报", LR_PASS);
        lr_output_message("获取指定城市天气成功");
        }
        else
        {
        lr_end_transaction("获取城市天气预报", LR_FAIL);
        lr_output_message("获取指定城市天气失败");
        }
    
    return 0;
}

web_custom_request模式:

1)此模式较简单,与http协议post请求方法一致:

2)脚本Action()


{
    lr_convert_string_encoding(lr_eval_string("{getcity}"),NULL,"utf-8","cityname0");
    lr_save_string(lr_eval_string("{cityname0}"),"cityname1");
    web_reg_save_param_ex(
        "ParamName=recityname",
        "LB=<string>",
        "RB=</string>",
        "Ordinal=ALL",
        SEARCH_FILTERS,
        LAST);
    lr_start_transaction("获取城市天气预报");

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>{cityname1}</theCityName>"
    "</getWeatherbyCityName>"
  "</soap:Body>"
"</soap:Envelope>",
        LAST);
    lr_convert_string_encoding(lr_eval_string("{recityname_2}"),"utf-8",NULL,"recityname_2");
    lr_save_string(lr_eval_string("{recityname_2}"),"recityname");
    if (strcmp(lr_eval_string("{recityname}"),lr_eval_string("{cityname}"))==0)
    {
        lr_end_transaction("获取城市天气预报", LR_PASS);
        lr_output_message("获取城市天气预报成功");

}
    else
    {
        lr_end_transaction("获取城市天气预报", LR_PASS);
        lr_error_message("获取城市天气预报失败");
    }

return 0;
}

lr-web services协议的更多相关文章

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

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

  2. loadrunner:web services接口测试

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

  3. 分分钟带你玩转 Web Services

    当大型需求被数个公司分割开来,各公司系统相互交换数据的问题就会接踵而来. 毕竟是多家不同的公司的产品,研发开发语言.采用技术框架基本上是百花齐放. 怎样让自家系统提供的服务具有跨平台.跨语言.跨各种防 ...

  4. 【整理】动态加载Web Services

    WebClient client = new WebClient(); String url = "http://localhost/MESAPIWebService/MESAPI.asmx ...

  5. RESTful Web Services初探

    RESTful Web Services初探 作者:杜刚 近几年,RESTful Web Services渐渐开始流行,大量用于解决异构系统间的通信问题.很多网站和应用提供的API,都是基于RESTf ...

  6. 使用 Spring 3 来创建 RESTful Web Services

    来源于:https://www.ibm.com/developerworks/cn/web/wa-spring3webserv/ 在 Java™ 中,您可以使用以下几种方法来创建 RESTful We ...

  7. (转) Web 建站技术中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什么?

    Web 建站技术中,HTML.HTML5.XHTML.CSS.SQL.JavaScript.PHP.ASP.NET.Web Services 是什么? 建站有很多技术,如 HTML.HTML5.XHT ...

  8. Web Services 中XML、SOAP和WSDL的一些必要知识

    Web Services 是由xml来定义数据格式的,通过SOAP协议在各个系统平台中传输,那么接下来讨论下SOAP和WSDL的各自作用. SOAP和WSDL对Web Service.WCF进行深入了 ...

  9. 跟我一起学WCF(3)——利用Web Services开发分布式应用

    一.引言 在前面文章中分别介绍了MSMQ和.NET Remoting技术,今天继续分享.NET 平台下另一种分布式技术——Web Services 二.Web Services 详细介绍 2.1 We ...

随机推荐

  1. C++隐藏任务栏图标

    在VC编程中,有时候我们需要将我们的程序在任务栏上的显示隐藏起来,我试过几种方法,下面我介绍一下我知道的三种方法. 第一种方法是设置窗口WS_EX_TOOLWINDOW扩展样式,通过在OnInitDi ...

  2. Java SE中的Synchronized

    1 引言 在多线程并发的编程中Synchronized一直是元老级的角色,很多人会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化以后,有些情况下它并不那么重了. ...

  3. python操作MongoDB、MySQL、Postgres、Sqlite、redis实例

    总结:除了MongoDB.redis,其他三个数据库用python来操作其实是差不多的.所有例子都很简单,实际生产环境中的数据库操作远比这复杂得多,命令也比我例子中的多得多,我这里高级一点的用法就是批 ...

  4. vue 父组件调用子组件内置方法

    背景介绍:外派到泰康做项目.这个项目中有个选择组织的功能,是一个树桩结构的懒加载,于是我就element-ui的tree组件封装了一个公共的组件. 但是后来发现他们的公司组织结构不是都请求的同一个接口 ...

  5. FL Studio中的音频设置

    在FL Studio中,有一步很关键的设置需要我们详细熟悉了解,它就是音频设置,什么是音频设置呢?它就是需要我们选择音频设备驱动程序并优化设置.在了解音频设备之前,我们先来看看什么是音频设备. 我们的 ...

  6. XSS漏洞学习笔记

    XSS漏洞学习 简介 xss漏洞,英文名为cross site scripting. xss最大的特点就是能注入恶意的代码到用户浏览器的网页上,从而达到劫持用户会话的目的. 说白了就是想尽办法让你加载 ...

  7. HDU 3565 Bi-peak Number(数位DP)题解

    题意:我们定义每一位先严格递增(第一位不为0)后严格递减的数为峰(比如1231),一个数由两个峰组成称为双峰,一个双峰的价值为每一位位数和,问L~R双峰最大价值 思路:数位DP.显然这个问题和pos有 ...

  8. 20165306 Exp5 MSF基础应用

    Exp5 MSF基础应用 一.实践概述 1. 实践内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.实现: 1.1一个主动攻击实践 ms08-067+window ...

  9. mybatis中mapper接口的参数设置几种方法

    方法一:忽略parameterType,加@param("xxx")注解 在mapper接口中加上@param("xxx")注解,则在配置文件中直接用即可 Li ...

  10. 关于在html中直接引入less文件遇到的小问题

    由于想直接在html页面上调用less文件,所以直接在代码上直接引入 <script src="bower_components/less/dist/less.js"> ...