版本:v2.9.0
端到端测试
概述
本文档提出为 HAMi 增加端到端(E2E)测试支持,以确保其在 Kubernetes 生态系统中的功能性和兼容性。它引入了用于验证整个工作流的 机制,并保证系统满足生产级要求。
动机
E2E 测试用于验证系统的完整功能,确保最终用户体验与开发者的设计规范保持一致。
虽然单元测试和集成测试能够提供有价值的反馈,但在分布式系统中它们往往是不够的。一些细微的变更可能通过了单元测试和集成测试,却仍然在系统层面引入了意想不到的问题。
全面的 E2E 测试覆盖对于降低回归风险、提升可靠性,以及保持对系统与 Kubernetes 无缝集成的信心至关重要。
目标
- 搭建 E2E 测试的基础环境。
- 定义 HAMi 的 E2E 测试范围和场景。
- 实现覆盖关键工作流和边界情况的 E2E 测试。
- 确保与 Kubernetes 的兼容性。
- 建立一个可靠且可复用的测试框架,以便未来扩展。
非目标
- 针对单个功能的单元或集成测试(已在其他地方覆盖)。
- 超出基础场景的性能基准测试。
提案
测试范围
- 核心功能: 验证基础操作和工作流。
- 边界情况: 测试异常场景或无效输入,以确保健壮性。
- 兼容性:
- 验证与不同异构设备的集成。
- 验证与不同 Kubernetes 版本的集成。
- 验证与不同 CUDA 版本的集成(可选)。
- 错误处理: 确保具备适当的错误消息和恢复机制。
实现细节
- 测试在本地环境中运行。
- 测试使用 Ginkgo 框架编写。
- 所有测试使用隔离的 namespace,以避免冲突。
- 每次测试运行后会自动清理资源。
- CI 集成确保测试针对 PR、每日构建和发布版本运行。
用户故事
故事 1: 通过 Helm 部署实现 E2E 测试自动化。
故事 2: 通过资源校验实现 E2E 测试自动化。
故事 3: 通过 Kubernetes 资源部署实现 E2E 测试自动化。
风险与缓解措施
资源限制
测试集群可能会遇到资源约束,例如 CPU、内存或存储不足。这可能导致测试失败、性能下降或部署过程中的超时。
环境不稳定性
网络延迟、间歇性故障或集群节点故障等不稳定性问题,可能导致测试失败或行为不一致。测试应当针对瞬时错误进行重试,并对持续存在的错误给出确定性的报告。