需求文档test

LogHawk 详细需求文档

1. 项目概述

1.1 项目名称

LogHawk — 自动化 PA(功率放大器)日志分析与数据验证工具

1.2 项目目标

LogHawk 旨在为 PA 校准数据的完整性和一致性提供自动化验证。在 PA 产品的生产和调试过程中,涉及多种数据源(ProdDB 二进制数据库、Markdown 配置文档、JSON 配置文件、校准日志文件等),这些数据源之间的一致性对产品质量至关重要。LogHawk 通过自动化提取、对比和报告生成,替代了人工逐项核对的繁琐流程。

1.3 核心价值

  • 自动化:一键完成从数据提取到测试报告生成的全流程
  • 准确性:消除人工核对中的遗漏和错误
  • 可追溯性:通过 Allure 报告提供详细的测试证据
  • 易用性:提供 PyQt5 图形界面,降低使用门槛

1.4 技术栈

组件 技术
编程语言 Python 3.7+
GUI 框架 PyQt5
测试框架 pytest + pytest-subtests
报告框架 Allure Report
打包工具 PyInstaller
目标平台 Windows

2. 系统架构

2.1 整体架构图

┌─────────────────────────────────────────────────────────────────┐
│                        用户界面层 (GUI)                          │
│                      gui/interface.py                            │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────────────┐  │
│  │ 文件选择  │ │ 用例选择  │ │ 日志显示  │ │ 报告查看/导出     │  │
│  └──────────┘ └──────────┘ └──────────┘ └───────────────────┘  │
└────────────────────────────┬────────────────────────────────────┘
                             │
┌────────────────────────────▼────────────────────────────────────┐
│                      主控制层 (run.py)                           │
│  MainApplication 类 — 协调所有模块的执行顺序                      │
│  步骤: 清缓存 → 解析文件 → 提取数据 → 运行测试 → 生成报告        │
└────────────────────────────┬────────────────────────────────────┘
                             │
┌────────────────────────────▼────────────────────────────────────┐
│                     数据处理层 (data_manager/)                    │
│  ┌─────────────────┐  ┌──────────────────┐  ┌────────────────┐ │
│  │ 输入文件解析      │  │ PA 数据提取       │  │ 数据对比        │ │
│  │ module_extract   │  │ pa_data_extract  │  │ pa_target_     │ │
│  │ _InputFile/      │  │                  │  │ backoff/       │ │
│  └─────────────────┘  └──────────────────┘  └────────────────┘ │
│  ┌─────────────────┐  ┌──────────────────┐  ┌────────────────┐ │
│  │ 传感器分组验证    │  │ DAC 值验证        │  │ 校准目标值验证  │ │
│  │ sensor_group/    │  │ DacStartCheck_   │  │ log_and_md_    │ │
│  │                  │  │ data_manager/    │  │ Target...      │ │
│  └─────────────────┘  └──────────────────┘  └────────────────┘ │
│  ┌─────────────────┐  ┌──────────────────┐                     │
│  │ bin 转 txt 工具   │  │ 缓存清理          │                     │
│  │ bin_to_txt/      │  │ clear_cache.py   │                     │
│  └─────────────────┘  └──────────────────┘                     │
└────────────────────────────┬────────────────────────────────────┘
                             │
┌────────────────────────────▼────────────────────────────────────┐
│                     测试执行层 (test_case_manager/)               │
│  ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │
│  │test_proddb_target│ │test_proddb_      │ │test_transistor_ │ │
│  │                  │ │backoff           │ │group            │ │
│  └──────────────────┘ └──────────────────┘ └─────────────────┘ │
│  ┌──────────────────┐ ┌──────────────────┐                     │
│  │test_start_dac_   │ │test_pa_          │                     │
│  │value             │ │calibration_target│                     │
│  └──────────────────┘ └──────────────────┘                     │
└────────────────────────────┬────────────────────────────────────┘
                             │
┌────────────────────────────▼────────────────────────────────────┐
│                     报告生成层                                    │
│              Allure Report (HTML 可视化报告)                      │
└─────────────────────────────────────────────────────────────────┘

2.2 模块依赖关系

