# 标准库匹配规则测试案例文档 > 根据 `standard_timeliness_new.md` 文档生成 > 文件位置: `utils_test/standard_new_Test/test_standard_matching_rules.py` ## 测试案例统计 | 类别 | 测试数量 | 说明 | |------|---------|------| | 情况1-正常(OK) | 5 | 名称+标准号都匹配,现行/试行 | | 情况2-被替代(SUBSTITUTED) | 2 | 名称+标准号都匹配,废止,有现行替代 | | 情况3-废止无替代(ABOLISHED) | 3 | 名称+标准号都匹配,废止,无替代 | | 情况4-不匹配(MISMATCH) | 6 | 名称或标准号只有一个匹配,现行状态 | | 情况5-不存在(NOT_FOUND) | 3 | 名称和标准号都不匹配 | | 边界情况 | 5 | 特殊场景测试 | | 批量测试 | 1 | 混合场景批量验证 | | **总计** | **25** | | --- ## 详细测试案例 ### 情况1: 正常(OK)- 5个案例 测试类: `TestCaseOK` | 编号 | 测试名称 | 输入标准名称 | 输入标准号 | 库中状态 | 预期结果 | |------|---------|-------------|-----------|---------|---------| | TC-OK-01 | 基本匹配 | 铁路桥涵设计规范 | TB 10002-2017 | XH | OK | | TC-OK-02 | 输入带书名号 | 《铁路桥涵设计规范》 | TB 10002-2017 | XH | OK | | TC-OK-03 | 试行状态 | 混凝土结构耐久性设计标准 | GB/T 50476-2019 | SX | OK | | TC-OK-04 | 带空格名称 | 铁路混凝土工程施工质量验收标准 | TB 10424-2018 | XH | OK | | TC-OK-05 | 库中带书名号 | 铁路工程抗震设计规范 | GB 50111-2006 | XH | OK | **验证规则**: - 名称和标准号完全匹配 - 支持书名号变体(输入/库中带或不带) - 支持空格差异 - 现行(XH)和试行(SX)都返回OK --- ### 情况2: 被替代(SUBSTITUTED)- 2个案例 测试类: `TestCaseSubstituted` | 编号 | 测试名称 | 输入标准名称 | 输入标准号 | 库中状态 | 替代标准 | 预期结果 | |------|---------|-------------|-----------|---------|---------|---------| | TC-SUB-01 | 单条替代 | 起重机 钢丝绳 保养、维护、检验和报废 | GB/T 5972-2016 | FZ→XH | GB/T 5972-2023 | SUBSTITUTED | | TC-SUB-02 | 带书名号输入 | 《起重机 钢丝绳 保养、维护、检验和报废》 | GB/T 5972-2016 | FZ→XH | GB/T 5972-2023 | SUBSTITUTED | **验证规则**: - 输入标准已废止(FZ) - 库中有同名现行替代标准 - 返回最新版本的替代标准信息 - 消息包含"已废止"和"替代"关键词 --- ### 情况3: 废止无替代(ABOLISHED)- 3个案例 测试类: `TestCaseAbolished` | 编号 | 测试名称 | 输入标准名称 | 输入标准号 | 库中状态 | 是否有替代 | 预期结果 | |------|---------|-------------|-----------|---------|-----------|---------| | TC-ABOL-01 | 缆索起重机 | 缆索起重机 | GB/T 28756-2012 | FZ | 无 | ABOLISHED | | TC-ABOL-02 | 电力高处作业防坠器 | 电力高处作业防坠器 | DL/T 1147-2009 | FZ | 无 | ABOLISHED | | TC-ABOL-03 | 多版本废止 | 旧版施工规范 | TB 10001-2000 | FZ(多个) | 无 | ABOLISHED | **验证规则**: - 输入标准已废止(FZ) - 库中没有同名现行替代标准 - 返回"废止无现行"状态 - 消息包含"已废止,无现行状态" --- ### 情况4: 不匹配(MISMATCH)- 6个案例 测试类: `TestCaseMismatch` | 编号 | 测试名称 | 输入标准名称 | 输入标准号 | 库中匹配记录 | 预期结果 | |------|---------|-------------|-----------|-------------|---------| | TC-MIS-01 | 年份不匹配 | 公路水运危险性较大工程专项施工方案编制审查规程 | JT/T 1495-2023 | 名称同, JT/T 1495-2024 XH | MISMATCH | | TC-MIS-02 | 带书名号年份不匹配 | 《公路水运危险性较大工程专项施工方案编制审查规程》 | JT/T 1495-2023 | 名称同, JT/T 1495-2024 XH | MISMATCH | | TC-MIS-03 | 名称匹配年份错误 | 铁路桥涵设计规范 | TB 10002-2020 | 名称同, TB 10002-2017 XH | MISMATCH | | TC-MIS-04 | 前缀匹配名称模糊 | 钢结构设计标准 | GB 50017-2010 | 钢结构设计标准, GB 50017-2017 XH | MISMATCH/NOT_FOUND | | TC-MIS-05 | 标准号匹配名称不匹配(现行) | 铁路桥涵设计 | TB 10002-2017 | 铁路桥涵设计规范, TB 10002-2017 XH | MISMATCH | | TC-MIS-06 | 标准号匹配名称不匹配(废止) | 某个错误名称 | GB/T 28756-2012 | 缆索起重机, GB/T 28756-2012 FZ | ABOLISHED | **验证规则**: - 标准号匹配但名称不匹配,或反之 - 现行状态返回MISMATCH - 废止状态按废止逻辑处理(ABOLISHED或SUBSTITUTED) - 返回实际库中的标准信息 --- ### 情况5: 不存在(NOT_FOUND)- 3个案例 测试类: `TestCaseNotFound` | 编号 | 测试名称 | 输入标准名称 | 输入标准号 | 库中是否存在 | 预期结果 | |------|---------|-------------|-----------|-------------|---------| | TC-NF-01 | 完全不存在 | 完全不存在的标准名称 | GB/T 99999-9999 | 不存在 | NOT_FOUND | | TC-NF-02 | 格式正确但不存在 | 某个规范 | TB 88888-2099 | 不存在 | NOT_FOUND | | TC-NF-03 | 名称部分相似 | 桥涵设计 | TB 10002-2017 | 不匹配 | NOT_FOUND/MISMATCH | **验证规则**: - 名称和标准号都无法在库中找到匹配 - 返回"标准库不存在"状态 - 消息提示用户确认 --- ### 边界情况 - 5个案例 测试类: `TestCaseEdgeCases` | 编号 | 测试名称 | 输入 | 说明 | 预期结果 | |------|---------|------|------|---------| | TC-EDGE-01 | 多版本选择最新 | 多版本标准测试, GB/T 99999-2015 | 库中有2015(FZ), 2020(XH), 2023(XH) | SUBSTITUTED, 返回2023版 | | TC-EDGE-02 | 空标准号 | 无标准号规范, "" | 仅按名称查询 | MISMATCH/NOT_FOUND | | TC-EDGE-03 | 特殊字符 | 《特殊(字符)》规范, Q/CR 9001-2020 | 名称含特殊字符 | OK | | TC-EDGE-04 | 全角空格 | 铁路桥涵 设计规范, TB 10002-2017 | 名称含全角空格 | OK | | TC-EDGE-05 | 空名称 | "", TB 10002-2017 | 名称为空字符串 | NOT_FOUND/MISMATCH | --- ### 批量测试 - 1个案例 测试类: `TestCaseBatch` | 编号 | 测试名称 | 输入列表 | 预期结果 | |------|---------|---------|---------| | TC-BATCH-01 | 混合标准批量测试 | [OK, SUBSTITUTED, ABOLISHED, MISMATCH, NOT_FOUND] | 按顺序返回对应状态码 | **验证规则**: - 批量处理多个标准 - 每个标准返回对应的状态 - 保持输入顺序 --- ## 测试数据构造 ### Mock数据定义 ```python def build_mock_data(): return [ # 情况1: 正常 {"id": 1, "standard_name": "铁路桥涵设计规范", "standard_number": "TB 10002-2017", "validity": "XH"}, {"id": 2, "standard_name": "《铁路工程抗震设计规范》", "standard_number": "GB 50111-2006", "validity": "XH"}, {"id": 3, "standard_name": "混凝土结构耐久性设计标准", "standard_number": "GB/T 50476-2019", "validity": "SX"}, {"id": 4, "standard_name": "铁路混凝土工程施工质量验收标准", "standard_number": "TB 10424-2018", "validity": "XH"}, # 情况2: 被替代 {"id": 5, "standard_name": "起重机 钢丝绳 保养、维护、检验和报废", "standard_number": "GB/T 5972-2016", "validity": "FZ"}, {"id": 6, "standard_name": "起重机 钢丝绳 保养、维护、检验和报废", "standard_number": "GB/T 5972-2023", "validity": "XH"}, # 情况3: 废止无替代 {"id": 7, "standard_name": "缆索起重机", "standard_number": "GB/T 28756-2012", "validity": "FZ"}, {"id": 8, "standard_name": "电力高处作业防坠器", "standard_number": "DL/T 1147-2009", "validity": "FZ"}, {"id": 9, "standard_name": "旧版施工规范", "standard_number": "TB 10001-2000", "validity": "FZ"}, {"id": 10, "standard_name": "旧版施工规范", "standard_number": "TB 10001-2005", "validity": "FZ"}, # 情况4: 不匹配 {"id": 11, "standard_name": "公路水运危险性较大工程专项施工方案编制审查规程", "standard_number": "JT/T 1495-2024", "validity": "XH"}, {"id": 12, "standard_name": "建筑地基基础设计规范", "standard_number": "GB 50007-2011", "validity": "XH"}, {"id": 13, "standard_name": "钢结构设计标准", "standard_number": "GB 50017-2017", "validity": "XH"}, # 边界: 多版本 {"id": 14, "standard_name": "多版本标准测试", "standard_number": "GB/T 99999-2015", "validity": "FZ"}, {"id": 15, "standard_name": "多版本标准测试", "standard_number": "GB/T 99999-2020", "validity": "XH"}, {"id": 16, "standard_name": "多版本标准测试", "standard_number": "GB/T 99999-2023", "validity": "XH"}, # 边界: 其他 {"id": 17, "standard_name": "无标准号规范", "standard_number": "DB 51/T 9999-2020", "validity": "XH"}, {"id": 18, "standard_name": "《特殊(字符)》规范", "standard_number": "Q/CR 9001-2020", "validity": "XH"}, ] ``` --- ## 运行测试 ```bash # 运行所有测试 cd utils_test/standard_new_Test python -m pytest test_standard_matching_rules.py -v # 运行特定类别的测试 python -m pytest test_standard_matching_rules.py::TestCaseOK -v python -m pytest test_standard_matching_rules.py::TestCaseSubstituted -v python -m pytest test_standard_matching_rules.py::TestCaseMismatch -v # 生成HTML报告 python -m pytest test_standard_matching_rules.py --html=report.html ``` --- ## 状态码说明 | 状态码 | 说明 | 消息格式 | |--------|------|---------| | OK | 正常 | 无问题 | | SUBSTITUTED | 被替代 | 《标准》(号)已废止,替代《标准》(号) | | ABOLISHED | 废止无现行 | 《标准》(号)已废止,无现行状态 | | MISMATCH | 不匹配 | 《提取》(号)与 实际《标准》(号)不匹配 | | NOT_FOUND | 不存在 | 《标准》(号)标准库不存在,请确认 | --- ## 匹配规则流程图(文字版) ``` 开始 │ ├─► 标准号精确匹配? │ │ │ ├─► 是 ► 名称匹配? │ │ │ │ │ ├─► 是 ► 时效性检查 │ │ │ │ │ │ │ ├─► 现行/试行 ► OK │ │ │ └─► 废止 ► 查找替代 ► 有则SUBSTITUTED, 无则ABOLISHED │ │ │ │ │ └─► 否 ► 名称模糊匹配? │ │ │ │ │ ├─► 是 ► 时效性检查 ► MISMATCH(现行) 或 废止处理 │ │ └─► 否 ► NOT_FOUND │ │ │ └─► 否 ► 标准号模糊匹配? │ │ │ ├─► 是 ► 名称匹配? │ │ │ │ │ ├─► 是 ► 时效性检查 ► MISMATCH(现行) 或 废止处理 │ │ └─► 否 ► NOT_FOUND │ │ │ └─► 否 ► 名称模糊匹配? │ │ │ ├─► 是 ► 名称精确匹配? │ │ │ │ │ ├─► 是 ► 时效性检查 ► MISMATCH(现行) 或 NOT_FOUND(废止) │ │ └─► 否 ► NOT_FOUND │ │ │ └─► 否 ► NOT_FOUND ``` --- *文档生成时间: 2026-03-30* *配套代码: test_standard_matching_rules.py*