已合并
[test] UT 覆盖率收集接入:run-tests.sh 统一 --coverage/-c 选项 #39
[test] UT 覆盖率收集接入:run-tests.sh 统一 --coverage/-c 选项 #39
已合并
guanxinghua创建于 9月23日
guanxinghua成员
9月23日

背景

流水线门禁要求提供 UT 执行成功记录(执行逻辑 + 覆盖率收集策略)。本 PR 把覆盖率收集接进现有唯一测试入口 scripts/run-tests.sh,门禁默认路径零变化。

改动

  • 仓顶与三包入口统一支持 --coverage / -c(与 scope 顺序不限;环境变量 COVERAGE=1 等价,供流水线注入)
  • insight:新增 test:cov(pretest + vitest --coverage);cpx:追加 --coverage,provider 转为本包 devDependency 且缺失自愈补装;sift:pytest --cov(pytest-cov 入 dev extra,随 .[dev] 自愈)
  • 输出降噪:vitest dot + passed-only 静默(失败详情保留);sift 跑完打一行总覆盖率;各包跑完提示明细文件位置
  • 覆盖率产物与执行日志目录全部 gitignore,不入库

验证(分支 ut-coverage,基线 d18ef07)

  • bash scripts/run-tests.sh all:ALL PASSED,退出码 0 —— insight 1535 / cpx 225 / sift 1805 通过,0 失败
  • bash scripts/run-tests.sh all --coverage:ALL PASSED —— 行覆盖 insight 58.00% / cpx 61.88% / sift 89.46%

🤖 Generated with Claude Code

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 guanxinghua 的贡献)
Gguanxinghua成员
9月23日 创建了 pull request,commit 1ea549e6
CANN-robotCANN-robot成员
9月23日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
9月23日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.


PR Approval Progress

✅ Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
repo-cann/cannbot-sentry ✅ qwren, hangdu (2/2) ✅ qwren (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

guanxinghua, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
guanxinghua成员
9月23日 评论:

compile

likedislike
Gguanxinghua成员
9月23日 预合并成功(commit_id: ba0c9cbc4545635fa87db0660557a071289c4e00)
CANN-robot
CANN-robot成员
9月23日 评论:
🚀 CI 流水线已启动
📋 执行详情: 点击查看流水线
likedislike
CANN-robotCANN-robot成员
9月23日 添加了label:ci-pipeline-running
CANN-robotCANN-robot成员
9月23日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
9月23日 添加了label:ci-pipeline-passed
hangdu成员9月23日进行代码检视2
packages/cpx/scripts/run-tests.sh
已过期
@@ -60,1 +74,4 @@
6074 
75+# coverage provider 从本包目录解析(借 insight 的 vitest 二进制不连带),
76+# COVERAGE=1 且缺失时自愈安装 devDependencies
77+if [ "${COVERAGE:-0}" = "1" ] && ! node -e "require.resolve('@vitest/coverage-v8')" >/dev/null 2>&1; then
hangdu9月23日评论:

这段 provider 自愈安装在 e2e 模式下也会触发:./scripts/run-tests.sh e2e --coverage(或环境变量 COVERAGE=1 + e2e)时 coverage 对 e2e 并不生效(文件头注释也是这么说的),但 provider 缺失仍会先跑一次 npm install——网络受限/离线环境下 e2e 还没跑用例就先挂在装依赖上。建议把这个检查 gate 在 [ "$MODE" = "ut" ],e2e 路径完全不碰。

likedislike
System
系统消息系统
9月23日 评论:

changed this line on cb28ab18 view diff detail

hangdu成员9月23日进行代码检视1
packages/cpx/scripts/run-tests.sh
@@ -66,0 +86,4 @@
86+ CANNBOT_TEST_SKIP_SLOW=1 "$VITEST" run "${RUN_ARGS[@]}"
87+ rc=$?
88+ [ "${COVERAGE:-0}" = "1" ] \
89+ && echo "==> [cpx] 覆盖率明细: packages/cpx/coverage/index.html(浏览器)/ lcov.info"
hangdu9月23日评论:

vitest 覆盖率默认 reportOnFailure: false:只要 run 里有失败用例,整个报告(text-summary / lcov / html)都不会产出(本机实测:3 个用例失败时开头打了 "Coverage enabled with v8",但 coverage/ 目录不生成)。这行明细提示是无条件打印的,失败 run 下会指向不存在的文件,流水线若配置"失败也归档产物"会扑空。建议参考 sift 脚本的做法先 [ -f coverage/lcov.info ] 再提示;如果希望失败 run 也出报告,则配 coverage.reportOnFailure: true。

likedislike
hangdu成员9月23日进行代码检视2
packages/insight/scripts/run-tests.sh
已过期
@@ -29,0 +42,4 @@
42+ npm install --no-audit --no-fund || exit 1; }
43+ npm run test:cov
44+ rc=$?
45+ echo "==> [insight] 覆盖率明细: packages/insight/coverage/index.html(浏览器)/ lcov.info"
hangdu9月23日评论:

同 cpx 那边的评论:npm run test:cov 只要 vitest 退出非 0(默认 reportOnFailure: false),coverage/ 与 lcov/html 全都不会产出,这行明细提示却无条件打印,失败 run 下会指向不存在的文件。建议先 [ -f coverage/lcov.info ] 再提示(sift 脚本对 coverage.xml 就是这么处理的),或配置 coverage.reportOnFailure: true。

likedislike
System
系统消息系统
9月23日 评论:

changed this line on cb28ab18 view diff detail

hangdu成员9月23日进行代码检视1
packages/sift/scripts/run-tests.sh
@@ -77,0 +71,4 @@
71+# --coverage/-c 拦下转 COVERAGE=1,其余参数原样透传 pytest
72+PASSTHRU=()
73+for a in "$@"; do
74+ if [ "$a" = "--coverage" ] || [ "$a" = "-c" ]; then COVERAGE=1; else PASSTHRU+=("$a"); fi
hangdu9月23日评论:

-c 和 pytest 自身的 -c <configfile> 选项撞车了:此前 ./scripts/run-tests.sh -c mypytest.ini 会透传给 pytest 指定配置文件,现在 -c 被吞成覆盖率开关,mypytest.ini 落进 PASSTHRU 被当成测试路径报 file not found,语义被静默改变(头注释第 5 行仍写着"可传 pytest 参数")。如果 -c 留作覆盖率简写(与另两包入口一致,合理),建议在头注释注明 pytest 配置文件需改走 PYTEST_ADDOPTS=-c ...,避免踩坑。

likedislike
Gguanxinghua成员
9月23日 预合并成功(commit_id: 02068d13b0582dd04ce56f64f979a72d25f027ab)
此处折叠了5条事件消息 查看更多
CANN-robotCANN-robot成员
9月23日 删除了label:ci-pipeline-passed
CANN-robot
CANN-robot成员
9月23日 评论:

Notification

This pull request has been changed(code update) or closed, so removes the following label(s): ci-pipeline-passed.

likedislike
guanxinghua成员
9月23日 评论:

四条意见都已修复(cb28ab1),感谢 review:

  1. cpx provider 自愈 gate 到 ut 层:检查条件加上 [ "$MODE" = "ut" ],e2e --coverage 路径完全不碰 npm install,离线环境跑 e2e 不再先挂在装依赖上。
    2/3. 明细提示改为落盘才打:insight / cpx 均改为 [ -f coverage/lcov.info ] 后才输出明细位置行(与 sift 对 coverage.xml 的处理一致)。未开启 reportOnFailure: true——保持"失败 run 不产报告"的默认语义,若后续流水线需要失败归档再单独开。
  2. sift -c 撞车:保留 -c 简写(与另两包入口一致),头注释已注明 pytest 配置文件请走 PYTEST_ADDOPTS="-c <file>"。

本地验证:bash scripts/run-tests.sh cpx --coverage 全绿,明细行正常输出。

likedislike
Gguanxinghua成员
9月23日 解决了最后一个问题
guanxinghua成员
9月23日 评论:

compile

likedislike
Gguanxinghua成员
9月23日 预合并成功(commit_id: 941ac1ab0225ff9bf5bf25dd87becd5f0fd21bed)
CANN-robot
CANN-robot成员
9月23日 评论:
🚀 CI 流水线已启动
📋 执行详情: 点击查看流水线
likedislike
CANN-robotCANN-robot成员
9月23日 添加了label:ci-pipeline-running
CANN-robotCANN-robot成员
9月23日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
9月23日 添加了label:ci-pipeline-passed
qwren成员
9月23日 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
9月23日 添加了label:approved
hangdu成员
9月23日 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
9月23日 添加了label:lgtm
CANN-robotCANN-robot成员
9月23日 合入了pull request