单元测试:pytest 编写高覆盖率 Flask 测试
📂 所属阶段:第五阶段 — 高级进阶(性能与架构)
🔗 相关章节:Flask-Login 实战 · 环境搭建
每次改完代码心惊胆战不敢上线?怕哪里漏改了一个路由逻辑?
别慌!pytest + Flask 的组合能帮你快速搭建一套轻量但覆盖全面的测试套件,今天我们就一步步来写覆盖视图、登录验证和数据库的测试用例。
1. pytest 入门配置
1.1 一键安装依赖
除了核心的 pytest,再加个适配 Flask 的 pytest-flask,帮我们处理应用上下文这类麻烦事:
1.2 项目根目录加 pytest.ini
这个配置文件能帮你统一 pytest 的行为,不用每次敲一堆参数:
2. 测试前置处理神器:pytest Fixtures
如果每写一个测试用例都要「创建应用→建表→登录→测试→删表」,代码会重复到爆炸!
conftest.py 是 pytest 提供的全局测试配置文件,我们在这里定义可复用的 fixture(测试夹具),把这些前置/后置逻辑打包起来。
3. 基础视图测试:从首页到登录注册
先从无状态、公开的页面开始写,比如首页、登录/注册页,这类测试最容易上手,也最稳。
4. 进阶测试:受保护路由的权限验证
Flask-Login 给路由加了 @login_required?那我们必须测试「未登录会不会被拦截,已登录能不能正常访问」:
5. 提升安全感:代码覆盖率测试
写了一堆测试,到底覆盖了多少业务代码?用 pytest-cov 生成可视化报告!
5.1 安装与运行
5.2 覆盖率小目标
不用强求 100%,但核心业务(比如登录验证、文章发布)至少要 80%+,简单的工具函数可以直接 100%。
6. 速查 & 小结
📝 常用 pytest + Flask 测试语法
💡 最佳实践
- 测试文件/函数命名要清晰:看名字就知道测的是「成功/失败/什么场景」
- 每个测试用例只测一件事:不要在一个 test_* 里同时测登录、注册、发布
- 数据库操作一定要用独立的测试环境:别碰开发/生产数据库!
- 尽量用 TDD(测试驱动开发):先写失败的测试,再写功能代码让它通过,最后重构
🔗 扩展阅读