run.py (入口)
  ├── gui/interface.py          → 提供 GUI 界面
  ├── conftest.py               → pytest 结果收集器
  ├── data_manager/
  │   ├── clear_cache.py        → 清理 temps/, report/, logs/ 目录
  │   ├── module_extract_InputFile/
  │   │   ├── prase_file.py     → 主文件解析器(协调下面两个模块)
  │   │   ├── findMd_Json.py    → 查找 .md / .json / 压缩文件
  │   │   └── scan_Logs.py      → 扫描解压后的文件夹,定位关键文件
  │   ├── pa_data_extract.py    → 从 ProdDB/MD/JSON 提取 PA 数据
  │   │   └── bin_to_txt/       → 调用 DatabaseBinToText.exe 转换二进制
  │   ├── pa_target_backoff/
  │   │   └── pa_target_backoff.py → 对比 ProdDB 与 MD 的 target/backoff
  │   ├── sensor_group/
  │   │   └── sensor_group.py   → 对比配置文件与日志的传感器分组
  │   ├── DacStartCheck_data_manager/
  │   │   ├── extract_config.py          → 从 MD 数据生成 DAC 配置参考
  │   │   ├── extract_Dac_from_Log.py    → 从 paCal_debug 日志提取 DAC 值
  │   │   └── extract_pa_cal_StartDac.py → 从 PA 校准日志提取 Start DAC 值
  │   └── log_and_md_Targetcomparison/
  │       ├── json_extract_utils.py → 从 JSON/MD 生成期望校准目标值
  │       └── extract_log.py        → 从 paCal_debug 日志提取实际目标值
  └── test_case_manager/        → 5 个 pytest 测试用例

3. 输入文件需求

3.1 用户需要提供的输入

用户通过 GUI 选择一个文件夹,该文件夹需包含以下文件:

文件/文件夹 格式 说明 必需性
sys_hw_pid* 文本文件 包含硬件 PID 信息(如 "KRC 161 881/1" 必需
sys_hw_rev* 文本文件 包含硬件 REV 版本号(如 "R1A" 必需
ProdDb.bin 二进制文件 产品数据库,存储 PA 校准参数 必需
*.md Markdown 文件 PA 配置规格表,包含各 Band 的 target/backoff 参考值 必需
*.json JSON 文件 传感器分组配置,定义 Band 与 VDD ID 的映射关系 必需
*.zip 压缩包 包含日志文件的压缩包(内含下列日志文件) 必需
log_*_pa_cal.txt*_pa_bias_and_vdd.txt 文本日志 PA 校准日志,包含传感器分组信息和 Start DAC 值 必需
paCal_debug_Dpa_*/paCal_debug_Mpa_* 文件夹 包含每个晶体管的校准调试日志文件 必需

3.2 输入文件详细格式说明

3.2.1 sys_hw_pid 文件

  • 文件名以 sys_hw_pid 开头
  • 内容中包含双引号括起的 PID 字符串
  • 示例内容:"KRC 161 881/1"
  • 提取逻辑:正则 "([^"]+)" 匹配引号内的值,然后去空格、将 / 替换为 _

3.2.2 sys_hw_rev 文件

  • 文件名以 sys_hw_rev 开头
  • 内容中包含双引号括起的 REV 字符串
  • 示例内容:"R1A"

3.2.3 ProdDb.bin

  • 二进制格式的产品数据库文件
  • 通过 DatabaseBinToText.exe 工具转换为文本格式
  • 转换后的文本包含以下关键数据:
    • /componentConfigId 行:包含 paCtrl@版本号 信息
    • /IDpa:X.Y/target 行:DPA target 值(十六进制或十进制)
    • /IMpa:X.Y/target 行:MPA target 值
    • /GDpa:X.Y/backoff 行:DPA backoff 值
    • /GMpa:X.Y/backoff 行:MPA backoff 值
    • 其中 X 为 VDD ID,Y 为晶体管序号

3.2.4 Markdown 配置文件 (*.md)

  • 标准 Markdown 表格格式
  • 每行以 | 分隔列
  • 包含以下关键列:PID、REV、Band 列表、paCtrl 版本、DPA/MPA 标识、晶体管序号、target 值列表、backoff 值列表
  • 筛选逻辑:根据 PID + REV 匹配行,若无匹配则回退到 [ALL]

