编写端到端测试
您可以查看 Kubebuilder/v4/test/e2e/utils 包,该包提供了带有丰富方法的 TestContext
:
- NewTestContext 有助于定义:
- 一个用于测试项目的临时文件夹。
- 一个临时的控制器管理器镜像。
- Kubectl 执行方式。
- CLI 可执行文件(无论是
kubebuilder
、operator-sdk
还是您扩展的 CLI)。
一旦定义完毕,您可以使用 TestContext
来:
-
设置测试环境,例如:
- 清理环境并创建临时目录。请参阅 准备。
- 安装所需的 CRD。请参阅 InstallCertManager 和 InstallPrometheusManager。
-
验证插件的行为,例如:
- 触发插件绑定的子命令。请参见 Init、CreateAPI。
- 使用 PluginUtil 来验证生成的输出。请参见 InsertCode、ReplaceInFile 和 UncommentCode。
-
确保搭建的输出正常运行,例如:
- 在您的
Makefile
中执行命令。请参见 Make。 - 临时加载测试控制器的图像。请参见 LoadImageToKindCluster。
- 调用 Kubectl 以验证正在运行的资源。请参阅 Kubectl。
- 在您的
-
测试后清理临时资源:
- 卸载先决条件 CRD。请参见 UninstallPrometheusOperManager。
- 删除临时目录。请参见 销毁。
参考文献:
生成测试样本
查看由您的插件生成的示例项目内容非常简单。
例如,Kubebuilder 根据不同的插件生成 示例项目 以验证布局。
您还可以使用 TestContext
从您的插件生成脚手架项目的文件夹。命令与扩展 CLI 功能和插件中提到的类似。
以下是使用 go/v4
插件创建示例项目的一般工作流程(kbc
是 TestContext
的一个实例):
-
初始化一个项目:
By("initializing a project") err = kbc.Init( "--plugins", "go/v4", "--project-version", "3", "--domain", kbc.Domain, "--fetch-deps=false", ) Expect(err).NotTo(HaveOccurred(), "Failed to initialize a project")
-
定义API:
By("creating API definition") err = kbc.CreateAPI( "--group", kbc.Group, "--version", kbc.Version, "--kind", kbc.Kind, "--namespaced", "--resource", "--controller", "--make=false", ) Expect(err).NotTo(HaveOccurred(), "Failed to create an API")
-
为了搭建 webhook 配置:
By("scaffolding mutating and validating webhooks") err = kbc.CreateWebhook( "--group", kbc.Group, "--version", kbc.Version, "--kind", kbc.Kind, "--defaulting", "--programmatic-validation", ) Expect(err).NotTo(HaveOccurred(), "Failed to create an webhook")