切换日光/暗黑模式
048. PyTest 项目测试基础
学习目标
这一节进入自动化测试。
学完后,你应该能理解:
- 为什么项目需要自动化测试;
- PyTest 在后端项目里负责什么;
- PyCharm 里测试运行目录为什么重要;
- 测试文件为什么通常以
test_开头; - 测试目录和业务代码目录如何组织;
- AI 生成测试为什么仍然需要明确上下文。
为什么要写测试
当接口和工具函数越来越多时,手动点页面很难覆盖所有情况。
自动化测试可以帮你验证:
- 工具函数是否还按预期返回;
- 接口返回格式有没有变化;
- 重构后旧能力有没有被破坏;
- 数据库里关键初始化数据是否存在。
对完全没有后端测试经验的人来说,可以先把测试理解成“用代码重复检查功能”。
AI 让测试成本降低
过去写测试会消耗很多时间。
现在可以让 AI 根据现有代码生成测试初稿。
但 AI 不是直接替你负责结果。
你仍然要告诉它:
- 要测哪个函数或接口;
- 输入数据是什么;
- 期望输出是什么;
- 项目里有哪些依赖和环境变量;
- 测试运行前需要哪些数据。
提示越具体,生成的测试越接近可运行版本。
PyCharm 的测试运行配置
测试能不能正常跑,和运行目录关系很大。
如果工作目录错了,项目里的环境变量、配置文件和相对路径可能都读不到。
所以需要把 PyTest 的默认 working directory 配成项目根目录。
这和运行后端服务一样:运行入口可以在子目录,但上下文应该从项目根开始。
使用 PyTest
项目测试运行器设置为 PyTest。
PyTest 会自动发现符合规则的测试文件和测试函数。
常见规则是:
txt
tests/test_xxx.py函数名也通常以 test_ 开头。
这样运行整个测试目录时,PyTest 才知道哪些函数是测试。
测试目录
测试可以放在独立的 tests 目录。
这样业务代码和测试代码分开,项目结构更清楚。
对课程项目来说,测试代码也是学习资产。
它不只是为了 CI,也可以帮助你理解某个工具函数或接口应该怎么用。
第一个函数测试
可以从简单工具函数开始。
例如测试获取本机 IP 的函数。
这种测试不需要复杂数据库,也不需要前端页面。
它适合用来熟悉:
- 如何创建测试文件;
- 如何写
assert; - 如何在 PyCharm 里运行单个测试;
- 如何运行整个测试目录。
assert
测试的核心是断言。
例如:
py
assert result == expected如果结果相同,测试通过。
如果结果不同,PyTest 会告诉你实际值和期望值哪里不一致。
这比手动打印日志更清楚。
运行所有测试
测试目录配置好后,可以直接运行整个 tests。
这能快速验证当前项目是否还稳定。
后面每次改接口、改工具函数、改数据模型,都可以跑相关测试。
这一节的重点
这一节先建立测试入口。
你需要记住:
- 测试是用代码验证代码;
- PyTest 会按命名规则发现测试;
- working directory 要指向项目根目录;
- 先从简单函数测试开始;
- AI 可以生成测试,但你要给它明确预期。