3.2.5 JSON 配置文件 (*.json)

  • 传感器分组配置文件
  • 结构示例:
{
  "['BandI']": {
    "vdd_id": [0, 1, 2, 3],
    "Shared_Channel": "True",
    "transistor_id_num": 2
  },
  "['BandVII']": {
    "vdd_id": [32, 33],
    "Shared_Channel": "False",
    "transistor_id_num": 2
  }
}
  • vdd_id:该 Band 对应的 VDD ID 列表
  • Shared_Channel:是否为共享通道(影响奇偶分组逻辑)
  • transistor_id_num:晶体管数量

3.2.6 PA 校准日志文件

  • 文件名格式:log_数字_数字_pa_cal.txt*_pa_bias_and_vdd.txt
  • 包含 Sensor group: 关键字及后续的设备分组信息
  • 包含 Found DB value .../start_dac_value for band BandX [ 数字 ] 格式的 Start DAC 值

3.2.7 paCal_debug 文件夹

  • 文件夹名匹配模式:*paCal_debug_(Dpa|Mpa)*
  • 内部文件命名格式:数字_paCal_debug_[D|M]pa_X_Y_pcZ.txt
    • X = VDD ID
    • Y = 晶体管序号
    • Z = PC(功率等级)序号
  • 每个文件包含:
    • write Writing to DAC: 数字 — 用于提取 DAC 写入值
    • findTargetStarting to find target: 数字 — 用于提取校准目标值

4. 数据处理流程详解

4.1 总体执行流程

当用户点击 "Run Program" 按钮后,run.py 中的 run_main_program() 方法按以下步骤执行:

Step 1: 清理缓存
    └── clean_and_reset_data_all()
        └── 删除并重建 temps/, report/, logs/ 三个目录

Step 2: 数据提取
    ├── get_paths()  — 解析输入文件,定位所有关键文件路径
    │   ├── FindMdJson.find_files()  — 查找 .md, .json, .zip 文件
    │   ├── ParseFile.unzip_file()   — 解压 ZIP 文件到 temps/
    │   └── LogParser.parse_logs()   — 扫描解压内容,定位关键文件
    │
    ├── [条件] 若选择了 target/backoff/dac/calibration 相关用例:
    │   └── PaDataExtractor.run()
    │       ├── read_sys_hw_info()        — 提取 PID/REV → sys_hw_data.json
    │       ├── read_proddb()             — bin→txt→提取数据 → proddb_data.json
    │       ├── read_md()                 — 解析 MD 表格 → md_data.json
    │       └── read_json_config()        — 读取 JSON 配置 → config_data.json
    │
    ├── [条件] 若选择了 target/backoff 用例:
    │   └── DataComparator.run()
    │       └── 对比 proddb_data 与 md_data
    │           → dpa_target.json, mpa_target.json
    │           → dpa_backoff.json, mpa_backoff.json
    │
    ├── [条件] 若选择了 transistor_group 用例:
    │   └── GroupExtractor.run()
    │       ├── extract_group_config()  — JSON配置→Dpa/Mpa格式 → sensor_group_config.json
    │       └── extract_group_log()     — 日志→提取分组信息 → sensor_group_log.json
    │
    ├── [条件] 若选择了 start_dac_value 用例:
    │   ├── extract_config.main()           — 生成 DAC 配置参考 → extract_config.txt
    │   ├── extract_Dac_from_Log.main()     — 从 debug 日志提取 DAC → extract_Dac_from_Log.txt
    │   └── extract_pa_cal_StartDac.main()  — 从校准日志提取 Start DAC → extract_pa_cal_StartDac.txt
    │
    └── [条件] 若选择了 pa_calibration_target 用例:
        ├── generate_extract_log()  — 从 JSON/MD 生成期望目标 → extractJson.txt
        └── extract_log()           — 从 debug 日志提取实际目标 → extractLog.txt

Step 3: 运行 pytest 测试
    └── pytest.main() 执行选中的测试用例,结果写入 allure_results/

Step 4: 生成 Allure 报告
    └── allure generate 命令生成 HTML 报告

4.2 中间数据文件说明

所有中间数据存储在项目根目录的 temps/ 文件夹下:

