Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >聊一聊接口自动化测试断言处理策略

聊一聊接口自动化测试断言处理策略

原创
作者头像
漫谈测试
发布于 2025-04-28 04:09:48
发布于 2025-04-28 04:09:48
16000
代码可运行
举报
文章被收录于专栏:漫谈测试漫谈测试
运行总次数:0
代码可运行

在进行接口自动化测试中,要验证接口执行后是否符合预期结果,其中的断言处理是比较关键步骤。在进行断言处理的时候,可以分为以下几种断言形式比如状态码、响应体结构、字段值、响应时间,还有数据库的数据是否正确。

什么时候应该验证整个响应体,什么时候只需要检查关键字段,也是值得考虑的情况。在冒烟测试中可能只检查关键字段,而在全面验证时需要更全面的检查。

如何处理动态数据,比如时间戳或生成的ID。这时候可能需要用正则表达式或者忽略某些字段,或者从响应中提取数据用于后续测试,有时候一个测试用例需要多个断言,那么如何处理多个断言呢?比如是否在一个测试用例中执行多个断言,或者如何处理断言失败后的流程。可能有些测试框架支持多断言,这样即使一个断言失败,其他断言还会继续执行,方便一次看到所有问题。

性能方面的断言,比如响应时间是否在可接受范围内。或者安全方面的断言,比如检查某些敏感字段是否被正确屏蔽,还需要考虑数据库断言,即接口操作后的数据是否正确写入数据库。这时候需要连接数据库,执行查询,并对结果进行断言。但这也可能带来维护成本,比如测试环境的数据库状态可能不稳定。

如何处理动态数据,比如时间戳或者随机生成的token,这时候可能需要用正则表达式或者忽略某些字段。另外,异常情况的处理也很重要,比如网络错误或者超时,这时候断言应该如何设计,还要考虑断言的灵活性和可维护性,比如将预期值提取到配置文件或数据库中,避免硬编码。还有日志记录和报告生成,方便后续分析测试结果等等。

一、断言设计原则

1.1精准性

仅断言关键业务字段,避免过度断言(如时间戳、动态ID等无关字段)

使用正则表达式匹配动态内容(如\d{4}-\d{2}-\d{2}匹配日期格式)

1.2可维护性

将预期值提取到配置文件/数据库,避免硬编码

使用分层断言(基础验证 → 业务逻辑验证 → 性能验证)

1.3容错性

对非关键字段允许部分匹配(如JSON Path模糊查询)

设置合理的浮点数误差范围(如金额计算)

二、常见断言类型及实现

2.1基础验证

状态码断言

验证HTTP状态码是否符合预期(如200、404、500等):

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
assert response.status_code == 200

响应时间

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
assert response.elapsed.total_seconds() < 3  # 接口响应时间<3

字段值断言

验证关键字段的具体值:

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
assert response.json()["status"] == "success"assert response.json()["data"]["email"].endswith("@example.com")

2.2响应体验证

JSON结构验证

检查响应体是否符合预期结构(如字段存在性、类型等):

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
response_data = response.json()assert "user_id" in response_dataassert isinstance(response_data["age"], int)

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
assert "data" in response.json()  # 检查关键字段存在性assert response.json()["code"] == 0  # 业务状态码

数据一致性

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
expected = {"id": 123, "name": "test_user"}assert response.json()["data"] == expected  # 精确匹配

动态值处理

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import reassert re.match(r"^\d{10}$", response.json()["token"])  # 正则匹配动态token

XML/HTML验证

使用XPath或正则表达式验证内容:

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
assert "<title>Login Page</title>" in response.text

2.3业务逻辑验证

数据关联性

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建订单后验证订单号唯一性order_id = response.json()["order_id"]assert len(str(order_id)) == 18  # 校验订单号长度

状态流转

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 支付接口调用后状态应变为PAIDassert get_order_status(order_id) == "PAID"

2.4异常场景验证

错误码断言

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
assert response.json()["error_code"] == "INVALID_PARAM"

错误信息匹配

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
assert "用户名不能为空" in response.json()["message"]

2.5数据库断言

验证接口操作是否影响数据库(如插入、更新数据):

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db_result = query_db("SELECT count(*) FROM users WHERE name='lee'")assert db_result == 1

三、断言策略

3.1 精准断言 vs 模糊断言

精准断言:严格匹配响应内容(适用于关键业务逻辑)。

模糊断言:忽略动态数据(如时间戳、随机ID),使用正则或占位符:

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import reassert re.match(r"\d{4}-\d{2}-\d{2}", response.json()["created_at"])

3.2关键字段优先

优先验证业务核心字段,避免过度断言导致用例脆弱:

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 仅验证关键字段,忽略次要字段assert response.json()["order_id"] == expected_order_idassert response.json()["total_price"] == 100.0

