尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

pytest 快速上手教程:5个动作写出真正能维护的Python自动化测试

pytest 快速上手教程:5个动作写出真正能维护的Python自动化测试 pytest 快速上手教程5个动作写出真正能维护的Python自动化测试【免费下载链接】pytestThe pytest framework makes it easy to write small tests, yet scales to support complex functional testing项目地址: https://gitcode.com/GitHub_Trending/py/pytestpytest 是 Python 生态里最主流的测试框架测试用例用普通函数就能写断言失败自动分析夹具复用与参数化测试开箱即用。接下来带你走完 5 个动作从 3 分钟跑通第一个测试到把用例组织成团队能直接交接的测试套件。 3分钟装好测试环境写出第一个用例这一节解决我本机最快多久能看到第一条绿色通过线。安装只有一条命令当前版本要求 Python 3.10pip install pytest然后在项目里放一个test_temperature.pydef test_body_temperature(): celsius 37 fahrenheit celsius * 9 / 5 32 assert fahrenheit 98.6在终端敲下pytest它会自动发现当前目录及子目录里所有符合命名规则的文件并执行其中所有test_开头的函数。你不需要继承任何测试类也不用写一行模板导入——这就是它和 unittest 最直观的区别。命名规则决定 pytest 能否看见你的用例记住这两条就够规则示例测试文件名test_login.py、utils_test.py测试函数名test_add_ok() 断言失败时不用再靠 print 猜这一节解决测试红了怎么一眼看出是哪个值错了。这是 pytest 最省时间的能力。它在收集阶段重写你的assert语句核心实现在 src/_pytest/assertion/把比较细节内嵌进报错user {name: Ada, role: admin} assert user {name: Ada, role: user}失败时它不会只说断言失败而是把两边值摆出来、标出role这个不一致的键省去反复加 print 二分定位的痛苦。浮点数比较则交给approxfrom pytest import approx assert 0.1 0.2 approx(0.3) 用夹具复用测试准备代码这一节解决每个测试都要准备同样的数据怎么不写十遍。如果多个测试都需要临时文件、假数据库或一段配置别把准备逻辑塞进每个测试函数把它声明成夹具def test_config_file(tmp_path): cfg tmp_path / config.ini cfg.write_text(modetest\n) assert cfg.read_text().startswith(mode)注意这里的tmp_path是内置夹具每个测试独享一个临时目录用完自动清理你什么都不用管。自己写夹具时用scope控制实例存活多久scope生命周期适合什么function每个测试一份默认临时数据、独立状态module整个模块共享模块级公共资源session全程只建一次数据库连接、API 会话夹具系统的完整实现在 src/_pytest/fixtures.py工作机制的官方讲解在 doc/en/explanation/fixtures.rst。 参数化测试一个函数覆盖多组输入这一节解决十种输入组合难道要复制十个几乎一样的测试函数。import pytest pytest.mark.parametrize(text, expected, [ (hello, olleh), (a, a), (, ), ]) def test_reverse(text, expected): assert text[::-1] expected一个函数展开成三条独立用例哪个输入组合挂了都能精确定位跑出来的样子和普通函数毫无区别。参数化的更多写法配合夹具、自定义 ID 等可以查 doc/en/how-to/parametrize.rst。️ 组织起来筛选、跳过再放进目录里这一节解决只想跑登录相关的用例慢测试拖慢整个套件测试越写越多目录怎么摆这三件日常烦恼。按需跳过与筛选给测试打上标记跑的时候用命令行挑选pytest.mark.skip(reasonPDF 导出功能未发布) def test_export_pdf(): ... pytest.mark.slow def test_full_regression(): ...最常用的几个筛选命令你想干什么命令排除慢测试pytest -m not slow按名字模糊匹配pytest -k login一失败就停pytest -x失败现场直接进调试器pytest --pdb只列出不执行pytest --collect-only标记系统的实现在 src/_pytest/mark/。目录结构与一份 pytest.inipytest 不强制目录结构关键是pytest.ini放在项目根目录配置即刻生效。一个常见摆法可参考仓库里的示例 testing/example_scripts/customdirectory/my_project/ ├── pytest.ini ├── conftest.py # 全项目共享的夹具 └── tests/ ├── conftest.py # 本子目录共享的夹具 ├── test_login.py └── test_order.pyconftest.py是这里的主角里面定义的夹具会自动注入该目录下所有测试无需 import——它把公共准备逻辑从代码里解放出来也是 pytest 用起来最顺手的地方。配置文件本身保持精简即可[pytest] addopts -v --tbshort testpaths tests markers slow: 耗时的回归测试️ 框架背后一个维护了十几年的项目这一节告诉你把测试交给它放心不放心。pytest 的核心团队持续维护项目多年2016 年 6 月还在德国的弗莱堡办了一场史上规模最大的冲刺开发会集中讨论夹具系统重构、并行测试调度等难题见 doc/en/announce/sprint2016.rst而它真正能打的地方在插件生态pytest-cov出覆盖率报告、pytest-asyncio测异步代码、pytest-xdist多进程并行跑。完整插件清单见 doc/en/reference/plugin_list.rst。 接下来可以马上做的两件事从你手头项目里挑一个纯函数今天给它写 3 条参数化用例用pytest -v跑一遍——你会第一次直观看到断言重写给出的失败分析。在你的项目根目录加一份pytest.ini写上testpaths和addopts下次有人问测试怎么跑直接指给他看。想继续深入时按主题翻 doc/en/how-to/ 目录即可夹具进阶、参数化、unittest 迁移都有对应文档。【免费下载链接】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),仅供参考
返回列表