• JMeter测试Web服务


    Web服务简介

    什么是Web服务

    【Web服务】即Web Service。Web服务是一种服务导向架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作。根据W3C的定义,Web服务(Web service)应当是一个软件系统,用以支持网络间不同机器的互动操作。网络服务通常是许多应用程序接口(API)所组成的,它们透过网络,例如国际互联网(Internet)的远程服务器端,执行客户所提交服务的请求。

    Web服务三要素

     

    SOAP

    * SOAP构建模块

     

    * SOAP消息组成

    1. <?xml version="1.0"?>
    2. <soap:Envelope
    3. xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
    4. soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
    5. <soap:Header>
    6. ...
    7. </soap:Header>
    8. <soap:Body>
    9. ...
    10. <soap:Fault>
    11. ...
    12. </soap:Fault>
    13. ...
    14. </soap:Body>
    15. </soap:Envelope>

    * SOAP消息例子

    1. 股票查询服务,根据股票名称查询股票价格,返回股票价格。
    2. 1.SOAP消息请求:
    3. POST /StockQuote HTTP/1.1
    4. Host: example.com
    5. Content-Type: text/xml; charset="utf-8"
    6. Content-Length: nnnn
    7. SOAPAction: "http://example.com/GetLastTradePrice"
    8. <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    9. SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    10. <SOAP-ENV:Body>
    11. <m:TradePriceRequest xmlns:m="http://example.com/stockquote.xsd">
    12. <tickerSymbol>MSFT</tickerSymbol >
    13. </m:TradePriceRequest>
    14. </SOAP-ENV:Body>
    15. </SOAP-ENV:Envelope>
    16. 2.SOAP消息响应:
    17. HTTP/1.1 200 OK
    18. Content-Type: text/xml; charset="utf-8"
    19. Content-Length: nnnn
    20. <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    21. SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
    22. <SOAP-ENV:Body>
    23. <m:TradePriceResult xmlns:m=" http://example.com/stockquote.xsd ">
    24. <price>74.5</price>
    25. </m:TradePriceResult >
    26. </SOAP-ENV:Body>
    27. </SOAP-ENV:Envelope>

    WSDL

    * WSDL文档结构

    WSDL元素结构示意图如下图所示:

     

    1. 其中,
    2. 1.Types是一个数据类型定义的容器,包含了所有在消息定义中需要的XML元素的类型定义。
    3. 2.Message具体定义了在通信中使用的消息的数据结构,Message元素包含了一组Part元素,
    4. 每个Part元素都是最终消息的一个组成部分,每个Part都会引用一个DataType来表示它的结构。
    5. Part元素不支持嵌套。
    6. 3.PortType具体定义了一种服务访问入口的类型,何谓访问入口的类型呢?
    7. 就是传入/传出消息的模式及其格式。一个PortType可以包含若干个Operation,
    8. 而一个Operation则是指访问入口支持的一种类型的调用。
    9. 以上三种结构描述了调用Web服务的抽象定义,这三部分与具体Web服务部署细节无关,是可复用的描述(每个层次都可以复用)。
    10. 4.Service描述的是一个具体的被部署的Web服务所提供的所有访问入口的部署细节,
    11. 一个Service往往会包含多个服务访问入口,而每个访问入口都会使用一个Port元素来描述。
    12. 5.Port描述的是一个服务访问入口的部署细节,包括通过哪个Web地址(URL)来访问,应当使用怎样的消息调用模式来访问等。
    13. 其中消息调用模式则是使用Binding结构来表示。
    14. 6.Binding结构定义了某个PortType与某一种具体的网络传输协议或消息传输协议相绑定,
    15. 从这一层次开始,描述的内容就与具体服务的部署相关了。比如可以将PortType与SOAP/HTTP绑定,
    16. 也可以将PortType与MIME/SMTP相绑定等。

    * WSDL端口

    元素是最重要的WSDL元素。它可描述一个Web service可被执行的操作以及相关的消息。可以把元素比作传统编程语言中的一个函数库(或一个模块,或一个类)。端口包含如下类型:

     

    1. 1.一个One-way操作的例子:
    2. <message name="newTermValues">
    3. <part name="term" type="xs:string"/>
    4. <part name="value" type="xs:string"/>
    5. </message>
    6. <portType name="glossaryTerms">
    7. <operation name="setTerm">
    8. <input name="newTerm" message="newTermValues"/>
    9. </operation>
    10. </portType >
    11. 在这个例子中,端口"glossaryTerms"定义了一个名为"setTerm"的one-way操作。
    12. 这个"setTerm"操作可接受新术语表项目消息的输入,这些消息使用一条名为"newTermValues"的消息,
    13. 此消息带有输入参数"term""value"。不过,没有为这个操作定义任何输出。
    14. 2.一个Request-response操作的例子:
    15. <message name="getTermRequest">
    16. <part name="term" type="xs:string"/>
    17. </message>
    18. <message name="getTermResponse">
    19. <part name="value" type="xs:string"/>
    20. </message>
    21. <portType name="glossaryTerms">
    22. <operation name="getTerm">
    23. <input message="getTermRequest"/>
    24. <output message="getTermResponse"/>
    25. </operation>
    26. </portType>
    27. 在这个例子中,端口“glossaryTerms”定义了一个名为“getTerm”的request-response操作。
    28. “getTerm”操作会请求一个名为“getTermRequest”的输入消息,
    29. 此消息带有一个名为“term”的参数,并将返回一个名为 “getTermResponse”的输出消息,
    30. 此消息带有一个名为“value”的参数。

    * WSDL绑定

    1. 一个绑定的例子:
    2. <message name="getTermRequest">
    3. <part name="term" type="xs:string"/>
    4. </message>
    5. <message name="getTermResponse">
    6. <part name="value" type="xs:string"/>
    7. </message>
    8. <portType name="glossaryTerms">
    9. <operation name="getTerm">
    10. <input message="getTermRequest"/>
    11. <output message="getTermResponse"/>
    12. </operation>
    13. </portType>
    14. <binding type="glossaryTerms" name="b1">
    15. <soap:binding style="document"
    16. transport="http://schemas.xmlsoap.org/soap/http" />
    17. <operation>
    18. <soap:operation soapAction="http://example.com/getTerm"/>
    19. <input><soap:body use="literal"/></input>
    20. <output><soap:body use="literal"/></output>
    21. </operation>
    22. </binding>
    23. binding元素有“name”和“type”两个属性。“name”属性定义binding的名称,
    24. 而“type”属性指向binding的端口,在这个例子中是“glossaryTerms”端口。
    25. soap:binding元素有“style”和“transport”两个属性。
    26. “style”属性可取值为“rpc”或“document”。在这个例子中我们使用“document”。
    27. “transport”属性定义SOAP使用的协议,在这个例子中使用HTTP。
    28. operation元素定义了每个端口提供的操作符。对于每个操作,相应的SOAP行为都需要被定义。
    29. 同时必须知道如何对输入和输出进行编码。在这个例子中使用了“literal”。

    应用案例

    案例说明

    这里以天气预报服务为例。

    1. 400个国内外主要城市天气预报Web服务访问地址:
    2. Endpoint:http://ws.webxml.com.cn/WebServices/WeatherWebService.asmx
    3. Disco:http://ws.webxml.com.cn/WebServices/WeatherWebService.asmx?disco
    4. WSDL:http://ws.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl
    5. 操作:getSupportCity
    6. 功能:查询本天气预报Web Services支持的国内外城市或地区信息
    7. 请求方式:HTTP/POST
    8. 接口地址:http://ws.webxml.com.cn/WebServices/WebServices/WeatherWebService.asmx
    9. 输入参数:byProvinceName = 指定的洲或国内的省份,若为ALL或空则表示返回全部城市
    10. 返回数据:一个一维字符串数组String(),结构为:城市名称(城市代码)

    操作步骤
    1. 1.添加线程组;
    2. 2.添加HTTP请求取样器并配置;
    3. 3.在取样器节点下添加“HTTP Header Manager”并配置;
    4. 4.在取样器节点下添加查看结果树;
    5. 5.执行看结果。

    * 使用SOAP1.1时配置测试

    1. HTTP请求配置:
    2. 1.Server Name or IP:ws.webxml.com.cn
    3. 2.Method:POST
    4. 3.Path:/WebServices/WebServices/WeatherWebService.asmx
    5. 4.Content encoding:utf-8
    6. 5.Body Data
    7. <?xml version="1.0" encoding="utf-8"?>
    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/">
    9. <soap:Body>
    10. <getSupportCity xmlns="http://WebXml.com.cn/">
    11. <byProvinceName>湖南</byProvinceName>
    12. </getSupportCity>
    13. </soap:Body>
    14. </soap:Envelope>
    15. 其中"湖南"为传入的参数值(byProvinceName为参数名)

     

    1. POST请求传递数据为SOAP消息,格式为XML。需要将SOAP消息放入Body Data中发送给服务器,
    2. 并且需要告诉服务器对应的Content-Type。
    3. 故需要添加一个“HTTP Header Manager”配置元件,在其中添加两个首部“Content-Type”与“SOAPAction”,
    4. 其中“SOAPAction”用来标识SOAP HTTP请求的目的地,其值是个URI地址。
    5. 在SOAP1.1中这个首部若其值为空串(""),表示SOAP消息的目的地由HTTP请求的URI标识;
    6. 无值则表示没有指定这条消息的目的地。
    7. 1.Content-Type: text/xml; charset=utf-8
    8. 2.SOAPAction: "http://WebXml.com.cn/getSupportCity"
    9. 配置如下图所示:

     

    * 使用SOAP1.2时配置测试

    1. HTTP请求配置只需要将Body Data修改,其他配置项保持不变:
    2. <?xml version="1.0" encoding="utf-8"?>
    3. <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">
    4. <soap12:Body>
    5. <getSupportCity xmlns="http://WebXml.com.cn/">
    6. <byProvinceName>string</byProvinceName>
    7. </getSupportCity>
    8. </soap12:Body>
    9. </soap12:Envelope>
    10. 需要修改"HTTP Header Manager"配置元件,在SOAP1.2规范中,
    11. SOAPAction首部被Content-Type的“action”属性所取代,但其作用和工作原理都没有变化。
    12. Content-Type: application/soap+xml;charset=UTF-8;action="http://WebXml。com。cn/getSupportCity"
    13. 配置如下图所示:

    最后:下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!【100%无套路免费领取】

    软件测试面试小程序

    被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

    涵盖以下这些面试题板块:

    1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

    6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

      全套资料获取方式:点击下方小卡片自行领取即可

     

  • 相关阅读:
    常见的反爬虫风控 | IP风控
    Ubuntu 16下Linaro 交叉编译器的安装
    关于el-input和el-select宽度不一致问题解决
    CentOS 7系统安装与配置、常用100条操作命令
    20221126今天的世界发生了什么
    tkinter-TinUI-xml实战(11)多功能TinUIxml编辑器
    基于Java毕业设计智慧社区信息管理系统开发源码+系统+mysql+lw文档+部署软件
    数据挖掘18大算法实现以及其他相关经典DM算法:决策分类,聚类,链接挖掘,关联挖掘,模式挖掘、图算法,搜索算法等
    SS-Model【2】:DeepLabv1
    树状数组&线段树 的奇妙用法
  • 原文地址:https://blog.csdn.net/weixin_57794111/article/details/133309780