3.3数据动态处理

提取动态数据:将动态值(如生成的ID)保存为变量供后续用例使用:

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
user_id = response.json()["user_id"]

忽略无序数据:对列表数据排序后再断言:

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
assert sorted(response.json()["items"]) == sorted(expected_items)

四、多断言处理

4.1单用例多断言

在一个测试用例中执行多个断言,确保全面覆盖:

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def test_create_user():    response = create_user()    assert response.status_code == 201    assert response.json()["username"] == "test_user"    assert response.json()["is_active"] is True

4.2软断言(Soft Assertion)

即使某个断言失败,仍继续执行后续断言(需框架支持,如Python的pytest-check):

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pytest_check import checkdef test_api():    response = call_api()    with check:        assert response.status_code == 200    with check:        assert "error" not in response.json()

五、工具与框架支持

5.1 断言库

Python:pytest(内置assert)、unittest、jsonschema(验证JSON结构)。

JavaScript:chai、jest。

Java:TestNG、AssertJ。

5.2 JSON Schema验证

使用JSON Schema严格验证响应结构:

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from jsonschema import validateschema = {    "type": "object",    "properties": {        "user_id": {"type": "number"},        "email": {"type": "string", "format": "email"}    },    "required": ["user_id", "email"]}validate(response.json(), schema)

5.3 Postman/JMeter断言

Postman:通过Tests脚本编写断言:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
javascriptpm.test("Status code is 200", () => pm.response.to.have.status(200));pm.test("Response contains token", () => pm.expect(pm.response.json().token).to.exist);

JMeter:使用JSON Extractor提取数据,Response Assertion验证结果。

5.4错误处理与日志

明确错误信息:在断言中附加错误描述,方便排查:

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
assert response.status_code == 200, f"Expected 200, got {response.status_code}"

记录响应内容:断言失败时打印响应体:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#pythonif response.status_code != 200:    print(f"Response body: {response.text}")    assert False

六、进阶处理技巧

6.1 动态断言

环境感知

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 根据测试环境动态调整预期值expected_host = "api.test.com" if env == "test" else "api.prod.com"assert response.request.url.startswith(f"https://{expected_host}")

数据驱动断言

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 从CSV/Excel读取预期值expected_value = read_test_data("case123.csv")["expected"]assert actual_value == expected_value

6.2 自定义断言方法

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def assert_json_contains(response, required_fields):    """验证响应体包含所有必需字段"""    actual_fields = set(response.json().keys())    missing = required_fields - actual_fields    assert not missing, f"Missing fields: {missing}"# 使用示例assert_json_contains(response, {"code", "message", "data"})

6.3性能断言

