关于 python-testing-patterns
面向 Python 开发者的测试模式技能,帮助编写聚焦的测试,让行为变更更安全。内容涵盖测试结构、边界隔离、fixtures、模拟对象及合理的测试套件层次。
主要功能
- 01采用聚焦的准备/执行/断言结构
- 02覆盖边界与错误情况
- 03指导 fixtures 与模拟对象
- 04说明测试套件金字塔
- 05提供定向测试检查清单
适用场景
- 01为特定行为编写测试
- 02测试错误路径和输入变体
- 03隔离网络或数据库影响
- 04规划单元、集成与端到端测试覆盖
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ jurgendn/ agent-skills --skill python-testing-patterns安装后在 Claude Code 中输入/python-testing-patterns确认已加载。
附带文件references/advanced-patterns.md
详细介绍
Python 测试模式
编写能让行为更安全地修改的测试。优先编写聚焦、易读的测试,而不是依赖巧妙的 fixture 或徒有其表的覆盖率。
有关异步测试、monkeypatch、基于属性的测试、数据库测试、CI 和覆盖率工具等高级模式,请阅读 references/advanced-patterns.md。
核心原则
- 每个测试只验证一种行为。 失败时应能指向一种被破坏的行为。
- 准备 / 执行 / 断言。 将设置、执行和验证明确区分。
- 测试边界和错误。 只有正常路径的测试并不可靠。
- 隔离外部影响。 如果网络、时间、随机性和服务不是待测行为,就对它们进行模拟。
- 追求有意义的覆盖率。 覆盖重要行为和风险,而不是每一行代码。
Pytest 基本模式
def test_adds_two_numbers():
result = add(2, 3)
assert result == 5
测试异常:
import pytest
def test_rejects_zero_division():
with pytest.raises(ValueError, match="zero"):
divide(1, 0)
测试参数化用例:
import pytest
@pytest.mark.parametrize("value, expected", [
("[email protected]", True),
("not-an-email", False),
])
def test_email_validation(value, expected):
assert is_valid_email(value) is expected
Fixtures
使用 fixture 复用设置,并明确其生命周期:
@pytest.fixture
def user():
return User(id=1, email="[email protected]")
避免隐藏的 fixture 依赖网。如果一个测试需要许多 fixture,说明被测单元可能耦合过紧,或测试范围可能过宽。
模拟
在系统边界处进行模拟:
- HTTP 客户端;
- 文件系统或对象存储;
- 不测试持久化时的数据库会话;
- 时间和随机性;
- 开销较大的模型/API 调用。
如果行为复杂到调用断言会变得脆弱,优先使用 fake,而不是 mock。
测试套件结构
采用小型测试金字塔:
- 为纯逻辑编写许多单元测试;
- 为边界编写较少的集成测试;
- 为关键工作流编写少量端到端测试。
根据行为命名测试:
test_<unit>_<scenario>_<expected_behavior>
输出
在提供测试建议或编写测试时,返回:
- 目标行为;
- 所需的测试级别;
- fixtures/mock;
- 具体测试用例;
- 尚未覆盖的边界/错误路径;
- 运行聚焦测试的命令。
评论
支持 Markdown