news 2026/9/12 5:21:53

pytest 入门完整指南:3 步跑通你的第一个 Python 测试

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
pytest 入门完整指南:3 步跑通你的第一个 Python 测试

pytest 入门完整指南:3 步跑通你的第一个 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 的测试框架(test framework):用它一行assert就能写一个测试用例,一条命令就能跑完全部测试,并精确定位失败原因。本文适合想第一次给代码加测试的新手,也适合准备用 pytest 替代内置unittest的普通用户。

为什么值得选 pytest

用内置unittest写测试要继承TestCase、把断言写成assertEqual这类方法名、还要单独处理发现与运行。pytest 直接收集普通函数:只要函数名以test_开头就会被执行;断言失败时它会打印assert 4 == 5这样的两侧取值,还能继续拆解每个值来自哪次调用。另外,@pytest.mark.parametrize标记可以让同一组测试函数用多份参数各跑一遍,不用复制粘贴。

🚀 3 步跑通第一个测试

安装并确认版本

pip install -U pytest pytest --version

注意:本仓库声明的运行环境要求 Python 3.10 及以上(见 pyproject.toml 中requires-python)。

建一个最小测试文件

新建test_sample.py,内容如下:

def func(x): return x + 1 def test_answer(): assert func(3) == 5

运行并读懂输出

$ pytest collected 1 item test_sample.py F FAILURES > assert func(3) == 5 E assert 4 == 5

结果行末尾的F表示该测试失败;E行告诉你两侧实际值。进程退出码也值得记一下:0全部通过,1有失败,5一个测试都没收集到。完整定义见 exit-codes.rst。

🌡️ 小案例:校验华氏温标转摄氏

输入三组"华氏温度 → 期望摄氏温度",期望各生成一条用例;用参数化后你实际得到的是collected 3 items,哪组不对输出里会直接带上具体参数:

import pytest def fahrenheit_to_celsius(f): return (f - 32) * 5 / 9 @pytest.mark.parametrize("f,c", [(32, 0), (212, 100), (98.6, 37)]) def test_conversion(f, c): assert fahrenheit_to_celsius(f) == pytest.approx(c)

浮点比较建议用pytest.approx做近似判断,这是官方文档 how-to/parametrize.rst 推荐的做法。

🧩 按需挑选的 4 个插件

  • pytest-cov:统计测试覆盖率,回答"哪些代码没被测试碰到"。
  • pytest-django:为 Django 项目准备测试数据库和客户端。
  • pytest-asyncio:让async def的异步测试函数能被正常收集执行。
  • pytest-xdist:把测试分发到多个进程并行跑,缩短总耗时。

⚠️ 新手 4 个常见坑

  1. 命名不对就一个用例都收不到:测试文件要以test_开头(或_test.py结尾),测试函数要以test_开头,否则退出码是5。先跑pytest --collect-only确认收集到了什么,比直接跑快。
  2. 退出码 5 别慌:先检查当前目录里到底有没有符合条件的test_*.py文件,再检查函数名。
  3. 断言改写只作用于测试文件:断言的可读报错依赖对测试模块的改写,不要把测试函数放在其他名字的模块里再 import 进来调用,报错会退化成一堆assert False
  4. 共享资源交给 fixture:数据库连接、临时目录这类"用前准备、用后清理"的资源,用@pytest.fixture声明并放在conftest.py里,写法见 fixtures.rst。

延伸资源

  • 官方文档 Getting Started:从零安装到第一个用例的官方路径
  • 参数化测试指南:parametrize与 fixture 参数化的全部细节
  • 退出码说明:7 种退出码的完整定义
  • 内置 fixtures 参考:tmp_pathcapsys等现成能力
  • 核心实现源码:想看收集、fixture、断言改写怎么实现的,从这里入手

【免费下载链接】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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 5:19:44

团子翻译器:三步轻松搞定游戏生肉翻译的终极方案

团子翻译器:三步轻松搞定游戏生肉翻译的终极方案 还在为看不懂的外语游戏、漫画、视频而烦恼吗?团子翻译器正是为你量身打造的实时生肉翻译神器!这款基于OCR技术的专业翻译软件能够智能识别屏幕文字并实时翻译,让你彻底告别语言障…

作者头像 李华
网站建设 2026/9/12 5:18:01

电子元器件工业检测:YOLOv11+YOLO26双路协同与大模型语义校验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 5:17:22

哈希算法原理、应用场景与安全实践指南

1. 哈希的本质与核心价值哈希(Hash)本质上是一种将任意长度的输入数据映射为固定长度输出的单向函数。这个看似简单的概念却在现代计算机系统中扮演着至关重要的角色。我第一次真正理解哈希的威力是在处理用户密码存储时——原始密码经过哈希处理后变成一…

作者头像 李华
网站建设 2026/9/12 5:17:21

手写操作系统实战:USB EHCI驱动与假持久化设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 5:17:15

多模态视觉大模型实战:从对齐原理到LoRA微调与部署避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华