Skip to content

[r2cn] 调研基于 Qlean 的系统级集成测试开发流程与落地可行性 #1817

Description

@benjamin-747

[任务] 调研基于 Qlean 的系统级集成测试开发流程与落地可行性

[任务分值] 25 分

[背景描述]

随着系统复杂度提升,传统的集成测试方式(进程级测试、Docker 容器测试)逐渐暴露出以下问题:

  1. 隔离级别不足
  • 多个测试共享宿主机环境
  • 易受端口、文件系统、进程残留影响
  • 测试之间存在隐性耦合,容易产生 flaky tests
  1. 系统级行为难以验证
  • 某些组件(如构建客户端、守护进程、文件系统交互、网络服务):
  • 依赖真实 OS 行为
  • 需要特权能力(mount / namespace / network)
  • 使用容器或 mock 难以真实覆盖这些场景
  1. 需要一种更强隔离的集成测试方案
  • qlean 提供基于 完整虚拟机隔离 的测试能力
  • 底层依赖
  • 理论上可为 Rust 项目提供:
    • 稳定、可复现
    • 与生产环境更接近
    • 测试间完全隔离

[需求描述]

1. 调研 qlean 的整体测试模型与工作流

理解使用 qlean 编写一个集成测试所需的完整步骤。

需明确的问题包括:

  • qlean 的核心概念:

    • 测试生命周期(VM 启动 / 执行 / 销毁)
    • 宿主与虚拟机的职责边界
  • 一个最小集成测试包含哪些要素:

    • VM 镜像
    • 测试入口
    • 结果返回方式

2. 调研 VM 构建与测试环境准备成本

目标:

评估引入 qlean 的工程成本与维护复杂度。

需调研内容:

  • VM 镜像如何制作与维护
  • 镜像是否需要频繁更新
  • 被测 Rust 二进制如何注入 VM:
    • 预构建复制
    • VM 内构建
  • 测试执行耗时预期

3. 调研 CI / 本地开发环境的可行性

目标:

判断 qlean 是否适合在 CI 和开发者本地使用。

需确认:

  • CI 是否需要:
    • KVM 支持
    • 特定 runner 配置
  • 无 KVM 场景下是否可 fallback
  • 对开发者机器的要求与限制

4. 明确适用场景与不适用场景

目标:

给出清晰的使用建议,避免滥用。

需要输出:

  • 适合使用 qlean 的测试类型
    • system / e2e / daemon / agent
  • 不建议使用 qlean 的测试
    • 纯逻辑单测
    • 高并发、快速反馈测试
  • 与 Docker / 进程级测试的对比结论

5. 本调研任务应至少产出:

  • 一份书面结论(README / RFC / Wiki),包含:

    • 使用流程图或步骤说明
    • 最小示例(文字或伪代码)
    • 成本与收益分析
  • 明确结论:

    • 是否推荐在当前项目中引入
    • 推荐的使用边界与规范

[代码标准]

  1. 所有 PR 提交必须签署 Signed-off-by 和 使用 GPG 签名,即提交代码时(使用 git commit 命令时)至少使用 -s -S 两个参数,参考 Contributing Guide
  2. 所有 PR 提交必须通过 GitHub Actions 自动化测试,提交 PR 后请关注 GitHub Actions 结果;
  3. 代码注释均需要使用英文;

[PR 提交地址] 提交到 mega 仓库的 main 分支 `` 目录;

[开发指导]

  1. 认领任务参考 r2cn 开源实习计划 - 任务认领与确认;

[导师及邮箱] 请申请此题目的同学使用邮件联系导师,或加入到 R2CN Discord 后在 #p-meta 频道和导师交流。

  1. Quanyi Ma genedna@gmail.com
  2. Tianxing Ye yetianxing2014@gmail.com

[备注]

  1. 认领实习任务的同学,必须完成测试任务和注册流程,请参考: r2cn 开源实习计划 - 测试任务r2cn 开源实习计划 - 学生注册与审核

Metadata

Metadata

Assignees

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions