mcpField
C
check-test-code-quality

check-test-code-quality

github.com/openharmonyinsightTesting & quality3547 installsUpdated 11w ago
Repository

About check-test-code-quality

A code-quality scan orchestrator for OpenHarmony XTS test projects. It checks test code, build configuration, and related files against 23 rules, producing summary and detail reports; optional automatic fixes cover six rules.

Key features

  1. 01Filter scans by severity or selected rules
  2. 02Run 23 test-quality checks
  3. 03Collect files and identify standalone XTS projects
  4. 04Generate Markdown summaries and Excel reports
  5. 05Automatically fix and recheck six supported rules

Use cases

  1. 01Check XTS test code against quality rules
  2. 02Summarize test-quality issues across projects
  3. 03Fix supported findings and verify scan results

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/openharmonyinsight/openharmony-skills --skill check-test-code-quality

After installing, type/check-test-code-qualityin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

README.md
guides/
FIX_GUIDE.md
QUICK_START.md
README.md
guides/R008_testcase_format/
R008_FIX_GUIDE.md
guides/R011_testsuite_duplicate/
R011_FIX_ANALYSIS.md
R011_FIX_GUIDE.md
guides/R012_p7b_signature/
R012_ENTERPRISE_SYSTEM_PERMISSION_GUIDE.md
R012_FIX_GUIDE.md
R012_FIX_SCRIPT_DESIGN.md
R012_UNKNOWN_PERMISSION_GUIDE.md
guides/R012_p7b_signature/signature_tools/
myApplication_ohos_Provision.p7b
OpenHarmony.p12
OpenHarmonyProfileRelease.pem
signatureP7b.bat
temp_profile.p7b
UnsgnedReleasedProfileTemplate.json
使用指导.docx
guides/R014_hap_naming/
R014_HAP_NAMING_GUIDE.md
guides/R016_testcase_naming/
R016_FIX_GUIDE.md
guides/R018_testcase_duplicate/
R018_DYNAMIC_FIX_SUMMARY.md
R018_DYNAMIC_TESTCASE_FIX.md
R018_FIX_GUIDE.md
references/
ENGINE_IDENTITY.md
project_level_scan.md
REPORT_FORMAT.md
SCAN_ALGORITHMS.md
subsystem_mapping.md
TRAPS.md
VERSION_HISTORY.md

Details

From the project README

XTS测试代码质量检查 - 编排器

本文件是模型执行指令,负责调度23个独立规则技能完成扫描。

模型执行指令

当用户触发此技能时(如 /check-test-code-quality /path/to/code --level all),按以下步骤执行:

步骤1: 解析参数

从用户输入中提取扫描路径(必填)和选项参数。完整参数定义见 skill_config.json 的 usage 字段。

参数互斥说明: --rules 与 --level 建议不要同时使用。两者功能重叠(都是筛选执行规则),同时使用容易产生混淆。优先使用 --rules 指定具体规则,或使用 --level 按严重级别批量选择。如果同时指定,--rules 先生效,--level 再从中过滤(不推荐此用法)。

--level 过滤规则(定义见 skill_config.json 的 rules 字段):

  • critical: R001-R004,R006,R007,R010-R012,R014,R017-R023(17个)
  • warning: R005,R008,R009,R013,R015,R016(6个)
  • all: 全部23个
步骤2: 环境准备(文件收集 + 独立XTS工程识别)

本步骤是后续所有规则扫描的前置依赖,必须在规则扫描之前完成。

2a. 文件收集

使用Glob工具遍历扫描路径,按文件类型分桶收集,并输出统计信息:

类别文件模式相关规则说明
源代码文件**/*.ets, **/*.ts, **/*.js(排除.test后缀)R001-R006,R019,R020,R022,R023所有源代码,包括页面/模块/Ability文件
测试文件**/*.test.ets, **/*.test.ts, **/*.test.jsR004,R008,R009,R011,R013,R015,R016,R018重要: 使用 endswith('.test.ets') 等识别多后缀文件
构建文件**/BUILD.gnR010,R014GN构建配置
配置文件**/Test.jsonR007测试配置
签名文件**/*.p7bR012DER二进制签名证书
能力配置**/syscap.jsonR017系统能力声明
包配置**/oh-package.json5R021hypium版本检测

输出示例:

[文件收集]
  源代码文件: 86647
  测试文件: 29074
  BUILD.gn: 4028
  Test.json: 3386
  p7b: 3223
  syscap.json: 5269
  oh-package.json5: 6960
2b. 识别独立XTS工程

部分规则(R011 testsuite重复、R019 .key重复、R020 .id重复、R021 hypium版本)的检测范围是工程级,需要先识别独立XTS工程边界。

识别逻辑(详见 references/ENGINE_IDENTITY.md):

  1. 找到所有包含 BUILD.gn 的目录
  2. 过滤包含子 BUILD.gn 的父目录(仅非group类型)
  3. 排除 group() 类型的 BUILD.gn 本身
  4. 剩余目录即为独立XTS工程

输出示例:

[独立XTS工程]
  识别到 3624 个独立XTS工程
步骤3: 逐规则扫描

