Python 现代开发学习笔记

(二十四)按状态变化组织测试

1. 从纯转换开始

先直接调用清洗函数,不启动网页和数据库,就能检查空白与重复规则。修改输入时只动一处,预测 Book 和计数后再运行。

# 项目文件:demos/cleaning_walk.py
from cataloghub.cleaning import clean_cards

# 改变空白和标签次序,观察两张原始卡片怎样变成一份书目。
first = {"source_id": "b101", "title": " Python 入门 ", "finished": "0", "tags": ["语法", " 基础 "]}
second = {**first, "title": "Python 入门", "tags": ["基础", "语法"]}
batch = clean_cards([first, second])
assert batch.books[0].title == "Python 入门"
assert batch.duplicates == 1 and len(batch.books) == 1
print(batch.books[0].data(), batch.duplicates)
# 在 catalog_project 中执行,使用已经安装的 cataloghub 包。
uv run python ../demos/cleaning_walk.py

继续用 pytest 检查单条坏记录、相同重复与同编号冲突。这些测试只需要构造字典,失败时容易定位到转换规则。

2. 检查持久状态与组件组合

层次 采集查询项目 训练推理项目
纯数据 空白、标签、坏字段、重复与冲突 类型、形状、分组、训练统计量
文件与数据库 原始快照、事务回退、迁移、WAL 备份 整版发布、摘要、半途失败、旧版保留
应用请求 参数、翻页、转义、只读方法、就绪状态 生命周期、字段校验、预测值与版本
独立进程 重开后书目仍在 新进程重载相同版本得到相同结果

测试都使用临时数据库或模型目录,运行结束后清理。构造一个会改变数据库的失败,比只检查错误文本更有用:故意让第四本书写入失败,再重新连接查看第一本书是否也回退。模型测试则在数组保存时抛错,核对 current.json 没有跳到未完成版本。

依次检查清洗函数、持久事务、TestClient 应用与真实 HTTP 进程,每一层保留可对照的状态
# 分别在两个项目目录中运行同一个测试命令。
uv run python -m pytest

书目项目目前有 20 项、模型项目有 23 项检查。可以从 采集与事务测试、页面与备份测试、数据与版本测试 和 预测接口测试 查看输入与断言。

笔记正文与全部题解 · Ctrl / ⌘ K