news 2026/9/12 23:36:16

10 分钟跑通第一个测试:pytest 入门完整教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
10 分钟跑通第一个测试:pytest 入门完整教程

10 分钟跑通第一个测试: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

pytest 是一款 Python 测试框架:你用普通的 assert 语句写断言,它在命令行里自动收集、运行所有测试,并把失败位置打印得清清楚楚。这篇 pytest 教程会带你完成安装、写出第一个测试,再掌握 fixtures、参数化、标记三个高频技巧,10 分钟即可上手。

为什么需要 pytest 这样的测试框架

以前你可能靠 print 和手动调用来验证函数:改了一行代码,就说不清哪些行为被改坏了。测试点一多,靠人脑记住"哪些地方该保持不变"越来越吃力。pytest 把断言、运行、报告合并成一条命令的事,回归验证不再靠手气。

⚡ 用 pip 安装 pytest 并运行第一个测试

打开终端,一条命令完成 pytest 安装:

pip install pytest

新建test_quick.py,把被测函数和测试写在同一个文件里。记住两条命名约定:文件名和测试函数都以test_开头,pytest 靠这个规则发现测试。

def add(a, b): return a + b def test_add(): assert add(2, 3) == 5

运行:

pytest test_quick.py -v

预期看到:

test_quick.py::test_add PASSED ========================= 1 passed in 0.01s =========================

绿色 PASSED 说明断言成立,测试通过。

pytest 入门实战:给密码校验工具写测试

换个完整一点的场景:你写了个密码强度检查函数——至少 8 位、含数字、含大写字母才算合格。被测代码password.py

def is_strong_password(pwd): return ( len(pwd) >= 8 and any(c.isdigit() for c in pwd) and any(c.isupper() for c in pwd) )

测试文件test_password.py,覆盖合格、过短、无数字三种情况:

from password import is_strong_password def test_ok(): assert is_strong_password("Abc12345") def test_too_short(): assert not is_strong_password("Ab1") def test_no_digit(): assert not is_strong_password("Abcdefgh")

运行pytest,三条用例全过:

test_password.py::test_ok PASSED test_password.py::test_too_short PASSED test_password.py::test_no_digit PASSED ========================= 3 passed in 0.01s =========================

想进一步理解 assert 背后的断言重写机制,可以翻看 pytest 官方文档。

🧩 三个让你少写代码的 pytest 技巧

用 pytest fixtures 管理测试前置准备

fixtures(固件)是"可复用的准备步骤":把公共准备代码写成 fixture 函数,测试函数的参数与它同名,pytest 就会自动调用并把结果传进来。

import pytest @pytest.fixture def sample_list(): return [1, 2, 3] def test_sum(sample_list): assert sum(sample_list) == 6

以后任何测试想拿这份数据,声明同名参数即可,不必重复造数据。

pytest 参数化测试怎么写

同一个函数要验证多组输入时,不必复制粘贴一堆用例。parametrize 用一行装饰器把多组参数展开,每组独立运行、独立报告,失败时直接知道是哪组输入出的问题。

import pytest def add(a, b): return a + b @pytest.mark.parametrize("a, b, expected", [(1, 2, 3), (0, 5, 5), (-1, 1, 0)]) def test_add(a, b, expected): assert add(a, b) == expected

给测试打标记(Markers)则用于筛选运行范围。比如给耗时用例标上@pytest.mark.slow

import pytest @pytest.mark.slow def test_render_report(): assert True

终端执行pytest -m "not slow"就能跳过它,适合"先快速反馈、再跑全量"的场景。

常用 pytest 插件推荐

把测试用顺手之后,这些插件能解决下一层问题:

  • pytest-cov:统计测试覆盖了多少代码,输出覆盖率报告
  • pytest-mock:向测试注入 mock 对象,隔离数据库、网络等外部依赖
  • pytest-xdist:把测试拆到多个进程并行运行,压缩大规模用例的总耗时
  • pytest-django:为 Django 项目提供数据库和请求环境支持
  • pytest-asyncio:让 pytest 能运行 async def 编写的异步测试函数

❓ pytest 新手常见问题

  • 为什么我的测试没被收集?文件名和函数名都要以test_开头,两条同时满足才会被发现。
  • 只想跑某一个测试怎么办?::精确定位,例如pytest test_password.py::test_ok
  • 每个文件都要 import pytest 吗?不是,只在用 fixtures、parametrize、mark 等功能时才需要导入。

【免费下载链接】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 23:34:54

Elasticsearch分片机制详解:从规模规划到路由与集群平衡

分片机制算是 Elasticsearch 里面最容易被忽略、但又最影响集群命运的那部分。很多人刚接触 ES 时会搜各种安装教程,装好一个节点就把数据往里灌,直到有一天查询突然变慢、或者某个节点一挂整个索引变红,才回头研究分片到底是什么。这篇文章我…

作者头像 李华
网站建设 2026/9/12 23:34:10

CookLikeHOC 蒸菜模块实战解析:三色虾仁的配料配比与蒸柜出品流程

CookLikeHOC 蒸菜模块实战解析:三色虾仁的配料配比与蒸柜出品流程 【免费下载链接】CookLikeHOC 🥢像老乡鸡🐔那样做饭。已添加2026年发布的《老乡鸡菜品溯源报告 2.0中新出现的菜品。主要部分于2024年完工,非老乡鸡官方仓库。文字…

作者头像 李华
网站建设 2026/9/12 23:33:59

B站视频AI笔记工具实测:5款真正能用的知识蒸馏方案

1. 项目概述:为什么“看B站视频还要手动记笔记”正在成为过时操作?最近三个月,我帮七位不同背景的朋友——从刚入职的运营新人、备考研究生的文科生,到带团队做知识IP的中年讲师——梳理他们日常信息处理流程时,发现一…

作者头像 李华
网站建设 2026/9/12 23:33:34

8款高效AI论文写作工具评测与使用技巧

1. AI写作工具的市场需求与现状论文写作一直是学术界和教育领域的重要需求。随着人工智能技术的发展,AI写作工具逐渐成为学生、研究人员和内容创作者的得力助手。这类工具能够快速生成结构完整、逻辑清晰的文本,大幅提升写作效率。当前市场上存在多种类型…

作者头像 李华
网站建设 2026/9/12 23:32:46

药片目标检测VOC数据集实战:PyTorch适配与YOLOv8训练

简介:本资源是面向计算机视觉初学者与目标检测实践者的药片检测专用数据集,适用于YOLO、Faster R-CNN等VOC格式兼容模型的训练与验证。数据集聚焦医药图像分析场景,仅含1类目标(pill),共715张640640分辨率R…

作者头像 李华
网站建设 2026/9/12 23:31:20

生物识别测试技术:挑战、指标与实施指南

1. 生物识别测试的核心挑战与行业现状在移动支付、门禁系统和金融安全领域,生物识别技术已经成为身份验证的主流方案。根据最新行业报告显示,2023年全球人脸识别市场规模已达到86亿美元,指纹识别模块年出货量超过12亿枚。但随之而来的测试需求…

作者头像 李华