如何为包含 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中的相同时间戳选择“媒体”列中的最大值?