dunitest 用户态测试框架
dunitest 是 DragonOS 的用户态单元测试框架,用于运行基于 Google Test 的 C++ 测例并输出结构化报告。
现状
runner 自动发现
bin/下的可执行文件并执行默认超时 60 秒,可通过
--timeout-sec覆盖测例过滤顺序:white list -> block list -> –pattern
汇总统计默认按 gtest 的测试用例数聚合(不是按测试程序个数)
测试失败或超时时,runner 返回非 0
目录与职责
user/apps/tests/dunitest/
├── runner/ # Rust 测试运行器
├── suites/ # 测试源码(按 suite 分目录)
├── bin/ # 编译产物(runner 自动发现)
├── whitelist.txt # 默认白名单
├── scripts/run_tests.sh # 系统内执行入口
└── Makefile
关键规则
源码位置:
suites/<suite>/*.cc编译输出:
bin/<suite>/<case>_testrunner 用例名:
<suite>/<case>``(自动去掉 ``_test后缀)
示例:
二进制:
bin/demo/gtest_demo_test用例名:
demo/gtest_demowhite list 条目:
demo/gtest_demo
如何新增测例
推荐:普通功能测试优先放在 normal suite
普通/通用功能测例建议统一放在
suites/normal/下,便于集中维护示例:
suites/normal/capability.cc在
whitelist.txt中对应条目写作:normal/capability
1. 新增 gtest 源码
新增文件,例如:
suites/normal/capability.cc
2. 把 suite 加入 Makefile
编辑 user/apps/tests/dunitest/Makefile 的 SUITES:
# 如果新增了目录,需要在这里加入
SUITES = demo normal
3. 构建并运行(支持并行)
在仓库根目录:
make test-dunit-local
或在 dunitest 目录:
make run -j$(nproc)
构建日志示例:
编译测例: suites/normal/capability.cc -> bin/normal/capability_test
4. 加入 white list
编辑 whitelist.txt,每行一个用例名:
demo/gtest_demo
normal/capability
Runner 参数
dunitest-runner [OPTIONS]
--bin-dir <PATH> 测试二进制目录(默认: bin)
--timeout-sec <SEC> 单测超时秒数(默认: 60)
--whitelist <PATH> white list 路径(默认: whitelist.txt)
--blocklist <PATH> block list 路径(默认: blocklist.txt)
--results-dir <PATH> 报告目录(默认: results)
--list 仅列出测例,不执行
--verbose 详细输出
--pattern <PATTERN> 名称子串过滤(可多次指定)
报告输出
执行后在 results/ 下生成:
test_report.txt:文本报告summary.json:JSON 汇总failed_cases.txt:失败/超时列表<case>.log:单测日志
终端汇总口径说明:
总测试数/通过/失败/跳过按 gtest 用例数统计当某个程序没有产出 gtest 统计信息时,才按测试程序粒度回退统计
安装说明
在 user/apps/tests/dunitest/ 目录下执行 make install 即可