TEST_CASES.md 11 KB

标准库匹配规则测试案例文档

根据 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数据定义

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"},
    ]

运行测试

# 运行所有测试
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