如何写接口自动化测试断言?
点击文末小卡片免费获取软件测试全套资料资料在手涨薪更快你真的会写自动化测试断言吗在接口测试中断言是一项非常重要的操作它是用来校验接口返回结果是否符合预期的一种手段。一般来说接口测试断言大致可以分为以下几类状态码断言这是最基本也是最常用的一种断言方式。大部分情况下接口返回的HTTP状态码可以用来判断接口请求是否成功。响应体断言基于接口的响应数据进行校验。响应时间断言接口响应时间是否在可接受的范围之内。数据库断言接口调用后数据是否有相应的变化。这种使用断言来进行接口测试的方法在测试框架中的具体实现可能各不相同。下文将以Python的requests模块来做一个简单的例子。首先我们需要构造一个基本的GET请求并获取响应import requests response requests.get(http://api.example.com/data)在得到了响应后我们可以使用Python的assert关键字来进行断言。比如我们可以断言状态码是200assert response.status_code 200如果状态码不是200那么这个语句会抛出AssertionError。我们也可以断言响应的JSON数据中包含了某个特定的键data response.json() assert key in data同样如果key不在data中那么这个语句也会抛出AssertionError。对于更复杂的断言我们可能需要使用一些第三方库来帮助我们。比如我们可以使用jsonschema库来断言响应数据符合某个JSON Schemafrom jsonschema import validate schema { type : object, properties : { key : {type : string}, }, required: [key] } validate(data, schema)对于更复杂的断言我们该怎么做呢对于JSON响应断言主要是确认返回的JSON对象中的某个或者某些元素是否和预期的一致。这种断言的方式最常见的就是比对键值对是否相符了。举个例子假设我们期待的JSON响应如下{ title: foo, body: bar, userId: 1 }我们可以使用Python来做一个简单的断言操作expected_json { title: foo, body: bar, userId: 1 } response_json response.json() assert response_json expected_json在上述代码中response.json()用来从响应中获取JSON数据然后使用assert语句来断言这个JSON数据和我们期待的JSON数据是否相同。如果我们只关心返回结果中的某一部分例如我们只关心返回结果中的title字段那么我们可以做如下断言assert response_json[title] expected_json[title]对于更复杂的JSON响应断言比如JSON响应为嵌套结构或者是JSON数组我们可能需要进行递归或者遍历等操作来进行断言这种情况下可以使用一些第三方的断言库来提升我们的效率。比如Python的jsonpath库可以帮助我们快速的定位JSON中的某一段数据并进行断言JsonPah是一种信息检索语言可以让你用一个类似XPath的语法快速定位JSON结构中的部分内容。处理嵌套结构的JSON响应时JsonPath提供了一种简单有效的方法。重要的是理解JsonPath的语法比如 $ 表示根节点. 或 [] 用于访问子节点* 用于通配等。下面举个例子来说明如何使用JsonPath假定我们有一个如下的复杂JSON:response_json { store: { book: [ { category: reference, author: Nigel Rees, title: Sayings of the Century, price: 8.95 }, { category: fiction, author: Evelyn Waugh, title: Sword of Honour, price: 12.99 }, { category: fiction, author: Herman Melville, title: Moby Dick, price: 8.99 }, { category: fiction, author: J. R. R. Tolkien, title: The Lord of the Rings, price: 22.99 } ], bicycle: { color: red, price: 19.95 } }, }如果我们需要取出所有书的标题(title)可以使用如下语句from jsonpath import jsonpath titles jsonpath(response_json, $.store.book[*].title) print(titles) #输出[Sayings of the Century, Sword of Honour, Moby Dick, The Lord of the Rings]如果我们需要取出价格大于10的书的标题可以使用如下语句titles jsonpath(response_json, $.store.book[?(.price 10)].title) print(titles) # 输出[Sword of Honour, The Lord of the Rings]JsonPath非常简洁高效能让我们的断言操作更简单代码更清晰既然这么强大的话这不得有个使用方法不着急下面给你列出了常用的通配符的解析说明JsonPath表达式中的通配符通常有以下几种*通配符匹配所有的对象或元素。比如 $..book[*].author 可获取所有作者的名字。..深度操作符无论深度多少层都可以匹配到路径。比如 $..author 可获取所有的作者信息。. 或 []逐层向下遍历. 针对于名字[] 针对于数组下标或者名称。比如 $[store][book][0][price] 获取第一本书的价格。现行节点信息常在过滤器中使用比如 $..book[?(.price10)] 意思是获取所有价格小于10的书。()表达式组用于根据自定义表达式过滤。比如 $..book[(.length-1)] 获取最后一本书。?()过滤操作符用于查找符合条件的元素。比如 $..book[?(.isbn)] 获取所有包含ISBN的书。以上这些通配符让我们在使用JsonPath时有更大的灵活性可以在大型或者嵌套较深的JSON数据中准确地定位我们所需要的数据。面试会怎么问呢举个例子面试官JsonPath表达式中的深度操作符..可以匹配到多少层的路径YOU在JsonPath中深度操作符 .. 在不知道精确路径或者需要查询多层嵌套数据时非常有用。.. 不关心元素在JSON数据中的精确位置它会「深度搜索」也就是说无论数据嵌套在JSON结构的多深只要符合你的查询条件它都能找到。可以用任何的名字或者通配符 * 来配合深度操作符一起使用它们的组合可以匹配到任何级别的元素。例如假设我们有一个JSON对象{ level_1: { level_2: { level_3: { item: value } } } }如果你不知道 item 的精确路径但你知道它的名字并且你想从JSON数据中找到它你可以使用 .. 操作符加上名字进行深度搜索如$..item这将返回所有名为 item 的元素无论它们处在哪一层级。总的来说深度操作符 .. 可以匹配到无限多层的路径这对于处理深层嵌套的数据结构非常有用。面试官除了深度搜索JsonPath还有其他什么功能可以处理深层嵌套的数据结构YOU除了深度搜索外JsonPath还提供了一些其他功能来处理深层嵌套的数据结构数组索引JsonPath允许你使用数组索引来访问特定位置的元素。例如表达式$.store.book[0]将返回图书数组的第一本书。多个索引JsonPath还允许你在同一层级上访问多个元素。例如$.store.book[0,1]将返回图书数组的前两本书。切片操作JsonPath支持Python风格的切片操作允许你访问一个连续的元素序列而不仅仅是单个元素。例如 $.store.book[1:3]将返回图书数组的第二和第三本书。过滤表达式JsonPath支持过滤表达式允许你使用逻辑运算符和比较运算符来过滤返回的元素。例如$.store.book[?(.price 10)]将返回图书数组中价格低于10的所有书。通配符正如我们前面讨论的*通配符可以用来匹配任意元素不论位置。总的来说断言是接口测试中的一个重要部分合理、充分地使用断言不仅可以提升我们的测试质量也能帮助我们快速定位问题。同时塑造良好的断言策略对于维护和持续提升一个测试框架也是尤为关键的。最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走这些资料对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴我走过了最艰难的路程希望也能帮助到你凡事要趁早特别是技术行业一定要提升技术功底。

相关新闻

软件测试要学习的基础知识——黑盒测试

软件测试要学习的基础知识——黑盒测试

黑盒测试概述 黑盒测试也叫功能测试,通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作是一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,对程序接口进行测试,只检查程序功能是否按照…

2026/5/17 4:39:33 阅读更多 →
计算机毕业设计之springboot快递驿站信息管理系统设计与实现

计算机毕业设计之springboot快递驿站信息管理系统设计与实现

时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,快递驿站信息管理系统当然不能排除在外。快递驿站信息管理系统是在实际应用和软件工程的开发原理之上,运用java语言以及SpringBoot框…

2026/5/17 6:49:06 阅读更多 →
动态资源下载全攻略

动态资源下载全攻略

理解动态资源与IDM的基本原理动态资源通常通过JavaScript、AJAX或WebSocket等技术实时加载,传统下载工具难以直接捕获。IDM(Internet Download Manager)利用多线程加速和资源嗅探技术,可部分捕获动态加载的内容。其核心原理是拦截…

2026/7/4 13:56:58 阅读更多 →

最新新闻

PCB设计中地线与电源线加宽的技术要点与实战分析

PCB设计中地线与电源线加宽的技术要点与实战分析

1. PCB布线中地线与电源线加宽的核心逻辑 在PCB设计领域,地线(GND)和电源线(VCC)的走线宽度处理是影响电路性能的关键因素之一。不同于信号线可以相对灵活地调整宽度,这两类走线需要特殊对待的根本原因在于…

2026/7/5 12:58:00 阅读更多 →
基于YOLOv10的红外目标检测实战指南

基于YOLOv10的红外目标检测实战指南

1. 项目背景与核心价值去年夏天,我在参与一个山区救援项目时,亲眼目睹了传统无人机监控系统的局限性。在浓烟和夜间环境下,普通摄像头完全失效,而热成像设备虽然能捕捉到热源,却无法准确识别是人、动物还是车辆。正是这…

2026/7/5 12:51:58 阅读更多 →
AIAgent之工具调用:Function Call 与 Tool Use

AIAgent之工具调用:Function Call 与 Tool Use

工具调用:Function Call 与 Tool Use工具调用是 Agent 的「手」,让大模型能操作外部世界。这篇讲 Function Calling 的原理、工具怎么定义、模型怎么选工具、参数怎么传、常见的工具类型,以及开发中的最佳实践。大家好,我是黒漂技…

2026/7/5 12:49:55 阅读更多 →
ICM-42688-P与STM32F746ZG在工业自动化中的应用

ICM-42688-P与STM32F746ZG在工业自动化中的应用

1. ICM-42688-P与STM32F746ZG的黄金组合解析 在工业自动化和机器人控制领域,传感器与微控制器的协同设计直接决定了系统的性能上限。ICM-42688-P作为TDK InvenSense推出的6轴MEMS运动传感器,与STMicroelectronics的STM32F746ZG Cortex-M7微控制器形成的硬…

2026/7/5 12:47:54 阅读更多 →
混合整数二次规划在模型预测控制中的应用与求解器对比

混合整数二次规划在模型预测控制中的应用与求解器对比

1. 混合整数二次规划在模型预测控制中的核心作用 混合整数二次规划(MIQP)作为模型预测控制(MPC)中处理离散决策变量的关键技术,其核心价值在于平衡计算复杂度和控制性能。在车辆动力系统控制这类典型应用中,变速箱档位选择、发动机启停等离散决策变量与连…

2026/7/5 12:47:54 阅读更多 →
YOLO实战避坑指南:从环境配置到部署落地的完整工程化流程

YOLO实战避坑指南:从环境配置到部署落地的完整工程化流程

如果你在 2024 年或 2025 年才开始接触 YOLO,可能会觉得它已经是一个“古老”且“成熟”的技术栈,网上教程遍地都是,随便找个代码跑起来似乎并不难。但当你真正想把它用起来,无论是做一个毕业设计、一个内部工具,还是想…

2026/7/5 12:45:54 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