OpenHarmony - 代码覆盖率分析

SkillDev tools

Provides UT-based code coverage report generation for OpenHarmony C/C++, supporting full and incremental coverage analysis; requires a test device connected via hdc. Use when: (1) the user requests full code coverage for a subsystem/component/module/test suite/test case; if a report path is provided

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the OpenHarmony - 代码覆盖率分析 skill

What this skill tells your AI

The instructions your AI receives, as published by openharmonyinsight/openharmony-skills in skills/ohos-ut-test-coverage-report-generation/SKILL.md and read by ahel’s review.


文档导航

  • 🚀 快速开始: 详见 references/quick-start.md - 环境配置、设备连接、执行示例
  • 性能说明: 详见 references/performance-guide.md - 预期耗时、资源占用、优化建议
  • 📚 使用示例: 详见 references/usage-examples.md - 全量/增量场景、参数匹配规则
  • 📖 参数指南: 详见 references/parameter-guide.md - 参数解析规则、验证规则、匹配规则详解
  • 💡 最佳实践: 详见 references/best-practices.md - 场景选择、优化建议、安全建议
  • 🔧 问题排查: 详见 references/troubleshooting.md - 常见问题排查步骤、错误恢复策略

快速开始

必须配置: {SKILL_DIR}/config/user-config.json(必须包含 code_root 字段)

执行示例:

  • 全量: "为 ability_base 部件生成全量代码覆盖率报告"
  • 增量: "为 ability_base 部件生成增量代码覆盖率报告"

📖 详见 references/quick-start.md(环境配置、设备连接)


Anti-Patterns - 绝对禁止事项

NEVER 做以下操作,否则会导致测试无法编译、运行:

禁止项原因正确做法
NEVER 修改源码我们只负责编译和执运行生成报告,不涉及修改源码与用例内容所有c/c++代码、skill内容禁止修改
NEVER 跳出预设流程预设流程以外的操作禁止,防止使用错误的命令和覆盖率工具按照执行流程并只能加载当前流程涉及的md和错误处理流程md
NEVER 在命令执行过程中检查状态同步阻塞命令必须等待完成禁止在命令执行时检查日志、进程等,必须等待命令自然返回或超时
NEVER 中断或轮询长时间运行的命令必须使用timeout并等待自然完成禁止主动中断或轮询检查命令状态,让timeout机制处理超时
NEVER 在编译中断后直接重试必须先清理编译缓存执行 rm -rf out/ 后再重试
NEVER 在多部件并行时使用相同输出目录会导致报告冲突每个部件使用独立的输出目录
NEVER 修改 lcov 分支覆盖率参数后不重新编译gcno 文件会不匹配修改参数后必须重新编译

执行前决策检查清单

在开始执行前,先问自己

💭 思考框架

  • 目标: 用户想要评估什么?(整个部件、变更部分、特定模块?)
  • 范围: 用户提供了哪些参数?(subsystem、part、module、testsuite、testcase?)
  • 场景: 适合使用全量还是增量?(日常开发用增量,定期检查用全量)
  • 资源: 磁盘空间和设备状态是否满足要求?

