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

news2025/4/16 12:48:04

在服务端自动化测试过程中,发起请求之后还需要对响应值进行验证,验证响应信息符合预期值之后,这一条接口自动化测试用例才算完整的通过。所以这一章节,将会讲解在接口自动化测试中,是如何对服务端返回的 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

# 设置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

  • 使用 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="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:media="http://search.yahoo.com/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>

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

软件测试面试小程序

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/970665.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4个维度讲透ChatGPT技术原理,揭开ChatGPT神秘技术黑盒【文末送书】

文章目录 写在前面1.Tansformer架构模型2. ChatGPT原理3. 提示学习与大模型能力的涌现4. 行业参考建议写作末尾 写在前面 2022年11月30日&#xff0c;ChatGPT模型问世后&#xff0c;立刻在全球范围内掀起了轩然大波。无论AI从业者还是非从业者&#xff0c;都在热议ChatGPT极具…

一种基于Python的自定义日志解析的实践方法

需求说明&#xff1a; 从如下的日志文件里解析出如下字段&#xff1a; 参数名&#xff1a;教育程度 左值&#xff1a;60 右值&#xff1a;90 表达式&#xff1a;等于 结果&#xff1a;不满足 解决方法&#xff1a; Step1: 因为原始日志来源于网页&#xff0c;这里真正的…

前端加密方式

前端加密 1.不可逆加密2.可逆加密a.对称加密b.非对称加密&#xff08;本文重点&#xff09;a.含义&#xff1a;b.过程理解&#xff1a;c.项目中使用&#xff1a; 总结&#xff1a;参考地址 目前搜索前端加密是可以看到有非常非常多的方法的&#xff0c;这里我们需要对其分类总结…

设计模式-9--迭代器模式(Iterator Pattern)

一、什么是迭代器模式 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;用于提供一种统一的方式来访问一个聚合对象中的各个元素&#xff0c;而不需要暴露该聚合对象的内部结构。迭代器模式将遍历集合的责任从集合对象中分离出来&#xf…

睿思BI实现杜邦分析

杜邦分析法&#xff08;DuPont analysis&#xff09;是一种分析企业财务状况的方法&#xff0c;得名于美国杜邦公司。该方法可以应用于销售业绩分析。 睿思BI实现杜邦分析效果如下&#xff1a; 效果演示地址&#xff1a;https://www.ruisitech.com/rsbi-ultimate/#/dashboard/…

Hook技术

Hook 英文直译是“钩子”的意思&#xff0c;在程序中将其理解为“劫持”更好理解&#xff0c;意思是&#xff0c;通过 Hook 技术来劫持某个对象&#xff0c;从而控制它与其它对象的交互。 Hook 技术是一种用于改变 API 执行结果的技术&#xff0c;Android 系统中有一套自己的事…

架构设计基础设施保障IaaS存储

目录 1. 云硬盘2. 对象存储3. 表单上传案例4. 服务上传验证5. 云数据库6. 云数据库操作7. 服务连接云数据库8. 新一代原生数据库9 阿里云PolarDB生产最佳实践 1. 云硬盘 HDD&#xff08;普通云盘&#xff09; 特征&#xff1a; 性能一般&#xff0c; IOPS大概在数百左右。 应…

iPhone 15 Pro展示设计:7项全新变化呈现

我们不应该再等iPhone 15 Pro在苹果9月12日的“Wonderlust”活动上发布了&#xff0c;而且可能会有很多升级。有传言称&#xff0c;iPhone 15 Pro将是自iPhone X以来最大的飞跃&#xff0c;这要归功于大量的新变化&#xff0c;从带有更薄边框的新钛框架到顶级A17仿生芯片和动作…

通过Siri打造智能爬虫助手:捕获与解析结构化数据

在信息时代&#xff0c;我们经常需要从互联网上获取大量的结构化数据。然而&#xff0c;传统的网络爬虫往往需要编写复杂代码和规则来实现数据采集和解析。如今&#xff0c;在苹果公司提供的语音助手Siri中有一个强大功能可以帮助我们轻松完成这项任务——通过使用自定义指令、…