文件路径 生成模块 内容说明
temps/pa_config_md_proddb/sys_hw_data.json PaDataExtractor 硬件 PID 和 REV 信息
temps/pa_config_md_proddb/proddb_data.json PaDataExtractor 从 ProdDB 提取的 target/backoff 数据及 paCtrl 版本
temps/pa_config_md_proddb/md_data.json PaDataExtractor 从 Markdown 提取的 DPA/MPA 数据(按 Band 分组)
temps/pa_config_md_proddb/config_data.json PaDataExtractor 从 JSON 配置提取的 Band→VDD ID 映射
temps/dpa_target.json DataComparator DPA target 对比结果:{VDD.晶体管: [MD值, ProdDB值]}
temps/mpa_target.json DataComparator MPA target 对比结果
temps/dpa_backoff.json DataComparator DPA backoff 对比结果
temps/mpa_backoff.json DataComparator MPA backoff 对比结果
temps/sensor_group_config.json GroupExtractor 从配置文件生成的传感器分组(排序后)
temps/sensor_group_log.json GroupExtractor 从日志提取的传感器分组(排序后)
temps/extract_config.txt extract_config DAC 配置参考文件,格式:Dpa N.X-BandName=
temps/extract_Dac_from_Log.txt extract_Dac_from_Log 从 debug 日志提取的 DAC 值,格式:Dpa X.Y-pcZ-BandName=值
temps/extract_pa_cal_StartDac.txt extract_pa_cal_StartDac 从校准日志提取的 Start DAC 值,格式:DPA x.Y-BandName=值
temps/extractJson.txt json_extract_utils 期望校准目标值,格式:Dpa_X_Y_pcZ target: 值
temps/extractLog.txt extract_log 实际校准目标值,格式:Dpa_X_Y_pcZ target: 值
temps/allure_results/ pytest Allure 测试结果原始数据

5. 五大测试用例详解

5.1 test_proddb_target — ProdDB Target 值验证

目的:验证 ProdDB 中存储的 PA target 值与 Markdown 规格文档中定义的值一致。

数据来源

  • temps/dpa_target.json — DPA target 对比数据
  • temps/mpa_target.json — MPA target 对比数据

数据格式

{
  "0.0": [[期望值列表_from_MD], [实际值列表_from_ProdDB]],
  "0.1": [[期望值列表_from_MD], [实际值列表_from_ProdDB]],
  ...
}

"X.Y" 中 X 为 VDD ID,Y 为晶体管序号。

验证逻辑

  1. 遍历每个 DPA 分支(VDD.晶体管),比较 MD 值与 ProdDB 值
  2. 遍历每个 MPA 分支,比较 MD 值与 ProdDB 值
  3. 使用 pytest-subtests 为每个分支创建独立子测试
  4. 不一致时记录期望值和实际值到 Allure 报告

前置数据处理链

PaDataExtractor.run() → DataComparator.run() → dpa_target.json / mpa_target.json

5.2 test_proddb_backoff — ProdDB Backoff 值验证

目的:验证 ProdDB 中存储的 PA backoff 值与 Markdown 规格文档一致。

逻辑与 test_proddb_target 完全相同,只是数据来源为:

  • temps/dpa_backoff.json
  • temps/mpa_backoff.json

前置数据处理链

PaDataExtractor.run() → DataComparator.run() → dpa_backoff.json / mpa_backoff.json

5.3 test_transistor_group — 传感器分组验证

目的:验证代码中划分晶体管分组的逻辑是否正确,即 JSON 配置文件定义的分组与实际日志中记录的分组一致。

数据来源

  • temps/sensor_group_config.json — 从配置生成的分组
  • temps/sensor_group_log.json — 从日志提取的分组

配置→分组的转换逻辑GroupExtractor.convert_config_to_mpa_dpa):

  • 对于每个 Band 配置:
    • Shared_Channel = False:直接按 VDD ID 和晶体管序号生成 Dpa:X.Y / Mpa:X.Y 格式
    • Shared_Channel = True:将 VDD ID 按奇偶分组,偶数一组、奇数一组,分别生成
  • 输出格式示例:"Dpa:0.0 Dpa:2.0 Dpa:4.0" (同一行的多个设备属于同一传感器组)

日志→分组的提取逻辑GroupExtractor.extract_group_log):

  • 在日志中查找 Sensor group: 关键字
  • 取其下一行内容,去除时间戳后作为分组信息

验证逻辑

  • 将两个 JSON 数组按索引逐一对比
  • 每个索引位置的分组字符串必须完全一致

