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. 写SQL语句常见的问题

    1.从一个表1查询的数据作为另一个表2的部分记录插入表2中 如果是固定值,直接再列5后面列出即可INSERT INTO 表1 (列1, 列2,列3, 列4, 列5,列6) SELECT 列1, 列2, ...

  2. python:循环定义、赋值多个变量

    exec函数,可以循环定义.赋值多个变量 exec ("temp%s=1"%1)   这段代码的意思是,让exec执行temp1=1.字符串里面的%s由‘1’代替了. 我们在外面再 ...

  3. 自制操作系统Antz(15)——实现启动界面

    AntzScript

  4. 代理模式——用AOP测试业务层方法的执行时间

    代理模式 对代理模式的理解,通过http://www.runoob.com/design-pattern/proxy-pattern.html 对AOP的代理模式,参考https://www.cnbl ...

  5. puppeteer实现线上服务器任意区域截图

    整个九月份由于业务繁重以及玩心颇重,一直没有机会来写一篇博文.而且笔者于十月一日将会举办人生大事--婚礼,现在家里筹办过程中只能抽出零碎的时间来写这篇文章. 关于服务端截图,这种使用场景非常少见,大多 ...

  6. STM32时钟

    https://blog.csdn.net/qq_29350001/article/details/81409693 这是个大佬讲的 F429有5个时钟源,HSI,HSE,LSI,LSE;PLL; 对 ...

  7. topcoder srm 600 div1

    problem1 link 首先,如果一个数字的某一位是1但是$goal$的这一位不是1,那么这个数字是不用管它的.那么对于剩下的数字,只需要统计在$goal$为1的位上,这些数字对应位上也是1的数字 ...

  8. shell编程(七)之字符串处理

    字符串切片 ${var:offset:number} 取字符串的最右侧几个字符: ${var: -length} 注意: 冒号后必须有一个空白字符 #!/bin/bash var="chen ...

  9. go 笔记

    Go 语言的变量声明格式为: var 变量名 变量类型 返回类型. 匿名变量不占用命名空间,不会分配内存.匿名变量与匿名变量之间也不会因为多次声明而无法使用. func GetData() (int, ...

  10. 关于display的属性:block和inline-block以及inline的区别,float相关说明

    首先是block和inline的区别,说通俗点block就是让其形成块级元素,而且其前后都会有换行符:而inline的话就是让元素设置为内联样式(对其设置的宽高都没有什么卵用,不产生效果,但是颜色效果 ...