2.1 Automatically Testing Software:Pytest 基础测试(整理版)
原始笔记:Pytest.md created: 2026-07-25 14:55 整理说明:原笔记没有提供有效的教程链接,因此本版本只整理现有正文中的测试正确性、测试发现、结果符号和
pytest.raises。
内容简要概括
测试不仅要验证被测代码是否返回正确结果,还必须保证测试自身的判断是正确的,因此测试用例应尽量简单清晰。pytest 会发现以 test_ 开头的测试函数,并用简洁符号报告执行结果。对于预期失败的输入,可以使用 pytest.raises 验证函数是否抛出了指定异常。
pytest、单元测试、测试发现、test_、assertion、.、F、异常测试、pytest.raises、TypeError
目录
1. 测试本身也需要正确
除了确认代码返回正确答案,还需要确保测试本身的预期和判断也是正确的。一个实用原则是让测试保持足够简单,使输入、预期输出和断言之间的关系容易人工核对。
测试越复杂,就越可能把错误藏在测试代码自身之中。单个测试应尽量聚焦一种行为,并清楚表达失败的原因。
2. 测试发现与结果符号
一次成功的测试运行可能产生如下输出:
============================================== test session starts =================================
platform darwin -- Python 3.11.4, pytest-7.4.3, pluggy-1.3.0
rootdir: /Users/alex/work/SSI/training/lessons/python-intermediate-inflammation
plugins: anyio-4.0.0
collected 2 items
tests/test_models.py .. [100%]
=============================================== 2 passed in 0.79s ==================================
pytest 会查找名称以 test_ 开头的函数并逐个运行。测试脚本名称后的符号表示各测试的结果:
.:测试函数执行完成,没有触发失败的 assertion,测试通过;F:assertion 失败,测试未通过;- 如果执行中发生错误,
pytest也会把该测试计为失败并输出错误信息。
上面的 .. 表示收集到的两个测试均已通过。
3. 测试预期异常
有些输入本来就应该触发异常,因此“抛出异常”也可以是正确行为。可以用 pytest.raises 验证异常类型:
import pytest
from inflammation.models import daily_min
def test_daily_min_string():
"""Test for TypeError when passing strings"""
with pytest.raises(TypeError):
daily_min([["Hello", "there"], ["General", "Kenobi"]])
pytest.raises 的含义
with pytest.raises(TypeError):
daily_min(...)
这段代码表示:执行 with 代码块中的代码,并期待它抛出 TypeError。
| 函数行为 | 测试结果 |
|---|---|
抛出 TypeError |
测试通过 |
| 没有抛出异常 | 测试失败 |
抛出其他异常,如 ValueError |
测试失败 |
这种测试既验证异常确实发生,也验证异常类型符合接口预期。
待确认问题
- 原笔记中的“原始教程”链接为空;本版本没有推断或补写教程地址。