软件测试 | XML响应断言的环境

518 篇文章 3 订阅
514 篇文章 2 订阅

1.XML响应断言简介

在服务器接口自动化测试过程中,测试程序发起请求之后还需要对服务端的响应值进行验证。验证响应信息(值)

符合预期值,这一个接口自动化测试用例才算通过。下面将会讲解在接口自动化测试中,我们是如何对服务端返回的XML格式响应内容做断言验证的。

2.XML响应断言的环境准备

Python版本

安装request_xml

pip install requests_xml

Java版本

Rest-Assured 支持对XML进行断言。

3.XML解析方式

有3中XML解析方式

(1)DOM方式:它是文档对象模型,是W3C组织推荐的标准编程接口,它将XML数据在内存中解析成一颗树形。

(2)SAX方式:它是一个用于处理XML时间驱动的模型,它逐行扫描文档,一边扫描一边解析。SAX方式对于大型文档的解析拥有很大优势,尽管不是W3C标准,但它得到了用户的广泛认可。

(3)ElementTree方式:它相当于DOM方式来说拥有更好的性能,与SAX方式性能差不多,使用API解析XML文件也很方便。

4.实战演示

实战演示代码如下(Python版和Java版)。

(1)Python演示代码

1)XML响应断言

from requests_xml import XMLSession
​
#设置 session
session = XMLSession()
r = session.get("https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss")
# 打印所有的内容
r.text
# links可以获取到响应中所有的链接地址
r.xml.links
# raw_xml返回字节形式的响应内容
r.xml.raw_xml
# text返回标签中的内容
r.xml.text

2)XPath断言

request_xml库也支持XPath表达式。通过XPath表达式获取系统中对应响应字段的数据,把取出来的数据放在result列表中,方便接口测试用例断言。

xpath()用法:

def xpath(self,selector:str, * ,first:bool = False,_encoding:str = None) ->
_XPath:
      """Given an XPath selector,returns a list of
      :class:`Element <Element>` object or a single one.
      
      :param selector:XPath Selector to use.
      :param first: Whether or not to return just the first result.
      :param _encoding:The encoding format.
      """

上面程序执行的关键点如下。

  • XPath解析。

  • selector:使用XPath表达式。

  • first:判断是否只返回第一个查找的结果。

  • xpath()方法:返回查找到的列表对象。

def test_xpath():
    session = XMLSession()
    r = session.get("https://www.na***.gov/rss/dyn/lg_image_of_the_day.rss")
    #通过xpath获取所有link标签的内容
    item = r.xml.xpath("//link")
    result = []
    for i in item:
        #把获取的结果放进列表中
        result.append(i.text)
    #断言
    assert 'http://www.na***.gov/' in result

XML解析

XML是一种结构化、层级化的数据格式,最适合体现XML文档的数据结构就是树。XML文档可以使用Python自带的xml.etree.ElementTree来解析。ElementTree可以将整个XML文档转化为树,ElementTree可与XML文档进行 “交互” (读取、写入、查找)。

测试程序获取服务端的响应内容之后,使用findall()方法,通过传入XPath表达式在响应内容中查找所需要的数据。

import xml.etree.ElementTree ET
​
#自己封装XML解析方法
session = XMLSession()
    r = session.get("https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss")
    #获取响应内容
    root = ET.fromstring(r.text)
    #查找根元素
    em = root.findall(".")
    # print(item)
    items = root.findall(".//link")
    result = []
    #遍历
    for i in items:
       result.append(i.text)
    assert "http://www.nasa.gov/" in result

(2)Java演示代码

Java中调用body()方法获取服务端的响应内容,body()方法的第一个参数是XPath表达式,第二个参数接收期望结果。

import static io.restassured.RestAssured.*;
import static org.hamcrest.core.IsEqual.equalTo;
​
public class Requests{
   public static void main(String[] args){
       given()
             .contentType("application/rss+xml;charset=utf-8").
       when()
             .get("https://www.nasa.gov/rss/dyn/lg_image_of_the_day_rss")
       .then()
              .body("rss.channel.item[0].link",
              equalTo("http://www.nasa.gov/image-feature/mocha-swirls-in-jupiter-s-
turbulent-atmosphere"))
            .log().all();
   }
}

rss.channel.item[0].link这种类型的XPath表达式浅显易懂,就是根据XPath本身的层级一级一级进行定位。rss是其最外层的标签,然后依次是channel标签、item标签、link标签,其中同级item有多个标签,所以需要通过下标[0]定位到第一个item标签。通过这样的定位方式,可以获取到想要的响应内容 。

下面是获得的XML格式的响应内容。

<rss version="2.0" xml:base="http://www.nasa.gov/" xmlns:atom="http://www.w3.org/
2005/Atom" xmlns:dc="http://pu***.org/dc/elements/1.1/" xmlns:itunes="http://
www.itunes.com/dtds/podcast-1.0.dtd" xmlns:media="http://search.yah***.com/mrss/">
  <channel>
    <item>
      <title>Mocha Swirls in Jupiter's Turbulent Atmosphere</title>
      <link>http://www.nasa.gov/image-feature-feature/mocha-swirls-in-jupiter-s-
turbulent-atmosphere</link>
      //省略
      </item>
      //省略
      <item>
      //省略
      </item>
   </channel>
</rss>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值