CloudNativePG项目端到端测试环境搭建与使用指南
前言
在现代云原生数据库管理领域,持续集成(CI)和持续测试(CT)已成为确保软件质量的关键实践。CloudNativePG作为一款专为Kubernetes设计的PostgreSQL操作器,构建了一套完善的端到端(E2E)测试框架,以确保每个提交都能在所有支持的PostgreSQL和Kubernetes版本上正常运行。
测试环境架构概述
CloudNativePG的E2E测试框架由两大核心组件构成:
- 本地Kubernetes测试集群:基于kind工具构建的临时性Kubernetes集群
- E2E测试套件:可在任何Kubernetes集群上运行的测试集合
本地测试集群搭建
准备工作
在开始前,请确保已完成开发环境的基础配置,包括:
- 安装并配置Docker
- 安装kubectl命令行工具
- 安装kind(Kubernetes in Docker)工具
集群管理脚本
项目提供了hack/setup-cluster.sh
脚本用于管理本地测试集群:
# 创建新集群
hack/setup-cluster.sh create
# 构建并加载操作器镜像
hack/setup-cluster.sh load
# 部署操作器
hack/setup-cluster.sh deploy
# 销毁集群
hack/setup-cluster.sh destroy
关键参数说明
| 参数 | 描述 | 环境变量 | |------|------|---------| | -k/--k8s-version | 指定Kubernetes版本(如v1.30.0) | K8S_VERSION | | -n/--nodes | 设置集群节点数量(默认3) | NODES |
ARM64架构注意事项:在Apple M系列芯片上,脚本会自动检测架构并使用对应的镜像。如需强制使用x86/amd64模拟,需设置DOCKER_DEFAULT_PLATFORM=linux/amd64
环境变量。
性能分析工具集成
测试环境内置了两款强大的性能分析工具:
- pprof:Go语言性能分析工具,默认端口6060
- pyroscope:持续性能分析平台,默认端口4040
启用命令:
hack/setup-cluster.sh pyroscope
使用pyroscope的步骤:
- 端口转发:
kubectl port-forward -n cnpg-system svc/pyroscope 4040
- 浏览器访问
localhost:4040
查看性能数据
E2E测试套件详解
基础测试执行
E2E测试通过hack/e2e/run-e2e.sh
脚本运行,关键环境变量包括:
CONTROLLER_IMG
:K8s上部署的控制器镜像POSTGRES_IMG
:集群默认使用的PostgreSQL镜像TEST_DEPTH
:测试深度级别(0-4,默认2)FEATURE_TYPE
:按功能标签筛选测试用例
测试特性分类
CloudNativePG的E2E测试按功能划分为多个类别,包括但不限于:
- 基础功能(smoke, basic)
- 服务连通性(service-connectivity)
- 备份恢复(backup-restore)
- 安全特性(security)
- 主版本升级(postgres-major-upgrade)
示例:仅运行smoke和basic测试
export FEATURE_TYPE=smoke,basic
测试执行封装脚本
项目提供了两个封装脚本简化测试流程:
-
run-e2e-kind.sh:自动创建kind集群并运行测试
make e2e-test-kind
-
run-e2e-local.sh:在现有本地集群上运行测试
make e2e-test-local
高级配置选项
PRESERVE_CLUSTER
:测试后保留集群(默认false)K8S_VERSION
:指定Kubernetes版本(默认v1.30.0)LOG_DIR
:日志输出目录(默认_logs/)
存储卷快照测试支持
为在kind集群中测试Kubernetes卷快照功能,测试环境会自动安装:
csi-hostpath-sc
存储类csi-hostpath-snapclass
卷快照类
测试最佳实践
- 分层测试:根据开发阶段选择合适的TEST_DEPTH级别
- 特性聚焦:使用FEATURE_TYPE精准测试特定功能模块
- 性能分析:充分利用pyroscope进行运行时性能监控
- 跨版本验证:通过K8S_VERSION参数验证多版本兼容性
结语
CloudNativePG的E2E测试框架为开发者提供了全面、灵活的质量保障手段。通过本文介绍的工具和方法,开发者可以在本地环境中高效验证操作器的各项功能,确保变更不会影响现有功能的稳定性。这套测试体系不仅覆盖了基础功能验证,还包括了性能分析、跨版本兼容性测试等高级场景,为CloudNativePG的可靠性提供了坚实保障。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考