预置脚本规则(仅1条):

  • R004: 测试用例缺少断言(实现在 scripts/r004_scanner.py)

R004 必须使用预置脚本: R004(测试用例缺少断言)是 L5 最复杂规则,涉及递归函数调用链追踪、类方法提取、跨文件 import 解析、辅助函数 try-catch 缺陷检测等。必须使用 scripts/r004_scanner.py 预置脚本执行 R004 扫描,模型手动实现极易导致严重误报(历史教训:v1 版 23,152 个误报)。注意:R004当前存在误报问题,需要优化间接断言追踪算法。

动态生成规则(共22条,根据各规则的 rules/Rxxx/SKILL.md 动态生成扫描代码):

  • R001: 禁止使用getSync系统接口
  • R002: 错误码断言必须是number类型
  • R003: 禁止恒真断言
  • R005: 组件尺寸使用固定值
  • R006: 禁止基于设备类型差异化
  • R007: Test.json禁止配置项
  • R008: 用例声明格式不规范
  • R009: @tc.number命名不规范
  • R010: part_name/subsystem_name不匹配
  • R011: testsuite重复
  • R012: 签名证书APL等级和app-feature配置错误
  • R013: 注释的废弃代码
  • R014: 测试HAP命名不规范
  • R015: Level参数缺省
  • R016: testcase命名规范
  • R017: syscap.json配置多个能力
  • R018: testcase重复
  • R019: .key重复
  • R020: .id重复
  • R021: hypium版本号>=1.0.26
  • R022: errcode值断言使用==而非===
  • R023: 禁止errcode值类型强转后断言

除R004外,所有规则的扫描代码由模型在运行时根据 rules/Rxxx/SKILL.md 中的检测逻辑和正则模式动态生成并执行。生成代码应:

  1. 严格遵循规则文件中的检测逻辑
  2. 使用规则文件中定义的正则模式
  3. 注意规则文件中的"已知陷阱"章节,避免常见误报
  4. 返回标准格式的问题列表

R010 外部数据依赖: R010需要从远程仓库获取3个配置文件构建子系统-部件映射表。如果因网络原因无法获取映射表数据,URL不可达时需明确告警,不可静默返回0个问题。

共性工具库: scripts/common.py 包含所有规则共享的工具函数(文件收集、it()/describe()块解析、独立XTS工程识别、子系统映射、报告生成等)。当对应 references/ 下的文档更新时,common.py 中的代码也需同步更新(每个函数头部标注了同步来源)。

动态生成规则执行流程:

  1. 读取 rules/Rxxx/SKILL.md 获取该规则的完整检测逻辑
  2. 严格按照规则文件中的检测逻辑、正则模式生成扫描代码
  3. 特别注意: 读取规则文件中的"已知陷阱"章节,避免常见误报
  4. 执行生成的扫描代码
  5. 每条issue必须包含以下字段:
{
    'rule': 'R004',
    'type': '测试用例缺少断言',
    'severity': 'Critical',
    'file': 'rel/path.test.ets',
    'line': 25,
    'testcase': 'testName',
    'snippet': '...',
    'suggestion': '...',
    'subsystem': '元能力',
}

testcase字段: 解析it()块范围(算法见 references/SCAN_ALGORITHMS.md),判断问题行号所属it()块。非测试文件或不在it()块内填 -。

subsystem字段: 使用 references/subsystem_mapping.md 映射表,按最长目录前缀匹配(算法见 references/SCAN_ALGORITHMS.md)。未匹配到填 -。

步骤4: 生成报告

汇总所有规则结果,生成:

强制要求: 本次实际执行的规则扫描结果必须全部展示,即使问题数为0也不能省略。未在本次扫描范围内的规则不得出现在报告中。

  1. Markdown统计报告: 终端输出本次执行规则的扫描结果,格式如下:

    示例(--level warning):

    | 规则编号 | 问题类型 | 严重级别 | 问题数量 |
    |---------|---------|---------|---------|
    | R005 | 组件尺寸使用固定值 | Warning | 120 |
    | R008 | 用例声明格式不规范 | Warning | 0 |
    | R009 | @tc.number命名不规范 | Warning | 45 |
    | R013 | 注释的废弃代码 | Warning | 0 |
    | R015 | Level参数缺省 | Warning | 88 |
    | R016 | testcase命名规范 | Warning | 0 |
    

    示例(--level critical):

    | 规则编号 | 问题类型 | 严重级别 | 问题数量 |
    |---------|---------|---------|---------|
    | R001 | 禁止使用getSync系统接口 | Critical | 300 |
    | R002 | 错误码断言必须是number类型 | Critical | 0 |
    ...(仅展示本次执行的17个Critical规则)
    | R023 | 禁止errcode值类型强转后断言 | Critical | 0 |
    

    示例(--rules R001,R003):

    | 规则编号 | 问题类型 | 严重级别 | 问题数量 |
    |---------|---------|---------|---------|
    | R001 | 禁止使用getSync系统接口 | Critical | 300 |
    | R003 | 禁止恒真断言 | Critical | 0 |
    

    禁止:

    • 省略问题数量为0的规则
    • 只显示有问题的规则
    • 展示不在本次扫描范围内的规则
  2. Excel报告: UTF-8 BOM编码,包含两个sheet页:

    • Sheet 1 - "代码质量检查报告": 12列问题明细(详见 references/REPORT_FORMAT.md)
    • Sheet 2 - "问题扫描结果汇总": 仅列出本次实际执行的规则统计,表头为 规则编号 | 问题类型 | 严重级别 | 问题数量,所有本次执行的规则必须全部列出(问题数量为0的也必须显示)
