合并受阻
Welcome To openEuler Community
Hey @xu_yishen , thanks for your contribution to the community.
Bot Usage Manual
I'm the Bot here serving you. You can find the instructions on how to interact with me at Here . That means you can comment below every pull request or issue to trigger Bot Commands.
Contact Guide
If you have any questions, please contact the SIG: sig-QA ,
and any of the maintainers: @Charlie_li1, @Rigorous, @SupMario, @hfutsdd, @lemon-higgins, @linqian0322, @lutianxiong, @saarloos, @walkingwalk, @wangpeng_uniontech, @wu_fengguang, @zjl_long ,


变更摘要
该PR新增了 skills/mugen-case-generator 技能目录,为 mugen 测试框架提供了一套用例生成与校验工具链。主要包括一个 bash 脚本校验器 verify_case.sh 和三个模板文件(用例骨架、套件公共库、套件映射配置),帮助开发者按规范快速创建合规的测试用例。
主要改动
- 新增
verify_case.sh校验脚本: 提供12项自动化检查(bash语法、ShellCheck lint、source行数/格式、LOG_INFO条数、pre_test/post_test中禁止CHECK_RESULT、禁用shellcheck disable指令、英文注释、裸sleep检查、头部元数据完整性、main入口等),确保生成的用例符合 mugen 规范。 - 新增
case_template.sh用例模板: 提供标准的 mugen 测试用例骨架,包含pre_test/run_test/post_test三阶段结构、版权头、source "${OET_PATH}"引用、CHECK_RESULT断言及main "$@"入口,开发者只需替换占位符即可。 - 新增
suite_common_lib_template.sh公共库模板: 提供套件级公共函数库骨架,包含配置备份/恢复、服务启停、日志窗口断言等辅助函数,并区分了 pre_test/post_test 辅助函数(返回0/1)与 run_test 校验函数(内部调用 CHECK_RESULT)的使用规范。 - 新增
suite2cases_template.json套件映射模板: 定义套件路径与用例列表的 JSON 映射结构,用于将多个测试用例组织到同一测试套件下。


代码审查
审查结论
逐文件审查结果:
| 文件 | 审查结论 |
|---|---|
skills/mugen-case-generator/REFERENCE.md |
无问题 |
skills/mugen-case-generator/SKILL.md |
无问题 |
skills/mugen-case-generator/scripts/verify_case.sh |
无问题 |
skills/mugen-case-generator/templates/case_template.sh |
P3 ×1(年份硬编码) |
skills/mugen-case-generator/templates/suite2cases_template.json |
无问题 |
skills/mugen-case-generator/templates/suite_common_lib_template.sh |
P3 ×1(年份硬编码) |
发现汇总:
- P0:0
- P1:0
- P2:0
- P3:2(两个模板中版权年份硬编码为
2026而非<YYYY>占位符,与同模板其他占位符风格不一致)
整体风险评估:低风险。 本次变更新增了一个 mugen 用例生成器 skill,包含参考文档、校验脚本和三个模板文件。代码逻辑正确,校验脚本设计合理,模板遵循规范要求。仅两个模板存在占位符风格不一致的轻微问题(硬编码年份而非占位符),不影响功能正确性,可在后续按需统一。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 3 |
💬 仅评论


🟡 Medium Priority
变更行:SKILL.md 第 39 行,核心规则精简版中列出了 cp -f/mv -rf/userdel -rf。
与 REFERENCE.md 第 178 行相同的问题:mv 命令(GNU coreutils / POSIX)不支持 -r 标志。执行 mv -rf src dst 会报 mv: invalid option -- 'r' 并失败。SKILL.md 作为快速上手指南,用户很可能直接复制此处的命令模式到用例中,导致运行时失败。
应改为 mv -f。
建议:将 mv -rf 改为 mv -f。
| 39
| - - **风格**:4 空格缩进;`grep xxx file`;`test -f file`;不留死代码/未用变量;临时文件放 `/tmp` 并在 post_test 清理;`cp -f`/`mv - |
|
39 | + - **风格**:4 空格缩进;`grep xxx file`;`test -f file`;不留死代码/未用变量;临时文件放 `/tmp` 并在 post_test 清理;`cp -f`/`mv -f`/`userdel -rf`;用 `DNF_INSTALL`/`DNF_REMOVE`/`NODE1_*`。 |


🟡 Medium Priority
变更行:suite_common_lib_template.sh 第 84 行。
函数 x_assert_not_log_contains 的语义是"断言日志中不包含指定模式"。当模式被匹配到时(grep 成功,退出 0),进入 if 分支执行 CHECK_RESULT 1 0 0 "$msg",即断言失败——此时应报告"意外发现了不应存在的日志"。
但第 84 行的默认消息是 "expected log not found: $1"("期望的日志未找到"),这是 x_assert_log_contains(正向断言)的语义,与本函数的逆向断言语义完全相反。用户使用此模板且不传自定义消息时,一旦断言触发失败,看到的错误消息会指向相反的方向,严重误导排错。
建议:将默认消息改为 "unexpected log found: $1" 或 "log should not contain: $1",与函数名 _assert_not_log_contains 的语义一致。同时检查 REFERENCE.md 第 137 行对应的 em_assert_log_contains 示例中是否存在同样问题(当前示例只展示了正向断言 em_assert_log_contains,未涉及逆向断言,不受影响)。


🟡 Medium Priority
变更行:REFERENCE.md 第 178 行,cp -f、mv -rf、userdel -rf。
mv 命令(GNU coreutils / POSIX)不支持 -r / --recursive 标志——mv 对目录操作本身已经是递归的,无需且不接受 -r。在 GNU/Linux 环境执行 mv -rf src dst 会报错 mv: invalid option -- 'r' 并退出非零。
如果用户按此文档编写 post_test 清理逻辑,实际执行到该行时会导致用例失败。userdel -rf 和 cp -f 都是合法标志组合,唯独 mv -rf 是错误用法。应改为 mv -f。
建议:将 mv -rf 改为 mv -f。同时检查 doc/测试用例检视规范.md 原文是否存在同样问题——若原文也有此错误,应一并修正。
| 178
| - - `cp -f`、`mv - |
|
178 | + - `cp -f`、`mv -f`、`userdel -rf`。 |


缺失顶层README和openai.yaml


建议加上用例名称的检查
oe_test_


numactl非内置 需要提前检查是否安装


description过长 可以考虑拆分成结构块 并突出关键词


当前PR是否有AI参与:
[x] 否
[ ] 是
__1. AI Agent 平台:
__2. AI 模型:
__3. Prompt上下文 :
参考:openEuler社区《生成式AI工具使用与开源贡献政策》
PR功能描述 / 为什么需要这个合入**:
该PR关联的issue
(格式为fixes #<issue号>, 或者resolves #<issue号>): fixes #
希望检视人员了解: