# os_smoke **Repository Path**: OpenCloudOS/os_smoke ## Basic Information - **Project Name**: os_smoke - **Description**: os_smoke 是一套轻量级、自动化的操作系统冒烟测试工具。它主要用于在操作系统镜像构建完成后,第一时间对系统进行“健康检查”。 - **Primary Language**: Java - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2026-02-03 - **Last Updated**: 2026-03-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OS Smoke #### 介绍 OS Smoke 是一套轻量级、自动化的操作系统冒烟测试工具。它主要用于在操作系统镜像构建完成后,第一时间对系统进行"健康检查",快速验证内核、基础系统、驱动、应用、开发工具等关键组件是否正常工作。 #### 软件架构 ``` os_smoke/ ├── control # 测试套配置文件(名称、依赖、编译命令等) ├── pre_init.sh # 前置钩子(编译前/测试前调用) ├── post_uninit.sh # 后置钩子(编译后/测试后调用) ├── baseline/ # 用例基线定义 │ ├── cases # 全量用例列表 │ ├── cases_kernel # 内核测试用例 │ ├── cases_baseos # 基础系统测试用例 │ ├── cases_app # 应用测试用例 │ ├── cases_develop # 开发工具测试用例 │ └── cases_driver # 第三方驱动测试用例 ├── tools/ # 测试框架核心库 │ ├── tos_test.sh # 测试执行引擎(总调度器) │ ├── case_lib.sh # Shell 测试框架库 │ ├── case_lib.py # Python 测试框架库 │ └── case_lib.c # C 测试框架库 └── os_smoke_src/ # 测试套源码 ├── Makefile # 顶层构建文件 ├── lib/ │ └── common_libs.sh # 公共库函数(包管理等) └── testcases/ # 测试用例目录 ├── kernel/ # 内核用例 ├── baseos/ # 基础系统用例 ├── app/ # 应用用例 ├── develop/ # 开发工具用例 └── driver/ # 第三方驱动用例 ``` 项目提供 C、Python、Shell 三种语言的统一测试框架库(`tools/case_lib.*`),支持统一的结果上报(`TPASS/TFAIL/TCONF/TWARN/TINFO`)、安全文件操作、虚拟机检测等能力。 #### 运行环境要求 - 最低配置:4 核 CPU / 8 GB 内存 / 20 GB 磁盘 - 操作系统:Linux #### 安装教程 1. 克隆仓库到目标测试机器: ```bash git clone <仓库地址> cd os_smoke ``` 2. 安装测试套依赖软件包: ```bash ./tools/tos_test.sh pkg ``` 3. 编译并安装测试套: ```bash ./tools/tos_test.sh compile ``` #### 使用说明 1. 执行全量冒烟测试: ```bash ./tools/tos_test.sh test ``` 2. 按类别执行测试(支持 kernel、baseos、app、develop、driver): ```bash ./tools/tos_test.sh test kernel ``` 3. 执行单个测试用例: ```bash ./tools/tos_test.sh case <用例名称> ``` 4. 清理编译产物: ```bash ./tools/tos_test.sh clean ``` #### 结果查询与日志分析 测试完成后,所有日志和结果文件存放在 `/data/log/os_suites/os_smoke/` 目录下: | 文件 | 说明 | |---|---| | `os_smoke.result` | 汇总结果文件,每行格式为 `PASS/FAIL: 用例名 耗时(秒)` | | `os_smoke.log` | 运行日志,包含编译、执行过程中的详细输出 | | `os_smoke.log.compile` | 编译阶段日志(`compile` 命令产生) | | `<用例名>` | 每个用例的独立日志文件 | | `<用例名>.dmesg` | 用例执行期间若检测到内核异常,自动保存的 dmesg 快照 | 查询命令: ```bash # 查看整体通过/失败汇总 cat /data/log/os_suites/os_smoke/os_smoke.result # 筛选所有失败用例 grep "^FAIL" /data/log/os_suites/os_smoke/os_smoke.result # 查看某个失败用例的详细日志 cat /data/log/os_suites/os_smoke/<用例名> # 检查是否有内核异常(dmesg 快照) ls /data/log/os_suites/os_smoke/*.dmesg 2>/dev/null # 统计通过/失败数量 echo "PASS: $(grep -c '^PASS' /data/log/os_suites/os_smoke/os_smoke.result)" echo "FAIL: $(grep -c '^FAIL' /data/log/os_suites/os_smoke/os_smoke.result)" ``` 按类别执行测试时,结果文件为 `os_smoke_<类别>.result`(如 `os_smoke_kernel.result`)。 #### 添加测试用例 1. 在 `os_smoke_src/testcases/<类别>/` 下创建用例目录和脚本 2. 在用例脚本中引用框架库并使用 API 上报结果: ```bash source case_lib.sh # 上报测试通过 tst_res $TPASS "功能X验证通过" # 上报测试失败 tst_res $TFAIL "功能X返回值异常" # 跳过测试(环境不满足等) tst_res $TCONF "缺少依赖包,跳过测试" # 输出警告信息(非致命) tst_res $TWARN "性能低于预期阈值" # 输出提示信息(不影响结果) tst_res $TINFO "当前内核版本: $(uname -r)" # 致命错误,立即中止用例 tst_brk $TFAIL "无法创建测试目录" tst_brk $TCONF "不支持的架构,跳过" # 安全执行命令(失败时自动中止) SAFE_CMD "创建临时目录" mkdir -p /tmp/test_dir ``` 3. 在 `baseline/cases` 及对应分类文件中注册用例,格式为: ``` 用例名; cd os_smoke/testcases/分类/子目录; ./用例脚本.sh ``` #### 其他 ##### 1. 环境清理 清理日志文件: ```bash # 备份旧日志(推荐) timestamp=$(date +%Y%m%d_%H%M%S) mv /data/log/os_suites/os_smoke /data/log/os_suites/os_smoke.bak_${timestamp} # 或直接删除旧日志 rm -rf /data/log/os_suites/os_smoke/* ``` ##### 2. 自定义配置 修改超时时间: ```bash # 编辑 control 文件 vim control # 添加或修改超时配置 CONTROL_CASE_TIMEOUT=3600 # 设置为1小时 ``` 添加自定义依赖包: ```bash # 编辑 control 文件 vim control # 修改依赖包列表(注意:此处配置为通用包) CONTROL_PRE_PKG='gcc automake expect kernel-devel 你的包名' ``` ##### 3. 磁盘设备配置 配置真实磁盘设备(可选): ```bash # 编辑 control 文件 vim control # 添加磁盘设备配置(如果系统有多余磁盘) CONTROL_CASE_DISK_DEVICE="/dev/sdb" # 多个磁盘设备 CONTROL_CASE_DISK_DEVICE="/dev/sdb /dev/sdc" ``` **说明**: 如果不配置此项,磁盘相关测试会自动使用 loopback 设备模拟。 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat\_xxx 分支 3. 提交代码 4. 新建 Pull Request