Python 工程交付:CLI、pytest 与同伴复现|课后复习
今天学会了什么
能用薄 CLI 调用已有规则与模型,按风险组织 pytest,证明测试能抓住错误,并让同伴从说明复现。
对应图中的每一步,找出你故意改坏规则后的失败、最小修复和全量回归记录,不能只展示最后的绿灯。
今天讲了什么(对照复习)
下面逐项对应课堂正文。先盖住右边那一栏,凭记忆回答;卡住了再翻回左边同名的小节。光说得出名字不算会,还要能讲清它会做什么、什么时候会失效。
| 课堂对应章节 | 必须能解释的机制与边界 |
|---|---|
| CLI、规则函数和状态各管什么;while 循环与退出条件;为什么要写 if name == “main” | CLI 负责输入转换、调用、输出与退出,规则由原模块执行;while 要有退出路径,未知命令有明确反馈。入口保护让导入不启动菜单;接回 D04 文件存储时明确何时保存/恢复。 |
| 自动测试与 pytest:先准备环境,再写断言;统一测试入口,避免重复学习两套框架 | 当前 venv 安装声明依赖,从项目根运行 python -m pytest。test_.py 和 test_ 用于收集;AAA 是准备、执行、断言。assert 比结果,pytest.raises 检查指定异常;不使用大范围捕获伪造通过。 |
| 测试隔离与 tmp_path | fixture 管理测试资源,tmp_path 为每个测试提供独立目录。每条测试准备自己的可变数据,不能依赖执行顺序,更不能改正式订单文件。 |
| 测试数量要映射业务风险;回归范围与风险对应 | 金额、数量、资源、状态、失败无半更新和集合边界都应有代表用例;课堂不少于 10 条需对应不同风险。规则单测、模型/文件测试、CLI 行为检查各有边界。 |
| 红灯 → 最小修复 → 全量回归 | 先预测改坏某条规则会使哪个测试失败,实际观察红灯后修复;先跑目标测试,再跑全量。导入/依赖失败是环境问题,不能冒充业务断言生效。 |
| README 是同伴的运行合同;同伴复现 | 说明目录、版本、依赖、数据位置、测试命令、CLI 入口、正常/失败旅程和限制。同伴只按说明执行并保留首个失败,作者补文档后再复验。 |
| Git 让审查过程可回放 | 用 status、diff、commit 和 log 关联红灯、修复与交付版本;提交标识还须配运行证据。单个“final”提交不能说明理解过程。 |
出了问题:怎么发现、怎么修、怎么验证
只在你自己那份课程副本或专用实验数据上复验,把改之前和改之后的真实结果都留下来。
| 风险/现象 | 提前预防 | 怎样发现 | 怎样处理 | 怎样复验 |
|---|---|---|---|---|
| CLI 复制公式或绕过状态规则 | 输入输出与业务实现分层 | 相同操作从 CLI 和规则入口比较 | 让 CLI 调用已有函数/服务 | 正常、非法状态和未知输入行为一致 |
| 菜单无法退出或 import 等待输入 | 明确退出命令和入口保护 | 独立导入、启动后输入退出与未知命令 | 修正 while 出口和 main 调用 | 导入不阻塞,退出完成,未知命令可恢复 |
| 测试污染数据或依赖顺序 | 用 tmp_path 和独立对象 | 单独运行某测试与全量结果比较,检查正式文件 | 去除共享可变状态,改用测试目录 | 重复与不同顺序运行结果一致,正式数据不变 |
| 测试全绿却抓不住业务错误 | 为每个用例写保护的规则 | 在副本改坏数量/状态规则再执行 | 补能断言业务结果与状态的用例 | 错误实现确实变红,恢复后全量通过 |
| 同伴缺步骤或持久化声明不实 | README 写你实际入口和数据路径 | 同伴新目录运行并跨进程读取 | 补缺失说明并接回 D04 保存/恢复 | 同伴按新说明复验;仅内存菜单明确标为演示 |
闭卷自测
先自己答一遍,再去运行或翻回课堂核对;不确定的地方标出来,别用 AI 的答案顶掉你自己的第一次判断。
- 解释 CLI、规则模块、模型和文件存储的职责;取消规则变化应改哪里?
- 写出一条 pytest 的 AAA 结构,并说明异常测试除了 raises 还要检查什么。
- tmp_path 解决哪种数据污染?为什么测试单独成功、全量失败值得警惕?
- 任选一条数量或状态测试,先预测怎样改坏实现能让它变红,再在副本复验。
- 同伴拿到全绿截图仍无法启动,你需要补哪些信息?如何证明交付的是刚测试的版本?
再看一眼真实业务
用预习真实操作手册的“入口—前置—结果—失败处理”检查自己的 README;由同伴实际使用验证可读性,不能替他填“已复现”。
今天留下什么,下节课怎么接着用
保留第一版订单工程:规则、模型、JSON 存取、薄 CLI、pytest、README、固定提交与同伴反馈。W02-D01 将已明确的对象与金额合同映射为 MySQL 表,不重新定义业务含义。
本周证明本地规则与文件路径;真实 MySQL、HTTP、Docker 和跨环境运行在 W02 验收。测试条数不等于未知风险全部消除。
本次商城补强怎样复验
| 新增机制 | 商城用途 | 防错与复验 |
|---|---|---|
| 装饰器/wraps | 统一报价日志 | 返回值/名称/异常三方面对照 |
| 自定义异常与cause | CLI说明输入与快照错误 | 业务错误可解释,程序错误保留Traceback |
| logging | 找到失败阶段 | 有拒绝日志仍须失败返回/异常,不能伪造成功 |
| pytest/raises/tmp_path | 修改后重复检查 | 故意改坏规则见红,测试文件不碰正式数据 |
逐项留下原输入、错误现象、最小修复和再次运行结果。若未运行,不写“问题已解决”。