100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 技术分享 | 接口自动化测试中如何对xml 格式做断言验证?

技术分享 | 接口自动化测试中如何对xml 格式做断言验证?

时间:2022-02-25 04:37:28

相关推荐

技术分享 | 接口自动化测试中如何对xml 格式做断言验证?

在服务端自动化测试过程中,发起请求之后还需要对响应值进行验证,验证响应信息符合预期值之后,这一条接口自动化测试用例才算完整的通过。所以这一章节,将会讲解在接口自动化测试中,是如何对服务端返回的 XML 格式响应内容做断言验证。

环境准备

Python 版本

安装 requests_xml

pip install requests_xml

Java 版本

Rest-Assured 支持对xml 进行断言,参考接口测试框架章节安装 Rest-Assured 即可。

Xml 解析方式

Python 有三种 XML 解析方式。

DOM 方式:它是文档对象模型,是 W3C 组织推荐的标准编程接口,它将 XML 数据在内存中解析成一个树,通过对树的操作来操作 XML。

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

ElementTree 方式:相对于 DOM 来说拥有更好的性能,与 SAX 性能差不多,API 使用也很方便。

Python 版本

request 对 XML 格式封装的不强,可以使用 request_xml 第三方库,或者也可以自己封装一个 XML 的解析。

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

使用 xpath 断言

requests_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>` objects 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."""

selector: 使用的 XPath 表达式

first: 是否只返回第一个查找的结果

xpath() 方法会返回一个查找到的对象的列表。

def test_xpath():session = XMLSession()r = session.get("https://www.nasa.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.nasa.gov/' in result

XML 解析

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

然后再使用 findall 方法,去查找需要的 XPath 的数据。

import xml.etree.ElementTree as 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

Java 版本

调用 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();}}

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

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

最后: 可以在公众号:伤心的辣条! 自行领取一份216页软件测试工程师面试宝典文档资料【免费的】。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

现在我邀请你进入我们的软件测试学习交流群:746506216】,备注“入群”, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路。

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!

软件测试工程师自学教程:

这才是最精细的自动化测试自学教程,我把它刷了无数遍才上岸字节跳动,做到涨薪20K【值得自学软件测试的人刷】

接口性能测试 — 软件测试人必会618实战场景分析

软件测试工程师月薪2W以上薪资必学技能 — Python接口自动化框架封装.

美团面试真题_高级测试25K岗位面试 — 软件测试人都应该看看

测试开发之全面剖析自动化测试平台 — 软件测试人的必经之路

软件测试必会_Jmeter大厂实战 — 仅6步可实现接口自动化测试

Jmeter实战讲解案例 — 软件测试人必会

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。