ARTICLE DETAIL

资讯详情

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

如何快速上手 pytest:新手必看的 Python 测试框架完整指南

如何快速上手 pytest:新手必看的 Python 测试框架完整指南 如何快速上手 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/pytestpytest 是功能强大的 Python 测试框架支持 Python 3.8 与 PyPy3插件生态丰富。本文带你 3 步跑通第一个测试掌握固件、参数化、标记三大技巧并附插件推荐。为什么需要 pytest你有没有这样的经历想写个测试得先继承 TestCase、满屏 self.assertEqual还要在 setUp/tearDown 里手动准备和清理环境断言一旦失败只弹出一句干巴巴的 AssertionError至于哪个变量取值不对得自己回头翻代码。pytest 就是来解决这些痛点的。它让你用最朴素的 assert 写测试失败时自动打印两边变量的实际值小测试三行起步大项目也能平滑扩展到复杂功能测试外围还有覆盖各种场景的插件生态。顺便一提pytest 诞生于德国弗莱堡这座城市的故事和它一样有名。快速上手3 步跑通第一个测试 第 1 步安装在终端执行一条命令pip install pytest第 2 步写测试。新建test_temperature.py写一个温度换算用例。pytest 只收集以test_开头的函数函数体内一条 assert 就够用def c_to_f(c): return c * 9 / 5 32 def test_boiling(): assert c_to_f(100) 212第 3 步运行。在同目录执行pytest看到绿色的1 passed你的第一个测试就跑通了。把测试写专业的 3 个技巧固件fixtures最简用法开测前摆好桌椅测完自动收走当多个测试都要准备同样的环境数据库连接、临时文件逐个手写既啰嗦又容易漏。固件fixtures就是资源管家测试前自动执行并把结果注入函数参数结束后自动清理。import pytest pytest.fixture def zero(): return 0 def test_freezing(zero): assert zero * 9 / 5 32 32参数化parametrize示例一份用例跑多组数据要验证多组输入时复制粘贴一堆测试函数是维护灾难。参数化parametrize用一个装饰器喂入多组数据同一逻辑自动跑多遍哪组失败就单独报哪组。import pytest pytest.mark.parametrize(c,f, [(0,32),(100,212)]) def test_convert(c, f): assert c * 9 / 5 32 f标记markers用法给测试贴标签按需挑选运行项目里冒烟用例和耗时用例混在一起就得有挑选手段。标记markers相当于贴纸贴上之后用pytest -m按标签筛选不再每次都全量跑。import pytest pytest.mark.slow def test_heavy(): assert True执行pytest -m not slow即可跳过耗时用例。实战演练用 pytest 守护手机号清洗功能来点更贴近生活的把138-0013-8000这类脏手机号清洗成统一的 86 格式。测试和功能写在同一份文件里逻辑从第一天就有保护import re def clean_phone(raw): d re.sub(r\D, , raw) return f86{d[-11:]} if len(d) 11 else None def test_valid_mobile(): assert clean_phone(138-0013-8000) 8613800138000 def test_invalid_short(): assert clean_phone(12345) is None保存为test_phone.py运行pytest。以后改clean_phone时测试一变红立刻就知道改坏了什么重构也敢下手。插件生态精选pytest 本体只是起点真正的生产力来自插件pytest-mockmocker.patch一行注入模拟对象单测时外部依赖不用真连网络、真连数据库。pytest-cov跑测试的同时产出代码覆盖率报告哪些路径看似测了实则没测一目了然。pytest-xdist多进程并行分发用例长时间套件的等待从分钟级压到秒级。pytest-djangoDjango 项目开箱即用的测试数据库与请求客户端省去手动搭环境的麻烦。新手常见疑问测试函数里为什么不用 import assert因为 assert 是 Python 内置关键字天生可用。pytest 只是把它增强了失败时自动展示等式两边的实际值定位问题一步到位。pytest 如何自动发现测试靠命名约定它会递归扫描test_开头或_test.py结尾的文件收集其中以test_开头的函数。名字符合约定就会被找到。和已有的 unittest 测试会冲突吗不会。pytest 能原样收集运行 unittest 风格的类你可以先混合跑再逐步改写成更简洁的 pytest 写法。一句话总结用 assert 写断言、用固件fixtures管环境、用标记markers挑着跑pytest 免费开源今天就能上手。想继续深入可以看官方文档doc/en/。✅【免费下载链接】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),仅供参考
返回列表