pytest中的assert断言

pytest 中,虽然底层仍使用 Python 原生的 assert 语句,但框架通过重写断言机制提供了"两种"不同层次的断言体验,通常被概括为:

1. 普通断言(Plain assert)

直接写 Python 原生的 assert <表达式>,pytest 会在失败时自动重写断言信息,给出详细的左值、右值、中间变量等上下文。

示例:

python 复制代码
def test_plain():
    a = 1
    b = 2
    assert a + b == 4          # 失败时 pytest 会打印出 3 != 4

2. 辅助断言(Assertion helpers)

利用 pytest 自带的辅助函数(或第三方插件如 pytest-check)把多个断言打包、延迟报告,或提供领域专用的比较语义。

常见内置辅助:

  • pytest.raises(ExpectedException) ------ 断言代码块抛指定异常
  • pytest.warns(UserWarning) ------ 断言代码块发出指定警告
  • pytest.approx(value, rel=1e-6, abs=1e-12) ------ 浮点近似比较
    示例:
python 复制代码
import pytest

def test_helpers():
    with pytest.raises(ZeroDivisionError):
        1 / 0

    assert 3.1415 == pytest.approx(3.14, rel=1e-2)

总结:

"两种断言方式"并不是语法上两种关键字,而是指

a) 直接用 assert + pytest 的自动重写;

b) 借助 pytest 提供的上下文管理器/辅助函数来完成更复杂的断言需求。

assert断言失败

在 pytest 里写 assert 时,一旦条件为 False,pytest 会立即:

​ (1)抛出 AssertionError(测试因此失败)。

​ (2)把失败的断言语句做"重写",在终端里给出非常详细的上下文,例如

复制代码
assert a + b == 4

失败时会看到

复制代码
>       assert a + b == 4
E       assert 3 == 4
E        +  where 3 = 1 + 2

变量值、中间表达式、列表/字典 diff 都会列出来。

​ (1)该测试函数终止 ,后续代码不再执行;pytest 把它标记为 FAILED (一个 F)。

​ (2)继续跑其余测试,最终报告里会统计失败条数,并给出失败用例的 traceback、stdout、stderr 等。

总结:assert 失败 → 测试当场失败,pytest 打印详细诊断,函数中断,但整个会话继续。

相关推荐
Muyuan19986 小时前
28.Paper RAG Agent 开发记录:修复 LLM Rerank 的解析、Fallback 与可验证性
linux·人工智能·windows·python·django·fastapi
代码小书生6 小时前
statistics,一个统计的 Python 库!
开发语言·python
STLearner7 小时前
SIGIR 2026 | LLM × Graph论文总结(图增强LLM,GraphRAG,Agent,多模态,知识图谱,搜索,推
人工智能·python·深度学习·神经网络·机器学习·数据挖掘·知识图谱
FreakStudio7 小时前
MicroPython 内核开发者直接狂喜!这个 Claude 插件市场,把开发全流程做成了「对话式外挂」
python·单片机·嵌入式·面向对象·并行计算·电子diy
老陈说编程7 小时前
12. LangChain 6大核心调用方法:invoke/stream/batch同步异步全解析,新手也能轻松学会
开发语言·人工智能·python·深度学习·机器学习·ai·langchain
给自己做减法7 小时前
rag混合检索
人工智能·python·rag
2301_812539678 小时前
Golang怎么实现网页爬虫抓取数据_Golang如何用colly框架快速构建爬虫采集程序【教程】
jvm·数据库·python
xcbrand8 小时前
政府事业机构品牌策划公司哪家可靠
大数据·人工智能·python
爱滑雪的码农9 小时前
Java基础十一 流(Stream)、文件(File)和IO
java·开发语言·python
knight_9___9 小时前
LLM工具调用面试篇5
人工智能·python·深度学习·面试·职场和发展·llm·agent