编写端到端测试

您可以查看 Kubebuilder/v4/test/e2e/utils 包,该包提供了带有丰富方法的 TestContext

  • NewTestContext 有助于定义:
    • 一个用于测试项目的临时文件夹。
    • 一个临时的控制器管理器镜像。
    • Kubectl 执行方式
    • CLI 可执行文件(无论是 kubebuilderoperator-sdk 还是您扩展的 CLI)。

一旦定义完毕,您可以使用 TestContext 来:

  1. 设置测试环境,例如:

  2. 验证插件的行为,例如:

  3. 确保搭建的输出正常运行,例如:

    • 在您的 Makefile 中执行命令。请参见 Make
    • 临时加载测试控制器的图像。请参见 LoadImageToKindCluster
    • 调用 Kubectl 以验证正在运行的资源。请参阅 Kubectl
  4. 测试后清理临时资源

参考文献

生成测试样本

查看由您的插件生成的示例项目内容非常简单。

例如,Kubebuilder 根据不同的插件生成 示例项目 以验证布局。

您还可以使用 TestContext 从您的插件生成脚手架项目的文件夹。命令与扩展 CLI 功能和插件中提到的类似。

以下是使用 go/v4 插件创建示例项目的一般工作流程(kbcTestContext 的一个实例):

  • 初始化一个项目

    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")