python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 使用Locust进行性能压测时的断言from locust import HttpUser, task, betweenclass WebsiteUser(HttpUser):    wait_time = between(1, 5)    @task    def check_api(self):        with self.client.get("/api/data", catch_response=True) as response:            if response.elapsed.total_seconds() > 2:                response.failure("Response time exceeded threshold")

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深度学习GPU卡性能比拼:见证Titan RTX“钞能力”
文中,作者测试了包含Titan RTX在内的多个常见NVIDIA GPU卡在各种AI训练任务上的速度。对于每个GPU,分别训练下列神经网络时测量每秒处理的图像数量:ResNet50、ResNet152、Inception3、Inception4、VGG16、AlexNet和SSD。得出了一下结论:
GPUS Lady
2019/03/07
5K0
英伟达发布「霸王龙」Titan RTX:价格降低,本月上市
今年英伟达发布了新一代 GPU 架构 Turing 和 Quadro RTX 系列,然后又发布了三款消费级 GeForce RTX 显卡,以及第一款 Turing Tesla T4。然而,英伟达的产品线中通常会有一款比较高端的显卡,这就是 Titan。Titan 不是旗舰卡也不算是消费级显卡,但它仍然是英伟达产品中非常有趣的存在,它是最快的显卡,其他卡无法企及,现在它成为英伟达主推的工作站计算显卡。
机器之心
2018/12/24
1.2K0
英伟达发布「霸王龙」Titan RTX:价格降低,本月上市
史上最完整的GPU卡Tensonflow性能横向评测
1.RTX Titan具有良好的fp32和fp16计算性能。它的特点类似于RTX 2080Ti,但它有两倍的内存和更好的性能。
GPUS Lady
2019/03/07
2.9K0
【AI系统】GPU 架构回顾(从2018年-2024年)
2018 年 Turing 图灵架构发布,采用 TSMC 12 nm 工艺,总共 18.6 亿个晶体管。在 PC 游戏、专业图形应用程序和深度学习推理方面,效率和性能都取得了重大进步。相比上一代 Volta 架构主要更新了 Tensor Core(专门为执行张量/矩阵操作而设计的专门执行单元,深度学习计算核心)、CUDA 和 CuDNN 库的不断改进,更好地应用于深度学习推理。RT Core(Ray Tracing Core)提供实时的光线跟踪渲染,包括具有物理上精确的投影、反射和折射,更逼真的渲染物体和环境。支持 GDDR6 内存,与 GDDR5 内存相比,拥有 14 Gbps 传输速率,实现了 20%的的效率提升。NVLink2.0 支持 100 GB/s 双向带宽,使特定的工作负载能够有效地跨两个 GPU 进行分割并共享内存。
用户11307734
2024/11/27
3880
新显卡出世,我们来谈谈与深度学习有关的显卡架构和相关技术
可以说是万众期待下,老黄发布了消费级(民用级)显卡RTX2070、RTX2080、RTX2080TI,作为“大多数人”,不得不说在发布会即将结束的那一刻,真的很想预订一块。真的很有诱惑力啊,毕竟价格摆在那里,RTX2080TI显卡相比1080TI可是贵了许多,Founder Edition 版 京东上预订9999差不多1w了。
老潘
2018/08/30
3.6K0
新显卡出世,我们来谈谈与深度学习有关的显卡架构和相关技术
英伟达系列显卡大解析B100、H200、L40S、A100、A800、H100、H800、V100如何选择,含架构技术和性能对比带你解决疑惑
近期,AIGC领域呈现出一片繁荣景象,其背后离不开强大算力的支持。以ChatGPT为例,其高效的运行依赖于一台由微软投资建造的超级计算机。这台超级计算机配备了数万个NVIDIA A100 GPU,并利用60多个数据中心的数十万个GPU辅助,为ChatGPT提供了强大的算力支持。这种规模的算力部署不仅体现了AIGC技术的先进性,也预示着人工智能技术未来的发展趋势。这种集成了高性能计算、大数据处理和人工智能算法的超级计算机,将成为推动科技进步的重要引擎。
汀丶人工智能
2024/01/29
8.2K0
英伟达系列显卡大解析B100、H200、L40S、A100、A800、H100、H800、V100如何选择,含架构技术和性能对比带你解决疑惑
深度 | 英伟达深度学习Tensor Core全面解析
AI 科技评论消息,不久前,NVIDIA在SIGGRAPH 2018上正式发布了新一代GPU架构——Turing(图灵),黄仁勋称Turing架构是自2006年CUDA GPU发明以来最大的飞跃。Turing架构的两大重要特性便是集成了用于光线追踪的RT Core以及用于AI计算的Tensor Core,使其成为了全球首款支持实时光线追踪的GPU。
AI科技评论
2018/09/21
4.1K0
深度 | 英伟达深度学习Tensor Core全面解析
人工智能研究者应该选择哪款显卡?
我在自己的网站中专门介绍过GPU的一些硬件基础知识:https://lulaoshi.info/gpu/gpu-basic/gpu.html。英伟达为优化深度学习的矩阵运算,在较新的微架构中,专门设计了Tensor Core这样的混合精度核心,因此,人工智能训练最好选择带有Tensor Core的GPU。
PP鲁
2020/06/29
3.2K0
为什么说NVIDIA推出了史上最强的GPU?
8月14日早上北京时间7点,在SIGGRAPH 2018计算机图形与交互技术大会上,英伟达创始人兼CEO黄仁勋推出世界上第一款光线追踪GPU!据媒体报道老黄把这块GPU称作”自2006年以来最重要的一块GPU“,耗时10年打造。
GPUS Lady
2018/08/17
1.3K0
为什么说NVIDIA推出了史上最强的GPU?
NVIDIA推出全新GPU TITAN RTX,开源PhysX SDK
Turing提供动力的TITAN可提供130 teraflops的深度学习功能,11 gigarays的光线追踪性能,可满足全球最苛刻的用户需求。
AiTechYun
2018/12/24
8800
【AI系统】GPU 架构回顾(从2010年-2017年)
1999 年,英伟达发明了 GPU(graphics processing unit),本文将介绍英伟达 GPU 从 Fermi 到 Blackwell 共 9 代架构,时间跨度从 2010 年至 2024 年,具体包括费米(Feimi)、开普勒(Kepler)、麦克斯韦(Maxwell)、帕斯卡(Pashcal)、伏特(Volt)、图灵(Turing)、安培(Ampere)和赫柏(Hopper)和布莱克韦尔(Blackwell)架构。经过 15 年的发展,CUDA 已成为英伟达的技术“护城河”,Tensor Core5.0,NVLink5.0,NVswitch4.0,Transformer Engine2.0 等技术迭代更新,正如英伟达公司官方宣传语所言:“人工智能计算领域的领导者,推动了 AI、HPC、游戏、创意设计、自动驾驶汽车和机器人开发领域的进步。”
用户11307734
2024/11/27
3280
如何为深度学习选择最佳 GPU ?
Hello folks,我是 Luga,今天我们继续来聊一下人工智能生态相关技术 - 用于加速构建 AI 核心算力的 GPU 硬件技术。
Luga Lee
2024/11/18
6670
如何为深度学习选择最佳 GPU ?
英伟达A100 GPU的核心数,Tesla系列
GeForce RTX是英伟达(NVIDIA)公司旗下的一个高端显卡系列。其中,“GeForce”是英伟达推出的显卡品牌,广泛应用于游戏、图形设计、视频编辑等多个领域,以其出色的图形处理能力和性能而著称。“RTX”则代表了该系列显卡所具备的特殊技术和功能,具体来说,“RTX”是Ray Tracing Texel eXtreme的缩写,意味着光线追踪技术的极致表现。
zhangjiqun
2024/07/31
6690
NVIDIA Pascal Geforce显卡揭秘
新一代NVIDIA“帕斯卡”(Pascal)架构显卡即将发布,各种传言也如火如荼,最近网络上流传一张图揭露全新的Geforce X家族,包含了基于GP104的X80、基于GP100的X80 ti和X8
GPUS Lady
2018/03/30
1.5K0
NVIDIA Pascal Geforce显卡揭秘
深度学习GPU卡鄙视链,你在第几层?
目前在售的NVIDIA Volta架构中Tesla V100处于深度学习GPU专业卡的最顶端位置!拥有5120个CUDA核心、640个Tensor辅助核心,核心面积达到了815平方毫米,集成了210亿个晶体管。作为Tesla P100的升级产品,Tesla V100同样拥有有两个不同的版本:一个是支持NVLInk,一个是支持PCIE。
GPUS Lady
2018/09/29
25K1
深度学习GPU卡鄙视链,你在第几层?
一台优秀的GPU服务器是什么样子的?
到年底了,又到了各大高校开始动手采购GPU服务器的时候到了,最近不少学生在QQ上请我们帮忙看看配置
GPUS Lady
2019/12/10
7.2K0
一台优秀的GPU服务器是什么样子的?
黄仁勋从煤气灶下取出最新GPU:7nm全新安培架构,售价20万美元,训练性能顶6张V100
因为美国疫情的原因,英伟达和其他科技公司一样,把今年的GPU技术大会(GTC 2020)改成线上举行。
量子位
2020/05/19
9520
黄仁勋从煤气灶下取出最新GPU:7nm全新安培架构,售价20万美元,训练性能顶6张V100
电脑显卡的性能-2021年显卡性能排名前十 目前最好的显卡 2021显卡性能天梯
  目前最好的显卡排名,排在第一位的NVIDIA RTX 3090是现如今市面上性能最强的显卡,强的一塌糊涂,24GB的内存,支持8K分辨率,世上首款8K游戏显卡,核心是GA102,完整版的GA102核心有10752个流处理器,相当于Titan RTX的2.33倍,对比20系提升巨大,3090相比3080提升了15%左右,相比2080ti提升在43%左右,不论什么样的游戏都能完美的驾驭,不愧被称为地球最强。不过值得注意的是,RTX 3090是一块非常耗电的卡,并且需要一个体面的电源设备;在一个就是价格非常昂贵,让一般游戏玩家难以企及。
