使用 "helm test" 集成测试部署的服务

Integration testing deployed services using "helm test"

我正在使用 helm charts 将多个 REST 服务部署到 Microsoft Azure。 其中一些服务相互通信并与某些数据库通信。部署后,我想测试 "everything" 是否按预期工作。更准确地说,我想向其中一项服务发送一些 HTTP 请求并检查响应是否有意义。当然是在自动化测试中。

我看到可以在部署后使用 "helm test" 运行 基本命令,但这并不是我所需要的。

在一些早期的方法中,我在部署后在脚本中使用了 Newman to execute a Postman 集合。 Postman 集合定义了几个请求和相应的测试。

现在不知道在新环境(Azure)和部署流水线(hel​​m,k8s)下如何做。

能再有这样的东西就好了。 但对我来说,尚不清楚该怎么做,例如

newman run "test.postman_collection.json" -e "azure.postman_environment.json" --bail

Helm 测试非常灵活,因为它运行任何 Kubernetes YAML,包括任何 Docker 图像。例如,您可以检查 tests for the MySQL Helm Chart.

所以,回答你的问题:

  1. 要使用 Newman,您只需找到安装了 Newman 的 Docker 图像(例如官方图像 postman/newman 或构建您自己的图像)。要使用您的 JSON 配置文件,您可以将它们作为 ConfigMap 或将它们复制到容器中。查看他 MySQL 舵图了解更多详情。

  2. 您说得对,您需要等到系统准备就绪后才能进行 运行 测试。据我所知,Helm 测试不涵盖此内容。因此,您需要将 sleep 放入您的脚本或主动检查 kubectl 直到 PODs 准备就绪。

我发布了执行邮递员集合的 Helm 图表测试的示例配置 here:

我通过 Helm Chart Tests and the postman/newman Docker image 实现了预期的行为。

用于测试执行的我的 Helm 模板:

apiVersion: v1
kind: Pod
metadata:
  name: API Test
  annotations:
    "helm.sh/hook": test-success
spec:
  containers:
    - name: PostmanTest
      image: postman/newman:latest
      args:
        - run
        - <url-to-postman-collection>
        # In case you need to define the hostname in the collection
        # Use {{baseUrl}} in the request URL
        - --env-var
        - baseUrl=<kubernetes-host-name>

在您的管道中,您现在必须等到 pod 准备就绪(这可以使用已实施的就绪探测器进行检查),然后可以使用

执行图表测试

helm test