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测试计划, 安全规则引擎, 嵌入式测试, 工程验证, 无后门, 日志解析, 机器学习分类, 测试报告, 测试自动化, 移动芯片组测试, 系统测试, 系统验证, 缺陷分诊, 自动化测试框架, 英特尔软件工程师, 访问控制, 证书伪造, 软件开发实践, 逆向工具, 集成测试, 高通测试工程师