✅ 必须确认的3个关键问题:

  1. 目标范围正确性

    • 是全量(subsystem/part/module 支持)还是增量(仅支持 part)?
    • 如果是增量,确认没有传入 subsystem(会报错 INCREMENTAL_NOT_SUPPORT_SUBSYSTEM
  2. 输入完整性

    • 全量:subsystem、part、module 至少提供一个
    • 增量:part 必须提供(不能为空)
  3. 资源可用性

    • 磁盘空间充足?(全量需50GB+,增量需20GB+,详见 references/performance-guide.md
    • 设备已连接?(hdc list targets 可验证)

全量 vs 增量决策表

场景推荐类型预期耗时资源需求详见
PR 合并前验证增量30分-2小时20GB 磁盘references/best-practices.md
每周质量检查全量3-5小时50GB 磁盘references/performance-guide.md
重构后验证全量3-5小时50GB 磁盘references/best-practices.md
日常开发调试增量30分-2小时20GB 磁盘references/best-practices.md

执行流程

用户输入
    ↓
[1] 主入口 (SKILL.md)
    - 解析关键词和参数
    - 确认覆盖率类型 (全量/增量)
    ↓
[2] 配置检查 ⚠️ **MANDATORY - READ ENTIRE FILE**
在进入此步骤前,你必须完整读取 `references/01-config-checker.md`
的所有内容(约414行),不要设置任何行数限制。
**DO NOT Load**: 在完成此步骤前,不要加载后续参考文档。
执行内容:
    ├──[1] 获取基础变量 (SKILL_DIR、CODE_ROOT)
    ├──[2] 检查项目结构 (developer_test、xdevice、pr_local_coverage)
    ├──[3] 检查用户输入参数 (全量/增量覆盖率参数)
    ├──[4] 检查配置文件 (user-config.json内容、/etc/lcovrc)
    ├──[5] 解析部件名称 (subsystem/part)
    ├──[6] 检查设备连接配置
    └──[7] 返回配置和参数信息
    ↓
[3] 环境检查 ⚠️ **MANDATORY - READ ENTIRE FILE**
完成配置检查后,读取 `references/02-env-checker.md` 的所有内容(约150行)。
**DO NOT Load**: 在完成此步骤前,不要加载 03-dependency-installer.md。
执行内容:
    ├──[1] 操作系统检测 (仅支持Linux)
    ├──[2] 检查Python 版本 (需要3.8+)
    ├──[3] 检查工具依赖
    ├──[4] 检查Python依赖包
    ├──[5] 检查是否存在可执行编译命令的全仓根目录 (build_system.sh)
    ├──[6] 权限检查
    ├──[7] 磁盘空间检查
    └──[8] 返回环境状态,如果出现错误进入错误处理流程
    ↓
[4] 依赖安装 ⚠️ **MANDATORY - READ ENTIRE FILE**
完成环境检查后,读取 `references/03-dependency-installer.md` 的所有内容(约100行)。
**DO NOT Load**: 在完成此步骤前,不要加载执行模块。
执行内容:
    ├──[1] 安装系统依赖 (仅支持Linux)
    ├──[2] 安装Python包依赖 (需要3.8+)
    ├──[3] 验证安装结果
    ├──[4] 返回依赖安装状态,如果出现错误进入错误处理流程
    ↓
[5] 覆盖率执行流程
    ├── 全量:⚠️ **MANDATORY - READ ENTIRE FILE**
    当 `taskType = "full_coverage"` 时,读取 `references/04-full-coverage-executor.md`
    的所有内容(约472行)。**DO NOT Load**: 增量模式下不要加载此文档。
    │  ├── [1] 修改developer_test中的 user_config.xml 配置文件
    │  ├── [2] 执行 build_before_generate.py (如果用户已经编译完成则跳过)
    │  ├── [3] 编译用例 (检查skip_compile、预编译、构建命令、执行、验证)
    │  ├── [4] 启动框架并执行命令 (构建命令、拼接命令、执行、验证)
    │  ├── [5] 执行 after_lcov_branch.py (恢复源码)
    │  ├── [6] 移动报告到输出目录
    │  ├── [7] 解析报告
    │  └── [8] 清理环境
    └── 增量: ⚠️ **MANDATORY - READ ENTIRE FILE**
    当 `taskType = "incremental_coverage"` 时,读取 `references/05-incremental-coverage-executor.md`
    的所有内容。**DO NOT Load**: 全量模式下不要加载此文档。
        ├── [1] 执行本地编译脚本 (script/pr_local_coverage/local_build)
        ├── [2] 执行覆盖率流程脚本 (script/pr_local_coverage/pr_coverage)
        ├── [3] 移动报告到输出结果目录
        ├── [4] 恢复环境
        └── [5] 清理临时文件
    ↓
[6] 错误处理 ❌ **DO NOT LOAD(仅在错误时触发)**
在任何步骤出现错误时,读取 `references/06-error-handler.md` 的相关错误处理部分。
在步骤 [2]-[5] 期间,不要加载此文档。
        ├──[1] 识别错误类型
        ├──[2] 查找解决方案
        ├──[3] 提供用户友好的错误信息
        └──[4] 返回错误信息

参数说明

参数来源

  • code_root: 从 {SKILL_DIR}/config/user-config.jsoncode_root 字段获取
  • 其他参数: 从用户输入解析

参数详解

📖 详细的参数解析规则、验证规则和匹配规则请见: → references/parameter-guide.md - 完整的参数指南

快速参考

  • 全量覆盖率参数: subsystem、part、module、testsuite、testcase(至少提供一个)
  • 增量覆盖率参数: part(必须)、diff(可选,不提供则自动生成)
  • 通用参数: output(可选,默认 {CODE_ROOT}/coverage_result)、skip_compiler(可选,仅全量)

参数验证规则

📖 详见: references/parameter-guide.md - 参数验证规则部分


核心使用示例

详见 references/usage-examples.md - 全量/增量场景、参数匹配规则、错误示例(第1-389行)


错误恢复策略

错误类型恢复方法是否需要清理详见
配置错误修改 user-config.json 后重试references/troubleshooting.md
环境缺失运行 pip install / apt-getreferences/quick-start.md
编译失败清理编译缓存后重试是:rm -rf out/references/troubleshooting.md
测试超时检查设备状态,重试references/troubleshooting.md
报告生成失败检查 lcov 数据完整性是:重新生成 gcdareferences/troubleshooting.md
设备连接失败检查 hdc 配置,重新连接references/quick-start.md

模块说明

所有模块位于 references/ 目录:

  • 01-config-checker.md - 配置与参数检查模块
  • 02-env-checker.md - 环境与依赖检查模块
  • 03-dependency-installer.md - 依赖安装模块
  • 04-full-coverage-executor.md - 全量覆盖率执行模块
  • 05-incremental-coverage-executor.md - 增量覆盖率执行模块
  • 06-error-handler.md - 错误处理模块

脚本位于 scripts/ 目录:

  • check_gcno_files.py - gcno文件检查脚本
  • parse_coverage_report.py - 全量覆盖率报告数据解析脚本
  • run_test_with_monitor.sh - 后台执行全量覆盖率测试命令并监控hdc链接脚本
  • pr_local_coverage - 增量覆盖率报告脚本
  • addlcov - 备用工具

配置文件: config/user-config.json


变量定义

由 01-config-checker.md 获取并传递给后续模块:

  • SKILL_DIR: 当前SKILL所在目录(通过向上查找 SKILL.md 获取)
  • CODE_ROOT: 从 {SKILL_DIR}/config/user-config.json 的 code_root 字段获取

模块间传参信息

整体参数传输流程

主入口
  ↓
[01] config-checker
  ├──→ [02] env-checker
  ├──→ [04] full-coverage-executor (全量模式)
  ├──→ [05] incremental-coverage-executor (增量模式)
  └──→ [06] error-handler (错误时)

[02] env-checker
  ├──→ [03] dependency-installer
  └──→ [06] error-handler (错误时)

[03] dependency-installer
  └──→ [06] error-handler (错误时)

[04/05] 执行模块
  └──→ [06] error-handler (错误时)

01-config-checker.md 传入后续模块的参数

传递给 02-env-checker.md:

  • skill_dir: {SKILL_DIR}
  • code_root: {CODE_ROOT}
  • output_path: {output_path}
  • taskType: 任务类型
  • config.deviceInfo: 设备配置信息(完整)

传递给 04-full-coverage-executor.md (全量模式):

  • skill_dir: {SKILL_DIR}
  • code_root: {CODE_ROOT}
  • taskType: 任务类型
  • userInput.parameters: 用户解析的参数对象
  • config.deviceInfo: 设备配置信息(完整)

传递给 05-incremental-coverage-executor.md (增量模式):

  • skill_dir: {SKILL_DIR}
  • code_root: {CODE_ROOT}
  • taskType: 任务类型
  • userInput.parameters: 用户解析的参数对象
  • config.deviceInfo: 设备配置信息(完整)

02-env-checker.md 传入后续模块的参数

传递给 03-dependency-installer.md:

  • skill_dir: {SKILL_DIR}
  • code_root: {CODE_ROOT}
  • output_path: {output_path}
  • taskType: 任务类型
  • tools: 工具依赖状态
  • pythonPackages: Python包依赖状态
  • permissions: 权限状态

03-dependency-installer.md 传入后续模块的参数

传递给 04/05 执行模块:

  • isAllInstalled: 所有依赖是否已安装
  • dependencies: 依赖安装状态

模块调用规范

调用 references 下的模块时遵循以下规范:

调用顺序与参数传递

  • 01-config-checker.md

    • 步骤 [2] 调用
    • 输入:解析后的用户参数
    • 输出:完整配置信息 + 设备信息
    • 传递给:02、04、05
  • 02-env-checker.md

    • 步骤 [3] 调用
    • 输入:skill相关路径 + 设备信息
    • 输出:环境检查状态
    • 传递给:03
  • 03-dependency-installer.md

    • 步骤 [4] 调用
    • 输入:02的检查结果
    • 输出:依赖安装状态
    • 传递给:04/05
  • 04-full-coverage-executor.md

    • 步骤 [5] 调用(全量模式)
    • 输入:01的完整配置
    • 输出:覆盖率报告
  • 05-incremental-coverage-executor.md

    • 步骤 [5] 调用(增量模式)
    • 输入:01的完整配置
    • 输出:覆盖率报告
  • 06-error-handler.md

    • 任何错误时调用
    • 输入:错误信息
    • 输出:用户友好的错误信息

重要原则

  • 单向传递:只按流程顺序传递信息,禁止反向引用
  • 完整性:01提供完整配置,02/03不再重复检查
  • 一致性:所有序号和流程图保持一致

Signals

GitHub stars
34
Forks
7
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
ohos-ut-test-coverage-report-generation
Source
github.com/openharmonyinsight/openharmony-skills