pytest 快速上手全指南:5 分钟跑通你的第一个 Python 测试框架
【免费下载链接】pytestThe pytest framework makes it easy to write small tests, yet scales to support complex functional testing项目地址: https://gitcode.com/GitHub_Trending/py/pytest
有没有这种经历:写个测试得先建 TestCase 类,assert 满天飞,结果一失败只给你一句AssertionError,实际值、期望值全得自己心算?pytest 就是一个 Python 测试框架,专治这种痛——普通函数加原生assert就能写测试,失败了它还会自动把两边的值打印出来给你对。
pytest 到底帮你解决什么
一句话定位:用最小的样板代码,把"写测试—跑测试—看结果"这三步压缩到最短。
- 原生 assert 直接断言:不用记
assertEqual、assertTrue这些方法名,assert add(2,3) == 5写完就能跑;失败了报错信息里会带上左右两边的实际值,省掉你逐行加 print 排查的时间 - 自动收集测试:函数名带
test_前缀就会被自动发现执行,不用注册、不用配置入口,新文件放进来即生效 - fixture 管理测试资源:临时文件、数据库连接这类"用前准备、用后清理"的活交给 fixture,测试函数里只关心业务本身
- 参数化一套代码跑多组数据:同一逻辑想验证 10 组输入,一行
parametrize搞定,失败时精确告诉你哪一组挂的
5 分钟跑起来:pytest 安装命令与最小示例
🚀 一条命令装完:
pip install pytest写一个最小测试文件,两个函数:
# test_demo.py def add(a, b): return a + b def test_add(): assert add(2, 3) == 5然后直接跑:
pytest test_demo.py末尾看到1 passed in 0.01s就说明跑通了。更多安装细节可以翻官方文档:doc/en/getting-started.rst
一个真实小例子:给计算器函数写测试
需求:calc.py里有两个函数add和sub,希望加法的正数、零、负数场景都覆盖到。
被测代码(精简到只剩函数体):
# calc.py def add(a, b): return a + b def sub(a, b): return a - b测试代码,注释都在帮你省脑子:
# test_calc.py import pytest from calc import add, sub # 一行 parametrize = 三组测试数据,比复制三个函数体清爽多了 @pytest.mark.parametrize(("a", "b", "expect"), [(2, 3, 5), (0, 0, 0), (-1, 1, 0)]) def test_add(a, b, expect): assert add(a, b) == expect def test_sub(): assert sub(5, 3) == 2执行pytest -v test_calc.py,末尾看到4 passed:3 组加法参数 + 1 个减法用例全部通过。这时候你故意把add里改成return a - b再跑一次,3 个加法用例会同时标红,而且每条失败信息里都带具体的入参组合——哪组数据算错了,一眼定位,不用猜。
参数化的完整写法见:doc/en/how-to/parametrize.rst
老用户才懂的几个技巧
- 别再写 unittest 类式样板了——只断言不依赖状态的测试,直接写
test_开头的函数,pytest 自动收集,省掉类、setUp、self一整套仪式 - 优先用
@pytest.mark.parametrize批量喂数据,别对同一逻辑复制 N 个断言函数;失败报告里每组参数都会单独列出 - 建议临时文件一律用内置
tmp_pathfixture,目录自动建、自动清,别手写删除逻辑;用法参考:doc/en/how-to/tmp_path.rst - 建议日常跑
-v看单条结果,CI 上加--junitxml=report.xml自动归档报告,别靠肉眼看终端滚屏 - 别把代码拷进 IDE 反复调试——命令行加
--pdb,测试失败原地进 pdb 断点,变量随手查,排查时间能砍一半
什么情况下不适合用它
⚠️ 如果你的测试对象不是 Python 代码,或者要做大量 GUI 级别、跨进程的端到端场景,pytest 不是合适的工具——它的主场是 Python 项目里的单元测试和功能测试,边界外的事交给专门的工具去做更省事。
生态里值得装的几个插件
- pytest-cov:装上之后加一个
--cov参数,直接出代码覆盖率报告,不用再单独维护 coverage 流程 - pytest-xdist:加上
-n auto让用例多核并行跑,几百条用例的套件时间能砍掉一大截 - pytest-mock:测试函数里白拿一个
mockerfixture,mock 第三方调用一行搞定,省掉手写unittest.mock的样板
fixture 机制本身的参考文档:doc/en/reference/fixtures.rst
不管你是接手老库要补测试,还是新项目从零搭质量防线,只要写的是 Python 代码,这套"装个包 + 写函数 + 敲 pytest"的流程就够你开工了。官方文档入口:doc/en/
【免费下载链接】pytestThe pytest framework makes it easy to write small tests, yet scales to support complex functional testing项目地址: https://gitcode.com/GitHub_Trending/py/pytest
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考