test(scripts): 36 个 E2E 与 6 个机械校验工具(1548 条断言)+ 一键交付自检

新增:check-api-parity(契约 121 接口 ↔ 控制器,自带「必须恰好 121」自检)、
check-entity-columns(基类要求的列 vs 迁移建表列,F-35 那个坑踩了四次之后上的工具)、
check-manual(手册引用的错误码与提示文案对得上代码)、check-test-profile(test profile 真起一次)、
e2e-prodguard、load-test(四场景、按端点分别统计)、verify-all(一条命令跑完交付自检)、
dev-seed-audit(界面验收用的演示数据),以及 M1~M9 各轮 E2E。

压测抓到一个真缺陷并修掉(F-92):门禁 IP 限流原来计「所有请求」,于是一个班连同一个
WiFi 时 60 个不同学生同时核验只过了 20 个 → 改为只计失败 + 单独的成功上限,20/60 → 60/60。

度量工具的偏差会伪装成产品缺陷(F-60/F-77/F-97),所以每个脚本都断言「动作自己的结论字段」
(submitted / created / canExport),而不是 HTTP 200 + code 0。

验证:verify-all.py --quick 5/5;--with-e2e 见 docs/09 §8。
This commit is contained in:
2026-09-30 09:02:57 +08:00
parent 6945f194b5
commit 30c3714d35
26 changed files with 9190 additions and 1 deletions
+17 -1
View File
@@ -213,7 +213,23 @@ WEIGHTS = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
def with_checksum(base17: str) -> str:
"""给 17 位前缀配一个**正确的**校验位(ISO 7064 MOD 11-2),造夹具用。"""
"""
给 17 位前缀配一个**正确的**校验位(ISO 7064 MOD 11-2),造夹具用。
⚠️ 入参必须是**前 17 位**(6 位地区 + 8 位出生日期 + 3 位顺序),
函数负责补第 18 位。传 18 位会生成 19 位号码,而**失败发生在很远的地方**:
名册导入的报告里会出现一行「身份证号格式非法(…当前 19 位)」,
看起来像"身份证号生成逻辑有问题"。
这个错我犯过三次,所以这里**直接断言**,而不是在文档里写一句"记得传 17 位"——
没人会去读那句,而错误会在 300 行之外以另一种形式出现。
"""
if len(base17) != 17 or not base17.isdigit():
raise ValueError(
"with_checksum 的入参必须是**前 17 位数字**(你传了 %d 位:%r)。"
"它负责补第 18 位校验码;传 18 位会生成 19 位号码,"
"而那个错会在名册导入的报告里以「当前 19 位」的形式出现。"
% (len(base17), base17))
total = sum(int(base17[i]) * WEIGHTS[i] for i in range(17))
return base17 + CHECK_CHARS[total % 11]