ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

3 分钟上手 pytest:从安装到跑通第一个测试的完整指南

3 分钟上手 pytest:从安装到跑通第一个测试的完整指南 3 分钟上手 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写测试最磨人的往往不是逻辑而是模板代码。用标准库写一个用例先继承类、再 setUp最后self.assertEqual才能断言一遍。pytest 就是为了解决这件事而生的 Python 测试框架你写普通函数用assert断言然后一条命令跑完全部测试。这篇 pytest 教程带你从安装、最小示例到 fixture、参数化走完入门路径。为什么换个姿势写测试假设你要验证2 2等于4。用 unittest 你得先建类、写 setUp断言还得挑方法用 pytest 只需要一个函数加一行assert。更实际的好处在后面pytest 收集失败的测试时会自动把关键变量当时的值打在输出里。你在断言里看到1 2这样的提示而不是一句干巴巴的 Failed。一行命令装好 pytest安装只有一步pip 拉取即可pip install pytest装完后终端里敲pytest --version能看到版本号就说明环境就绪。你的第一个测试用例怎么写下面这个文件演示最简形态一个被测函数一个测试函数一个断言。# test_sample.py def inc(x): return x 1 def test_answer(): assert inc(3) 4在文件所在目录运行pytest它会自动找到所有以test_开头的文件并执行结尾用绿色passed标出结果。约定比配置重要文件名带test_前缀、函数名以test_开头就会被自动收集。fixture把重复准备逻辑抽出来数据库连接、临时目录、测试账号……每个用例都要准备的逻辑pytest 用 fixture 集中管理。fixture 就是一个打了装饰器的函数用例按名字声明依赖用完自动清理。import pytest pytest.fixture def client(): c {db: connected} yield c c[db] closed def test_ping(client): assert client[db] connectedyield前后的代码分别对应准备和收尾。临时目录场景更省事直接用内置的tmp_pathfixture 就能拿到一个隔离目录用完自动删。parametrize一条测试覆盖十组输入参数化pytest.mark.parametrize是减少重复最有效的手段。一个装饰器就能让同一个用例跑多组数据报告里每条结果单独编号哪个输入挂了能一眼定位。import pytest pytest.mark.parametrize((a, b, expect), [ (1, 2, 3), (0, 0, 0), (-1, 1, 0), ]) def test_add(a, b, expect): assert a b expect进阶技巧marker、跳过与缓存用pytest.mark.slow给用例打标记marker之后pytest -m not slow就能在 CI 里跳过慢测试。环境相关的问题用pytest.mark.skip(reason...)跳过带原因团队不会互相追问。-x参数让首个失败就停下适合排错-k test_add按名字筛选--lf只跑上次失败的用例回归验证很快。内置缓存插件会记住失败集合配合--lf使用这就是上条的来源。常见报错与解决 ️现象原因解法no tests ran文件或函数不符合test_命名约定或在别处改命名或直接pytest 路径指到测试文件ImportError/ 找不到包被导入的模块不在sys.path上改用python -m pytest运行它会带上当前目录断言失败但看不全变量长字符串被截断加-vv展开完整值测试间互相污染共享状态没清掉用 fixture 的收尾代码清理或tmp_path隔离数据生态扩展按需装插件pytest 的 hook 机制允许外部代码插进收集、执行、报告各环节社区插件因此很活跃。按需安装几个最常用的pytest-cov跑完测试直接给出覆盖率报告pytest-mock注入mockerfixturepatch 任意对象pytest-xdist多进程并行大套件提速明显pytest-djangoDjango 项目专用的数据库与客户端 fixture。装法都是pip install 插件名装完自动生效不需要额外配置。谁适合用谁可以先放一放一句话对比主流选择unittest 是标准库、零依赖适合极简单场景pytest 上手同样快但断言检查、fixture 系统、插件生态明显更完整是大多数 Python 项目的事实标准。适合你写脚本和小库、做 Web 后端Flask/FastAPI/Django、想在 CI 里自动跑测试、希望失败输出能直接看懂。不适合你只在 Jupyter 里跑验证代码或团队要求跨语言统一测试框架。下一步往哪读仓库里自带了文档建议按这个顺序推进先用 how-to 快速上手指南 把命令行参数过一遍再深入 fixture 参考 理解作用域与依赖最后逛 插件列表 看看还有哪个轮子能替你省事。如果要在本地浏览源码和示例仓库地址是 https://gitcode.com/GitHub_Trending/py/pytest 。跑通第一个assert只是开始——把重复的准备逻辑收进 fixture把重复的输入交给 parametrize你的测试套件会一直保持轻和快。【免费下载链接】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),仅供参考
返回列表