需求文档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 为晶体管序号。
验证逻辑:
- 遍历每个 DPA 分支(VDD.晶体管),比较 MD 值与 ProdDB 值
- 遍历每个 MPA 分支,比较 MD 值与 ProdDB 值
- 使用
pytest-subtests为每个分支创建独立子测试 - 不一致时记录期望值和实际值到 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.jsontemps/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 生成逻辑:
- 遍历 paCal_debug 文件夹中的所有文件
- 解析文件名
数字_paCal_debug_[D|M]pa_X_Y_pcZ.txt获取类型/VDD/晶体管/PC - 从每个文件中提取
write Writing to DAC: 数字的 DAC 值 - 按 (类型, X, Y) 分组,在同组内按 Z 排序
- 若某文件无 DAC 值,继承前一个 PC 的值(继承机制)
- 从 extract_config.txt 获取 Band 后缀名
- 输出格式:
Dpa X.Y-pcZ-BandName=DAC值
extract_pa_cal_StartDac.txt 生成逻辑:
- 从 PA 校准日志中提取包含
Found DB value和start_dac_value的行 - 正则解析:
Found DB value .*/(main|peak)/(mpa|dpa)/start_dac_value for band BandX [ 数字 ] - main 映射为 y=0,peak 映射为 y=1
- 处理重复项:同一 (类型, y, Band) 出现多次时,y 值按 +2 递增
- 输出格式:
DPA x.Y-BandName=DAC值
验证逻辑:
- 解析两个文件为结构化数据
- extract_Dac_from_Log 只取 pc0 的行(首次 DAC 值即为起始值)
- 按 (类型, y值, Band名) 进行匹配
- 比较匹配到的 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):
- 读取
proddb_data.json获取pa_ctrl_version - 读取
md_data.json获取 DPA/MPA 数据 - 读取
config_data.json获取 Band→VDD ID 映射 - 构建 Band→序列号范围映射(如 BandI: 0-31, BandVII: 32-63)
- 从 MD 数据中筛选目标 paCtrl 版本的数据
- 对每个序列号 x (0-63),找到对应 Band,遍历该 Band 下所有晶体管和 PC 等级
- 输出格式:
Dpa_X_Y_pcZ target: 值(值为 MD 中的 target 值,单位已转换为 mW×1000)
extractLog.txt 生成逻辑(extract_log.py):
- 遍历 paCal_debug 文件夹中的所有文件
- 解析文件名获取类型/X/Y/Z
- 从每个文件中提取
findTargetStarting to find target: 数字 - 按 (类型, X, Y) 分组,在同组内按 Z 排序
- 若某文件无 target 值,继承前一个 PC 的值
- 输出格式:
Dpa_X_Y_pcZ target: 值
验证逻辑:
- 解析两个文件为
{端口名: target值}字典 - 以 extractLog 中的端口为基准遍历
- 在 extractJson 中查找对应端口的值
- 若找不到对应端口则跳过
- 比较两个值是否一致
前置数据处理链:
PaDataExtractor.run()
→ generate_extract_log() → extractJson.txt
→ extract_log() → extractLog.txt
6. GUI 界面需求
6.1 主窗口布局
GUI 基于 PyQt5 实现,主窗口类为 Ui_MainWindow,包含以下区域:
-
文件路径选择区
- 一个文本输入框 (
pa_path_edit) 显示选中的文件夹路径 - "Browse..." 按钮打开文件夹选择对话框
- 一个文本输入框 (
-
测试用例选择区 (Case Selection)
- 可折叠分组控件 (
CollapsibleGroup) - 每个分组包含一个组级复选框和多个子复选框
- 支持全选/取消全选联动
- 支持搜索过滤功能
- 测试用例从
pytest.ini的 markers 配置中读取 - 格式:
标记名: 分类, 描述
- 可折叠分组控件 (
-
操作按钮区
- "Run Program" — 执行主程序
- "Open Report" — 打开 Allure 报告(调用
allure open) - "Save Report" — 导出报告到指定文件夹
-
日志显示区
- 实时显示执行过程的日志信息
- 支持颜色编码(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. 新增测试用例指南
如需添加新的测试用例,按以下步骤操作:
-
在
data_manager/中实现数据处理逻辑- 创建新的数据提取/对比模块
- 将处理结果保存为 JSON/TXT 到
temps/目录
-
在
pytest.ini中注册 markermarkers = test_new_case: 分类名, 用例描述 -
在
test_case_manager/中编写测试用例- 文件名:
test_新用例名.py - 使用
@pytest.mark.test_新用例名装饰器 - 使用
@allure.suite("PA Test")等 Allure 注解 - 使用
subtestsfixture 创建子测试
- 文件名:
-
在
run.py的run_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/ # [运行时生成] 日志文件

浙公网安备 33010602011771号