AkiyamaMio9281/embedded-test-automation-harness

GitHub: AkiyamaMio9281/embedded-test-automation-harness

面向嵌入式/Android/Linux/ADAS 系统的测试自动化框架,整合 YAML 测试计划、日志解析、故障分诊和不稳定检测,帮助工程验证团队高效完成回归测试与问题定位。

Stars: 0 | Forks: 0

# 嵌入式测试自动化工具套件 ## 目的 为嵌入式、Android、Linux 或 ADAS 风格的系统测试构建一个逼真的自动化框架。 本项目专为涉及测试自动化、系统验证、移动芯片组测试、Linux/Android 调试、QA 以及 AI 辅助测试分诊的岗位而设计。 主要目标岗位: - Qualcomm AI/ADAS 测试自动化工程师 - Qualcomm 软件工程师实习生 - QA 实习生 - KLA 软件工程实习生 - 负有验证职责的 Intel 软件相关岗位 ## 核心价值 本项目应能展示你具备以下能力: - 设计测试计划 - 实现自动化测试用例 - 针对类设备日志和指标执行测试 - 检测故障和不稳定行为 - 解析系统日志 - 生成 Bug 分诊报告 - 熟悉 Linux/Android 风格的验证工作流 这不是一个简单的 pytest 演示。它应该看起来像一个紧凑版的工程验证工具套件。 ## 推荐技术栈 使用: - Python 3.10+ - pytest - pydantic - pandas - typer - rich - jinja2 - matplotlib 或 plotly - SQLite 可选: - adb 集成 - paramiko(用于基于 SSH 的 Linux 设备执行) - loguru(用于日志记录) - scikit-learn(用于不稳定测试分类) - FastAPI 或 Streamlit 仪表板 ## 建议的仓库结构 ``` embedded-test-automation-harness/ README.md requirements.txt pyproject.toml test_harness/ cli.py config.py device.py adb_device.py ssh_device.py simulated_device.py test_plan.py executor.py log_parser.py metrics_parser.py triage.py flaky.py report.py storage.py test_cases/ boot/ power/ camera/ connectivity/ ai_inference/ sample_logs/ android_logcat/ linux_dmesg/ perf/ outputs/ runs/ reports/ tests/ test_log_parser.py test_triage.py test_flaky.py test_executor.py docs/ test_strategy.md sample_triage_report.md android_linux_debug_notes.md ``` ## 最小可行版本 第一个有用的版本应包含: 1. YAML 测试计划格式。 2. 模拟设备后端。 3. 测试执行器。 4. Android logcat 解析器。 5. Linux dmesg 解析器。 6. 故障分类规则。 7. 不稳定测试检测器。 8. Markdown/HTML 报告。 9. 用于解析和分诊的 pytest 单元测试。 ## 示例测试计划 创建 `test_plans/smoke.yaml`: ``` name: chipset_smoke device: simulated_android iterations: 3 tests: - id: BOOT-001 name: Boot completes within threshold category: boot command: simulate_boot timeout_sec: 60 pass_criteria: max_boot_time_sec: 35 forbidden_log_patterns: - "kernel panic" - "fatal exception" - id: POWER-001 name: Idle power remains under threshold category: power command: simulate_idle_power timeout_sec: 30 pass_criteria: max_avg_power_mw: 800 - id: AI-001 name: AI inference latency stays below threshold category: ai_inference command: simulate_ai_inference timeout_sec: 45 pass_criteria: max_p95_latency_ms: 50 ``` ## 构建步骤 ### 1. 创建环境 ``` python -m venv .venv .\.venv\Scripts\Activate.ps1 python -m pip install --upgrade pip python -m pip install -r requirements.txt ``` 建议的 `requirements.txt`: ``` pydantic pyyaml pandas typer rich jinja2 pytest ``` ### 2. 定义设备接口 创建一个通用协议: ``` connect() run_command(command, timeout_sec) pull_logs() collect_metrics() disconnect() ``` 首先实现 `SimulatedDevice`。它应返回确定性的样本日志和指标。 后续添加: - `AdbDevice` - `SshDevice` 模拟后端使得项目无需硬件即可运行。 ### 3. 实现测试计划加载器 加载器应: - 读取 YAML - 验证必填字段 - 规范化类别名称 - 验证通过标准 - 生成带类型的测试计划对象 这体现了生产纪律,并能防止无提示的错误配置。 ### 4. 实现执行器 执行流程: ``` load test plan connect to device for each iteration: for each test: run command collect logs collect metrics evaluate pass criteria store result disconnect generate report ``` 结果字段: ``` run_id test_id iteration status duration_sec failure_reason log_path metrics_path triage_category timestamp ``` ### 5. 实现日志解析器 Android logcat 解析器应检测: - 致命异常 (fatal exception) - ANR (应用无响应) - 崩溃 - 看门狗 超时 - SELinux 拒绝 - 相机服务错误 - binder 事务失败 Linux dmesg 解析器应检测: - 内核恐慌 - oops - 段错误 - 驱动超时 - 温度降频 - 固件加载失败 - I/O 错误 每个解析器应返回结构化事件: ``` timestamp severity subsystem message signature ``` ### 6. 实现指标解析器 支持简单文件: ``` timestamp,metric,value,unit 2026-05-14T10:00:00,power_mw,720,mW 2026-05-14T10:00:01,inference_latency_ms,42,ms ``` 计算: - 平均值 - 最小值/最大值 - p50 (第 50 百分位数) - p95 (第 95 百分位数) - p99 (第 99 百分位数) - 基于阈值的通过/失败判定 ### 7. 实现分诊规则 创建确定性规则: ``` kernel panic -> System Stability fatal exception -> Framework Crash driver timeout -> Driver/Firmware thermal throttling -> Performance/Thermal p95 latency threshold breach -> Performance Regression intermittent failure across iterations -> Flaky ``` 输出应包含: - 可能的负责团队 - 严重程度 - 建议的下一步调试操作 示例: ``` Failure AI-001 classified as Performance Regression. p95 latency was 68 ms against a 50 ms threshold. Recommended next step: compare runtime logs against previous passing run and inspect CPU/GPU frequency traces. ``` ### 8. 实现不稳定测试检测 如果满足以下条件,则测试是不稳定的: - 在同一次运行的重复迭代中时好时坏 - 或其在多次运行中的故障特征发生变化 - 或延迟间歇性地超过阈值 将历史结果保存在 SQLite 中: ``` runs test_results failure_signatures metrics_summary ``` ### 9. 实现 CLI 示例: ``` python -m test_harness.cli run ` --plan test_plans/smoke.yaml ` --device simulated ` --output outputs/runs/run_001 ``` 其他命令: ``` python -m test_harness.cli parse-logs --input sample_logs/android_logcat python -m test_harness.cli summarize --run outputs/runs/run_001 python -m test_harness.cli compare --baseline outputs/runs/run_001 --candidate outputs/runs/run_002 ``` ### 10. 生成报告 报告应包含: - 运行摘要 - 通过/失败表格 - 故障分诊 - 不稳定测试列表 - 高频日志特征 - 延迟/功耗图表 - 建议的调试步骤 输出: ``` outputs/runs/run_001/results.csv outputs/runs/run_001/events.csv outputs/runs/run_001/metrics_summary.csv outputs/runs/run_001/report.md outputs/runs/run_001/report.html ``` ## 可选的高级功能 在 MVP(最小可行产品)之后添加这些功能: - adb 真实设备命令后端 - 用于 Linux 目标设备的 SSH 后端 - 运行模拟测试的 CI 集成 - 基于确定性事实的 AI 生成分诊摘要 - 显示运行历史的仪表板 - 基线与候选版本的回归比较 - 用于 CI 系统的 JUnit XML 导出 ## 测试计划 最少应包含的测试: - YAML 测试计划验证 - 日志解析器检测已知特征 - 指标解析器正确计算 p95 - 分诊将故障映射到类别 - 不稳定检测器识别混合通过/失败的结果 - 报告生成器写入预期文件 运行: ``` python -m pytest -q ``` ## 简历要点 使用如下要点: - 构建了一个嵌入式测试自动化工具套件,支持 YAML 测试计划、模拟 Android/Linux 设备执行、结构化日志解析和自动化故障分诊。 - 实现了延迟、功耗和稳定性检查,并在重复的验证运行中进行不稳定测试检测。 - 生成了适配 CI 的 Markdown/HTML 报告,汇总了通过率、故障特征、可能的负责团队以及建议的调试步骤。 ## 面试讨论点 准备好解释: - logcat 和 dmesg 如何辅助初步分诊 - 为什么不稳定测试在自动化中非常危险 - 通过标准应如何与执行代码分离 - 你将如何通过 adb 将该工具套件连接到真实的 Android 设备 - 如何比较基线和候选固件/软件版本 - 什么样的 Bug 报告对开发团队来说是优秀的报告 ## 完成标准 当满足以下条件时,项目即可作为作品集展示: - 模拟测试计划端到端运行 - 日志被解析为结构化事件 - 故障已被分类 - 检测到了不稳定行为 - 生成了报告 - 测试通过 - README 包含演示命令和示例输出路径 ## 许可证 MIT — 见 [LICENSE](LICENSE)。
标签:ADAS测试, ADB, AI辅助测试, Android Debug Bridge, Android测试, AV绕过, FastAPI, Flaky测试检测, Jinja2, KLA实习生, Linux测试, Linux调试, Matplotlib, Plotly, Pydantic, Pytest, Python, QA实习生, QA自动化, Rich, Scikit-learn, SQLite, Streamlit, Typer, YAML测试计划, 安全规则引擎, 嵌入式测试, 工程验证, 无后门, 日志解析, 机器学习分类, 测试报告, 测试自动化, 移动芯片组测试, 系统测试, 系统验证, 缺陷分诊, 自动化测试框架, 英特尔软件工程师, 访问控制, 证书伪造, 软件开发实践, 逆向工具, 集成测试, 高通测试工程师