写点什么

软件测试 | XML 响应断言

  • 2023-02-22
    北京
  • 本文字数:2219 字

    阅读完需:约 7 分钟

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
#设置 sessionsession = 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>
复制代码

更多软件测试行业资讯可关注主页了解详情哦~

用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
软件测试 | XML响应断言_测试_测吧(北京)科技有限公司_InfoQ写作社区