资讯动态

pytest Python 测试框架入门指南:从安装到读懂测试报告的完整上手教程

发布时间:2026/9/12 3:23:27 来源:尧图企业网站定制
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 开发者通常卡在三个地方测试文件命名不对导致收集不到、断言失败时不知道错在哪、测试之间的公共资源反复手写。这篇教程带你用 10 分钟走通 pytest 的核心闭环装好工具、写出第一个测试、看懂失败报告再用一个贴近实际的小例子体会参数化测试和异常断言的写法最后整理新手最容易踩的几个坑。它解决什么实际问题日常写测试时大多数人要处理三件事发现测试哪些文件、哪些函数是测试逐个指定太麻烦。pytest 会自动收集当前目录及子目录下test_*.py或*_test.py文件里test_开头的函数和Test开头的类中的方法收集规则见 doc/en/explanation/goodpractices.rst。看懂失败断言失败时只打印一行assert 失败基本没用。pytest 会对assert语句做断言改写把表达式里各部分取到的值逐层展开直接告诉你实际算出来是多少、期望是多少。复用准备动作建临时目录、起连接、准备数据……这些准备工作可以写成 fixture固件多个测试共享同一份实现按需创建、按作用域销毁。另外已有的unittest风格测试套件不用改代码pytest 可以直接运行。最短路径跑通核心功能获取项目官方推荐的安装方式是升级安装到最新版pip install -U pytest装完用下面命令确认版本能看到版本号就说明安装成功pytest --version如果你的环境没有 pip 权限也可以克隆源码仓库https://gitcode.com/GitHub_Trending/py/pytest 后按仓库说明用开发依赖跑起来。执行第一个最小示例新建test_sample.py故意写一个会失败的断言方便观察报告def func(x): return x 1 def test_answer(): assert func(3) 5在文件所在目录执行pytest看懂关键输出输出大致分三段test_sample.py F [100%] assert func(3) 5 E assert 4 5 E where 4 func(3) 1 failed in 0.12s中间的[100%]是整体进度F表示这个文件里出现了失败用例。E assert 4 5是断言改写给出的关键信息func(3)实际返回 4而断言期望 5。where 4 func(3)这一行解释了左边的 4 是怎么来的。最后一行1 failed in 0.12s是汇总。把 5改成 4再跑一次输出变成1 passed说明闭环已经走通。想快速查看项目里可用的内置固件执行pytest --fixtures即可。一个贴近真实需求的用法假设有个计算订单实付金额的小函数def pay(price, qty): if qty 1: raise ValueError(qty must be 1) return price * qty对应测试覆盖多组正常输入 一条异常路径比复制一堆相似测试函数更省代码import pytest pytest.mark.parametrize( price, qty, expect, [(10, 2, 20), (9.9, 3, 29.7), (5, 1, 5)], ) def test_pay(price, qty, expect): assert pay(price, qty) expect def test_bad_qty(): with pytest.raises(ValueError): pay(10, 0)pytest.mark.parametrize让test_pay自动执行 3 次每次代入一组参数pytest.raises则用来断言代码必须抛出指定异常。执行pytest -v-v会让每条参数化用例单独占一行命名形如test_pay[10-2-20]。如果其中某组参数算错失败报告里会精确指出是哪一组、实际值和期望值各是多少不用自己猜。需要临时文件的功能测试直接给测试函数加一个tmp_path参数pytest 会为每次调用自动分配一个独立的临时目录用完自动清理无需手动创建删除。新手上手建议与常见误区命名不规范导致收集不到测试函数必须test_开头文件必须叫test_*.py或*_test.py类必须以Test开头且不要写__init__方法。运行结果提示no tests ran时先查这一条。在错误的目录执行不传路径参数时pytest 从当前目录开始递归收集。进入测试文件所在目录再执行结果最直观。误以为类里各测试方法共享状态每个测试方法都会获得独立的类实例把共享状态写成类属性才会真的共享跨测试依赖状态是常见坏味道。自定义标记没注册就报警告用pytest.mark.slow这类自定义标记前建议在配置文件如pyproject.toml的[pytest]段的markers里登记一句说明既消警告也让-m slow的选择规则有据可依。不要靠记忆找内置固件随时用pytest --fixtures列一遍比翻文档快。适合与不适合的使用场景适合Python 3.10 或 PyPy3 项目里的单元测试、功能测试以及给应用和库做较复杂的集成测试存量unittest测试套件的直接迁移运行不需要改写测试代码从几十条小测试到上千条用例的规模扩展配合--durations3这类选项还能定位慢用例。不适合非 Python 语言的测试需求pytest 的收集机制面向 Python 模块设计跨语言场景应选对应语言的测试框架。图形界面操作类测试pytest 本身不覆盖 GUI 驱动这类需求要靠生态插件或专用工具先确认插件是否仍活跃再引入。生态、扩展与下一步pytest 采用钩子 插件的扩展机制官方文档收录的外部插件超过 1300 个插件清单见 doc/en/reference/plugin_list.rst。是否引入某个插件建议看两点它解决的问题是否就是你正在遇到的以及插件近期是否有人维护。仓库自带的 testing/plugins_integration/ 目录就是官方的插件集成测试集testing/plugins_integration/requirements.txt 列出的 pytest-cov覆盖率、pytest-mock打桩、pytest-djangoDjango 支持、pytest-asyncio异步测试、pytest-htmlHTML 报告等都是常被一起使用的选项。继续深入时建议按这个顺序读官方文档起步与发现规则doc/en/getting-started.rst、doc/en/explanation/goodpractices.rst固件与参数化doc/en/explanation/fixtures.rst、doc/en/how-to/parametrize.rst标记与选择doc/en/how-to/mark.rst、doc/en/how-to/usage.rst进阶扩展doc/en/how-to/writing_plugins.rst 和 doc/en/how-to/writing_hook_functions.rst仓库 testing/ 目录里是 pytest 自己的完整测试集想确认某个写法是否被官方支持在这里找一个对应的测试文件参照往往比查文档更快。【免费下载链接】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),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价