Skip to content

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 可以生成测试,但你要给它明确预期。

AI Agent 课程学习文档。