前置数据处理链

GroupExtractor.run() → sensor_group_config.json / sensor_group_log.json

5.4 test_start_dac_value — Start DAC 值验证

目的:验证 PA 校准是否从正确的 DAC 起始值开始。对比两个来源的 DAC 值:一个来自 paCal_debug 日志文件(实际写入 DAC 的值),另一个来自 PA 校准日志(系统记录的 Start DAC 值)。

数据来源

  • temps/extract_Dac_from_Log.txt — 从 paCal_debug 文件提取的 DAC 写入值
  • temps/extract_pa_cal_StartDac.txt — 从 PA 校准日志提取的 Start DAC 值

extract_Dac_from_Log.txt 生成逻辑

  1. 遍历 paCal_debug 文件夹中的所有文件
  2. 解析文件名 数字_paCal_debug_[D|M]pa_X_Y_pcZ.txt 获取类型/VDD/晶体管/PC
  3. 从每个文件中提取 write Writing to DAC: 数字 的 DAC 值
  4. 按 (类型, X, Y) 分组,在同组内按 Z 排序
  5. 若某文件无 DAC 值,继承前一个 PC 的值(继承机制)
  6. 从 extract_config.txt 获取 Band 后缀名
  7. 输出格式:Dpa X.Y-pcZ-BandName=DAC值

extract_pa_cal_StartDac.txt 生成逻辑

  1. 从 PA 校准日志中提取包含 Found DB valuestart_dac_value 的行
  2. 正则解析:Found DB value .*/(main|peak)/(mpa|dpa)/start_dac_value for band BandX [ 数字 ]
  3. main 映射为 y=0,peak 映射为 y=1
  4. 处理重复项:同一 (类型, y, Band) 出现多次时,y 值按 +2 递增
  5. 输出格式:DPA x.Y-BandName=DAC值

验证逻辑

  1. 解析两个文件为结构化数据
  2. extract_Dac_from_Log 只取 pc0 的行(首次 DAC 值即为起始值)
  3. 按 (类型, y值, Band名) 进行匹配
  4. 比较匹配到的 DAC 值是否一致

前置数据处理链

PaDataExtractor.run()
  → extract_config.main()           → extract_config.txt
  → extract_Dac_from_Log.main()     → extract_Dac_from_Log.txt
  → extract_pa_cal_StartDac.main()  → extract_pa_cal_StartDac.txt

5.5 test_pa_calibration_target — PA 校准目标值验证

目的:验证 PA 校准过程中使用的目标值(target)是否与配置文件中定义的一致。

数据来源

  • temps/extractJson.txt — 从 JSON/MD 配置生成的期望目标值
  • temps/extractLog.txt — 从 paCal_debug 日志提取的实际目标值

extractJson.txt 生成逻辑json_extract_utils.py):

  1. 读取 proddb_data.json 获取 pa_ctrl_version
  2. 读取 md_data.json 获取 DPA/MPA 数据
  3. 读取 config_data.json 获取 Band→VDD ID 映射
  4. 构建 Band→序列号范围映射(如 BandI: 0-31, BandVII: 32-63)
  5. 从 MD 数据中筛选目标 paCtrl 版本的数据
  6. 对每个序列号 x (0-63),找到对应 Band,遍历该 Band 下所有晶体管和 PC 等级
  7. 输出格式:Dpa_X_Y_pcZ target: 值(值为 MD 中的 target 值,单位已转换为 mW×1000)

extractLog.txt 生成逻辑extract_log.py):

  1. 遍历 paCal_debug 文件夹中的所有文件
  2. 解析文件名获取类型/X/Y/Z
  3. 从每个文件中提取 findTargetStarting to find target: 数字
  4. 按 (类型, X, Y) 分组,在同组内按 Z 排序
  5. 若某文件无 target 值,继承前一个 PC 的值
  6. 输出格式:Dpa_X_Y_pcZ target: 值

验证逻辑

  1. 解析两个文件为 {端口名: target值} 字典
  2. 以 extractLog 中的端口为基准遍历
  3. 在 extractJson 中查找对应端口的值
  4. 若找不到对应端口则跳过
  5. 比较两个值是否一致

前置数据处理链

PaDataExtractor.run()
  → generate_extract_log()  → extractJson.txt
  → extract_log()           → extractLog.txt

