如何为包含 kafka、postgres 和 rest api docker 容器的应用程序编写 e2e 测试自动化

Posted

技术标签:

【中文标题】如何为包含 kafka、postgres 和 rest api docker 容器的应用程序编写 e2e 测试自动化【英文标题】:how to write e2e test automation for application containing kafka, postgres, and rest api docker containers 【发布时间】:2018-09-19 06:25:11 【问题描述】:

我有一个由 docker-compose 设置的应用程序。该应用程序包含用于 kafka、postgres、rest api 端点的 docker 容器。

一个测试用例是将数据发布到端点。在数据中,有一个名为callback URL 的字段。应用程序将解析数据并将数据发送到callback URL

我很好奇是否有类似测试用例的测试框架。以及如何验证callback URL 是否被数据命中?

【问题讨论】:

【参考方案1】:

Idaithalam 是一个低代码测试自动化框架,使用 Java 和 Cucumber 开发。它利用行为驱动开发 (BDD)。测试人员可以使用 API Spec 在简单的 Excel 中创建测试用例/脚本。 Excel 是在 Idaithalam 中创建基于 Json 的测试脚本的一种简化方法。可以在几分钟内快速创建测试用例并进行测试。

作为测试人员,您需要创建 Excel 并将其传递给 Idaithalam Framework。

首先,从 Excel 生成基于 Json 的测试脚本(虚拟集合)。在测试执行过程中,可以直接使用这个测试脚本集合。

然后它从 Virtualan Collection 生成 Feature 文件并执行。

最后,生成 BDD/Cucumber 风格的测试报告。

这为 REST API、GraphQL、RDBMS DB 和 Kafka 事件消息提供了完整的测试支持

有关设置和执行的更多信息,请参阅以下链接。

https://tutorials.virtualan.io/#/Excel

How to create test scripts using excel

【讨论】:

【参考方案2】:

您可以使用传统的 JUnit 方式使用一些代码或通过声明性方式来实现这一点,您可以完全绕过编码。

该示例已将 Kafka 容器 docker 化以在本地启动并运行测试

本节Kafka with REST APIs 解释了 REST api 测试与 Kafka 数据流组合的自动化测试方式。

例如

---
scenarioName: Kafka and REST api validation example
steps:
- name: produce_to_kafka
  url: kafka-topic:people-address
  operation: PRODUCE
  request:
    recordType: JSON
    records:
    - key: id-lon-123
      value:
        id: id-lon-123
        postCode: UK-BA9
  verify:
    status: Ok
    recordMetadata: "$NOT.NULL"
- name: verify_updated_address
  url: "/api/v1/addresses/$$.produce_to_kafka.request.records[0].value.id"
  operation: GET
  request:
    headers:
      X-GOVT-API-KEY: top-key-only-known-to-secu-cleared
  verify:
    status: 200
    value:
      id: "$$.produce_to_kafka.request.records[0].value.id"
      postCode: "$$.produce_to_kafka.request.records[0].value.postcode"

【讨论】:

【参考方案3】:

在你下面的问题中,卡夫卡在哪里涉及?两者听起来都像是 HTTP 调用。

1)将数据发布到端点

2)反对向回调URL发送数据

一个测试用例是将数据发布到端点。在数据中,有一个字段叫回调 URL。应用程序将解析数据并将数据发送到回调 URL。

假设回调 URL 是一个带有 POST/PUT api 的 HTTP 端点(例如 REST 或 SOAP),那么最好在同一资源上公开一个 GET 端点。在这种情况下,当调用回调 POST/PUT 时,服务器端状态/数据会发生变化,接下来,使用 GET api 来验证数据是否正确。 GET API 的输出是发送到回调 URL 的 Kafka 数据(这假设您的第一个帖子消息是发给 kafka 主题的)。

【讨论】:

【参考方案4】:

Docker compose 支持已添加到 endly。在应用 (app.yaml) 的管道工作流中,您可以添加“部署”任务并通过调用 docker-compose up 来启动 docker 服务。

一旦测试任务完成并且您的回调 url 被调用,在您的验证任务中,您可以检查它是否使用预期的数据被调用。为此,您可以利用 endly 的 recording feature and replay 它来验证回调请求。

下面是一个 ETL 应用程序 app.yaml 的示例,它使用 docker-compose with endly 来启动 docker 服务。希望对您有所帮助。

tasks: $tasks
defaults:
  app: $app
  version: $version
  sdk: $sdk
  useRegistry: false
pipeline:
  build:
    name: Build GBQ ETL
    description: Using a endly shared workflow to build
    workflow: app/docker/build
    origin:
      URL: ./../../
      credentials: localhost
    buildPath: /tmp/go/src/etl/app
    secrets:
      github: git
    commands:
      - apt-get -y install git
      - export GOPATH=/tmp/go
      - export GIT_TERMINAL_PROMPT=1
      - cd $buildPath
      - go get -u .
      - $output:/Username/? $github.username
      - $output:/Password/? $github.password
      - export CGO_ENABLED=0
      - go build -o $app
      - chmod +x $app
    download:
      /$buildPath/$app: $releasePath
      /$buildPath/startup.sh: $releasePath
      /$buildPath/docker-entrypoint.sh: $releasePath
      /$buildPath/VERSION: $releasePath
      /$buildPath/docker-compose.yaml: $releasePath
  deploy:
    start:
      action: docker:composeUp
      target: $target
      source:
        URL: $releasePathdocker-compose.yaml

【讨论】:

以上是关于如何为包含 kafka、postgres 和 rest api docker 容器的应用程序编写 e2e 测试自动化的主要内容,如果未能解决你的问题,请参考以下文章

如何为 5500 万条记录批量更新 postgres 中的单个列

在Postgres中加入两个表后如何为具有相同名称的列提供别名

如何为inet设置sequelize postgres模型类型?

Postgresql:如何为postgres中的相同时间戳选择“媒体”列中的最大值?

@StreamListener 为 kafka 定义 groupId-如何为同一主题设置多个消费者

如何为 Pandas RE .str.extract() 使用 RE OR Operand