micro python 编译流程和方法,以及一部分问题解决

micro python官网 https://micropython.org/ 点击 点击对应的芯片&#xff0c;我这里是ESP32-S3 点击到git 到esp32目录下 按照指引下载安装ESP-IDF IDF版本查看连接如下&#xff1a; https://docs.espressif.com/projects/esp-idf/en/latest/esp32/versions.html 我这里选择…

Kubernetes入门 十三、配置管理

目录 VolumeConfigMap概述创建ConfigMap使用ConfigMap用作环境变量用作命令行参数使用 volume 挂载 不可变 ConfigMap Secret概述Secret 的种类创建Secretkubectl创建yaml文件创建 使用Secret使用 Volume 挂载用作环境变量挂载指定的 key 使用kubernetes.io/dockerconfigjson类…

【Vue】 Vue3 安装说明,适合小白新手

1、独立版本 我们可以在 Vue.js 的官网上直接下载最新版本, 并用 下载 Vue.js https://unpkg.com/vuenext 2、使用 CDN 方法 以下推荐国外比较稳定的两个 CDN&#xff0c;国内还没发现哪一家比较好&#xff0c;目前还是建议下载到本地。 Staticfile CDN&#xff08;国内&am…

Unity资源无法下载 反复提示需同意Terms of Service和EULA 同意后无效的解决方案

前言 最近在玩Unity&#xff0c;跟着tutorial做点项目&#xff0c;但是在下载免费资源时&#xff0c;只有从网站上点“打开Unity”&#xff0c;才能在本地Unity Editor的Package Manager里找到这个资源&#xff08;且点一下下面的刷新就没有了&#xff09;&#xff0c;并且点击…

【MySQL】MySQL 慢SQL如何避险

我们在日常开发中&#xff0c;一定遇见过某些SQL执行较慢的情况&#xff0c;我们俗称“慢SQL”&#xff0c;如果你对系统的接口性能要求较高的话&#xff0c;一定不会放过这种SQL&#xff0c;肯定会想办法进行解决&#xff0c;那么&#xff0c;导致慢 SQL 出现的原因&#xff0…

寻找重复数

题目链接 寻找重复数 题目描述 注意点 nums 中 只有一个整数 出现 两次或多次 &#xff0c;其余整数均只出现 一次不修改 数组 nums 且只用常量级 O(1) 的额外空间 解答思路 参照题解可以将本题的数组抽象为链表&#xff0c;由于nums中只有一个整数出现多次&#xff0c;所…

Python操作Excel教程(图文教程,超详细)Python xlwings模块详解,

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 xlwings模块详解 1、快速入门1、打开Excel2、创建工作簿2.1、使用工作簿2.2、操作…

9.(Python数模)(分类模型一)K-means聚类

Python实现K-means聚类 K-means原理 K-means均值聚类算法作为最经典也是最基础的无标签分类学习算法。其实质就是根据两个数据点的距离去判断他们是否属于一类&#xff0c;对于一群点&#xff0c;就是类似用几个圆去框定这些点&#xff08;簇&#xff09;&#xff0c;然后圆心…

7英寸触摸显示屏企业网络电话

SV-X77英寸触摸显示屏企业网络电话 SV-X7网络电话是一款带有7英寸触摸显示屏的高端式企业级电话&#xff0c;以先进设计及强大的功能大幅度提高企业工作效率。 功能亮点 √ 虚拟可编程按键 — 可动态显示4个分页&#xff0c;每页可设置显示29个DSS键的状态&#xff0c;最多支持…

线 竖线 横线 系谱图 before 伪类

ul.xipt.level-1 li:before {position: absolute;width: 1px;border-right: dashed 1px #a52520;left: 50%;bottom: -40px;content: "";height: 84px; }

患者随访模板移动端设计

医院随访模板是一款集患者资料整理、随访计划执行和数据统计分析功能于一体的医患服务系统。旨在帮助医院规范随访工作、提高随访效率、提升医疗水平、提高患者依从度。 一、模板临床作用及意义 1、减轻随访工作人员劳动强度、提升随访工作效率。帮助医生或者医院从繁重无序的…