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:
@@ -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]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user