步骤5: 完整性检查

确认本次扫描范围内的所有规则都已执行,报告统计无遗漏。未在本次扫描范围内的规则无需检查。

步骤6: 自动修复(仅当用户指定 --fix 时执行)

当用户命令包含 --fix 参数时,在步骤5完成后,对扫描发现的问题按以下流程执行自动修复。

重要: --fix 仅支持以下6条规则。其余17条规则(R001-R007,R009,R010,R013,R015,R017,R019-R023)不支持自动修复,即使用户指定了这些规则,也仅执行扫描不执行修复。

  1. 筛选可修复规则: 仅修复本次扫描中以下6条规则的问题,忽略不支持的规则
  2. 按规则逐个修复: 对每条规则,按对应修复指南执行修复
  3. 修复后验证: 修复完成后重新扫描已修复的规则,确认问题数减少

支持自动修复的规则(共6条):

规则修复指南修复内容
R008guides/R008_testcase_format/R008_FIX_GUIDE.md@tc.xxx冒号改空格、删除多余空行
R011guides/R011_testsuite_duplicate/R011_FIX_GUIDE.mddescribe名称追加Adapt后缀
R012guides/R012_p7b_signature/R012_FIX_GUIDE.mdp7b签名证书重新生成(需hap-sign-tool.jar)
R014guides/R014_hap_naming/R014_HAP_NAMING_GUIDE.mdBUILD.gn hap命名修正+Test.json同步
R016guides/R016_testcase_naming/R016_FIX_GUIDE.md特殊字符移除+Adapt后缀+同步@tc.name
R018guides/R018_testcase_duplicate/R018_FIX_GUIDE.mdtestcase名称去重+Adapt后缀+同步@tc.name

修复执行要求:

  • 执行修复前,读取对应 guides/ 下的修复指南,严格按照指南中的修复规则执行
  • R012修复需要使用签名工具(guides/R012_p7b_signature/signature_tools/),如果工具不可用则提示用户手动修复
  • 修复会直接修改源文件,修复前必须提示用户确认或建议提交代码到版本控制系统
  • 修复完成后,对已修复的规则重新扫描验证,输出修复前后的问题数量对比

使用示例:

/check-test-code-quality /path/to/code --rules R008,R016 --fix
/check-test-code-quality /path/to/code --level all --fix

规则总览

完整规则列表(名称、扫描范围、详细实现路径)见 skill_config.json 的 rules 和 rule_descriptions 字段。各规则检测逻辑见 rules/Rxxx/SKILL.md。

高频陷阱速查(扫描时必须注意)

陷阱影响规则要点
字符串中大括号干扰it()块提取R004,R015,R016,R018,R019,R020用状态机追踪字符串内/外状态
反引号模板字符串中撇号干扰R004,R018追踪in_backtick状态
p7b是DER二进制,json.loads必失败R012用容错解码+正则提取
R001/R005/R006须扫描所有源文件R001,R005,R006不能只扫描.test文件
R016只检查字符集,不限制命名格式R016用^[a-zA-Z0-9_-]+$,不用格式正则
R016检测it()参数,不是@tc.nameR016严禁用@tc.name值作为检测源
R006只检测条件判断R006赋值和日志打印不是问题
group父BUILD.gn不阻止子工程R011,R019,R020陷阱10,见references/TRAPS.md
R010依赖远程映射表,静默返回0R010必须从远程获取3个配置文件构建映射表,URL不可达时需明确告警,见陷阱11

详细陷阱说明见 references/TRAPS.md。

详细文档索引

文档说明
references/TRAPS.md11个已知扫描陷阱的详细说明和修复代码
references/REPORT_FORMAT.mdExcel/CSV报告格式规范(12列表头、修复建议格式)
references/ENGINE_IDENTITY.md独立XTS工程识别规范(group类型处理)
references/SCAN_ALGORITHMS.mdit()/describe()块提取与子系统映射算法规范
references/subsystem_mapping.md97条子系统路径映射表
references/project_level_scan.md工程级检测共享逻辑(R011/R019/R020/R021)
references/VERSION_HISTORY.md版本变更记录
skill_config.json技能配置中心(规则定义、参数、输出格式)
scripts/r004_scanner.pyR004预置扫描脚本(递归断言追踪,必须使用)
scripts/simple_rules.py共性扫描工具函数和正则模式(供动态生成代码参考)
scripts/common.py共性工具库(文件收集、块解析、工程识别、报告生成)
scripts/main.py扫描入口(参数解析、规则调度、报告输出)
guides/FIX_GUIDE.md问题修复指南

Comments

Markdown supported