宜轩
2022/12/26
2.4K0
深度分析NVIDIA A100显卡架构(附论文&源码下载)
基于安培体系结构的NVIDIA A100 GPU是为了从其许多新的体系结构特征和优化中提供尽可能多的AI和HPC计算能力而设计的。在台积电7nm N7 FinFET制造工艺上,A100提供了比Tesla V100中使用的12nm FFN工艺更高的晶体管密度、更好的性能和更好的功率效率。一种新的Multi-Instance GPU(MIG)能为多租户和虚拟化GPU环境提供了增强的客户端/应用程序故障隔离和QoS,这对云服务提供商特别有利。一个更快和更强的错误抗力的第三代NVIDIA的NVLink互连提供了改进的多GPU性能缩放的超尺度数据中心。
计算机视觉研究院
2020/07/16
3.4K0
深度分析NVIDIA A100显卡架构(附论文&源码下载)
“ GPU视频处理技术调研报告 ”
本文来自英伟达高级工程师 季光在LiveVideoStack 线上交流分享,并由LiveVideoStack整理而成。分享中季光详细解析了GPU在视频编解码,图像分析和视频处理方面的相关技术支持,
LiveVideoStack
2021/09/01
1.1K0
推荐阅读
相关推荐
深度学习GPU卡性能比拼:见证Titan RTX“钞能力”
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验