6. GUI 界面需求

6.1 主窗口布局

GUI 基于 PyQt5 实现,主窗口类为 Ui_MainWindow,包含以下区域:

  1. 文件路径选择区

    • 一个文本输入框 (pa_path_edit) 显示选中的文件夹路径
    • "Browse..." 按钮打开文件夹选择对话框
  2. 测试用例选择区 (Case Selection)

    • 可折叠分组控件 (CollapsibleGroup)
    • 每个分组包含一个组级复选框和多个子复选框
    • 支持全选/取消全选联动
    • 支持搜索过滤功能
    • 测试用例从 pytest.ini 的 markers 配置中读取
    • 格式:标记名: 分类, 描述
  3. 操作按钮区

    • "Run Program" — 执行主程序
    • "Open Report" — 打开 Allure 报告(调用 allure open
    • "Save Report" — 导出报告到指定文件夹
  4. 日志显示区

    • 实时显示执行过程的日志信息
    • 支持颜色编码(INFO=绿色, WARN=红色等)
    • 支持高亮前缀显示

6.2 CollapsibleGroup 控件特性

  • 点击标题栏可展开/折叠子项
  • 箭头指示器(▶/▼)显示展开状态
  • 组级复选框支持三态联动:
    • 全选子项 → 组级勾选
    • 部分选择 → 组级半选
    • 取消全部 → 组级取消
  • 鼠标悬停效果
  • 样式化边框和背景

7. 报告生成需求

7.1 Allure 报告

  • 测试执行后自动调用 allure generate 生成 HTML 报告
  • 报告存储在项目根目录的 report/ 文件夹
  • 支持通过 allure open 在浏览器中查看
  • 支持导出到用户指定目录(带时间戳命名:AllureReport_YYYYMMDD_HHMMSS

7.2 报告内容

  • 每个测试用例的通过/失败状态
  • 失败时附带期望值和实际值的详细对比
  • 按 Suite 分组:LogHawk > PA Test
  • 每个子测试(subtest)独立显示

7.3 执行摘要

  • GUI 日志区显示 pytest 执行摘要:
    • Passed 数量(绿色)
    • Failed 数量(红色)
    • Skipped 数量(蓝色)
    • Errors 数量(紫色)
    • 各分类下的具体用例列表

8. 关键算法与业务逻辑

8.1 PA 版本匹配逻辑

从 ProdDB 中提取 paCtrl 版本号(如 paCtrl_3.3.0),然后在 Markdown 数据中筛选该版本对应的行。这确保了对比的是同一版本的配置数据。

8.2 Band→VDD ID 映射

JSON 配置文件定义了每个 Band 对应的 VDD ID 列表。例如:

  • BandI → VDD ID [0, 1, 2, 3, ..., 31]
  • BandVII → VDD ID [32, 33, ..., 63]

这个映射用于将 ProdDB 中按 VDD ID 索引的数据与 MD 中按 Band 分组的数据进行对应。

8.3 共享通道的奇偶分组

Shared_Channel = True 时,同一 Band 的 VDD ID 按奇偶分为两组:

  • 偶数组:VDD ID 0, 2, 4, ...
  • 奇数组:VDD ID 1, 3, 5, ...
    每组内的设备共享同一传感器组。

8.4 DAC 值继承机制

在 paCal_debug 文件中,同一 (类型, X, Y) 组内的多个 PC 等级文件按 Z 值排序处理。如果某个 PC 等级的文件中没有找到 DAC/target 值,则继承前一个 PC 等级的值。如果第一个 PC(pc0)就没有值,则标记为 N/A

8.5 数据格式一致性校验

DataComparator 在对比前会验证:

  • MD 和 Config 的 Band 类型数量一致
  • MD 和 Config 的 Band 名称一致
  • ProdDB 和 Config 的 Band 数量一致
  • ProdDB 和 MD 的晶体管数量一致

只有所有校验通过后才进行逐项对比。


9. 配置与构建

9.1 pytest.ini 配置

[pytest]
markers =
    test_proddb_target: PA Tests,proddb target check
    test_proddb_backoff: PA Tests,proddb backoff check
    test_transistor_group: PA Tests,transistor group check
    test_start_dac_value: PA Tests,start dac value check
    test_pa_calibration_target: PA Tests,PA calibration target check
  • 每个 marker 的格式为 函数名: 分类, 描述
  • GUI 根据此配置动态生成测试用例选择界面

9.2 日志配置 (logger_config.py)

  • 日志同时输出到文件和控制台
  • 日志文件存储在 logs/ 目录
  • 格式:时间 - 级别 - 消息
  • 编码:UTF-8
  • 每次运行覆盖写入(mode='w')

9.3 打包配置 (build_package.py)

  • 使用 PyInstaller 打包为 Windows 可执行文件
  • 入口文件:run.py
  • 图标:gui/logo.ico
  • 包含所有数据文件和隐藏导入
  • 输出目录:dist/LogHawk/

9.4 依赖项

核心依赖:

  • PyQt5 == 5.15.11 — GUI 框架
  • pytest == 9.0.2 — 测试框架
  • pytest-subtests == 0.15.0 — 子测试支持
  • allure-pytest == 2.15.3 — Allure 报告集成
  • beautifulsoup4 == 4.14.3 — HTML 解析(可能用于报告处理)

10. 新增测试用例指南

如需添加新的测试用例,按以下步骤操作:

  1. data_manager/ 中实现数据处理逻辑

    • 创建新的数据提取/对比模块
    • 将处理结果保存为 JSON/TXT 到 temps/ 目录
  2. pytest.ini 中注册 marker

    markers =
        test_new_case: 分类名, 用例描述
    
  3. test_case_manager/ 中编写测试用例

    • 文件名:test_新用例名.py
    • 使用 @pytest.mark.test_新用例名 装饰器
    • 使用 @allure.suite("PA Test") 等 Allure 注解
    • 使用 subtests fixture 创建子测试
  4. run.pyrun_main_program() 中集成

    • 添加条件判断:if "test_new_case" in self.selected_cases:
    • 调用数据处理模块

11. 目录结构总览

LogHawk/
├── run.py                    # 应用入口 + 主控制逻辑
├── conftest.py               # pytest 结果收集器
├── logger_config.py          # 日志配置
├── pytest.ini                # pytest marker 配置
├── requirements.txt          # Python 依赖
├── build_package.py          # PyInstaller 打包脚本
├── README.md                 # 项目说明
├── .gitignore
│
├── gui/
│   ├── interface.py          # PyQt5 主界面(含 CollapsibleGroup 控件)
│   └── logo.ico              # 应用图标
│
├── data_manager/
│   ├── clear_cache.py                        # 缓存清理
│   ├── pa_data_extract.py                    # PA 数据提取(ProdDB/MD/JSON)
│   ├── bin_to_txt/                           # ProdDb.bin → txt 转换工具
│   ├── module_extract_InputFile/
│   │   ├── prase_file.py                     # 主文件解析器
│   │   ├── findMd_Json.py                    # .md/.json/.zip 文件查找
│   │   └── scan_Logs.py                      # 解压文件扫描
│   ├── pa_target_backoff/
│   │   └── pa_target_backoff.py              # Target/Backoff 数据对比
│   ├── sensor_group/
│   │   └── sensor_group.py                   # 传感器分组对比
│   ├── DacStartCheck_data_manager/
│   │   ├── extract_config.py                 # DAC 配置参考生成
│   │   ├── extract_Dac_from_Log.py           # DAC 值提取(从 debug 日志)
│   │   └── extract_pa_cal_StartDac.py        # Start DAC 值提取(从校准日志)
│   └── log_and_md_Targetcomparison/
│       ├── json_extract_utils.py             # 期望校准目标值生成
│       └── extract_log.py                    # 实际校准目标值提取
│
├── test_case_manager/
│   ├── test_proddb_target.py                 # ProdDB target 验证
│   ├── test_proddb_backoff.py                # ProdDB backoff 验证
│   ├── test_transistor_group.py              # 传感器分组验证
│   ├── test_start_dac_value.py               # Start DAC 值验证
│   └── test_pa_calibration_target.py         # PA 校准目标值验证
│
├── temps/                    # [运行时生成] 中间数据和 Allure 结果
├── report/                   # [运行时生成] Allure HTML 报告
└── logs/                     # [运行时生成] 日志文件
posted @ 2026-04-02 16:52  mo686  阅读(21)  评论(0)    收藏  举报