5分钟跑通 pytest: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
pytest 是目前最主流的 Python 测试框架。一行 assert 就能写出一个完整测试。哪怕你从没写过测试,五分钟也能让它跑起来。
为什么值得试:三个改变写测试体验的差别
样板代码少。老牌 unittest 要写类、要 setUp、要 self.assertAlmostEqual。pytest 里,普通函数加一个 assert 就是测试。
失败信息一眼看懂。assert 不通过时,pytest 会告诉你错在哪一行、两边的值各是多少。不用再靠加 print 猜。
开箱即跑。不用指定类名,不用写文件路径。敲一个 pytest,它自动收集所有 test_ 开头的文件。
五分钟上手:安装、第一个测试、跑通它
第一步,安装:
pip install -U pytest-U 表示升级到最新版,已有安装的话这条命令顺便完成升级。
第二步,新建一个 test_sample.py,写一个被测函数和一个测试函数:
def inc(x): return x + 1 def test_answer(): assert inc(3) == 4注意名字都以 test_ 开头,这是 pytest 识别测试的依据。
第三步,直接跑:
$ pytest test_sample.py . [100%] 1 passed in 0.04s看到这行 "1 passed" 就成了 ✅ 完整步骤参考 doc/en/getting-started.rst。
一个真实场景走查:三个用例变成一个参数化函数
📌 假设有个 add(a, b) 函数,要验证三组数据:(1, 2, 3)、(-1, 1, 0)、(0, 0, 0)。
写三个测试函数很重复。用内置的 parametrize 装饰器,数据摆成一张表就行:
import pytest @pytest.mark.parametrize( "a, b, expected", [(1, 2, 3), (-1, 1, 0), (0, 0, 0)] ) def test_add(a, b, expected): assert add(a, b) == expected一行一组数据,哪组失败,输出里会明确标出来。更多玩法见 doc/en/how-to/parametrize.rst。
少踩坑的实践技巧
⚠️ 这几条是社区里反复被强调的:
- 命名严格守约定:文件 test_xxx.py、函数 test_xxx。收集靠这个规则,命名不对会被直接忽略,而且不给提示。
- 放心用裸 assert:pytest 会重写断言,自动展示期望值和实际值的差异,比 print 调试高效得多。
- 公共资源交给 fixture:临时文件、数据库连接这类东西写成 fixture,而不是在每个测试里复制粘贴,还能用 scope 控制创建频率。原理见 doc/en/explanation/fixtures.rst。
- 慢测试打上标记:@pytest.mark.slow 标一下,平时用 -m "not slow" 只跑快的,长的留给 CI。
值得搭配的生态扩展
🚀 按需装,别贪多:
- pytest-cov:生成代码覆盖率报告,告诉你哪些行还没被测试覆盖。
- pytest-xdist:把测试分到多个进程并行跑,大用例集等待时间直接砍半。
- pytest-mock:提供 mocker fixture,一行代码 stub 掉第三方依赖。
- pytest-django:帮你配好 Django 测试环境,不用手动折腾数据库。
插件清单维护在 doc/en/reference/plugin_list.rst,想找什么细分方向的方案都能翻到。pytest 社区非常活跃,早期开发冲刺还是线下办的:
下一步建议先把官方文档的入门篇和 fixture 章节过一遍,能自己写 fixture 之后,日常场景基本就够用了。官方文档入口:doc/en/index.rst。
【免费下载链接】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),仅供参考