使用 Kafka 在 Spark Streaming 上对应用程序 运行 进行功能测试
Functional tests of application running on Spark Streaming with Kafka
我正在为应用程序设置功能测试 运行 Spark Streaming 和 Kafka。要完成的步骤是
- 启动动物园管理员服务器
- 启动kafka服务器
- 启动消息生成器以向 kafka 提供必要的数据
- 启动 Spark Streaming 应用程序
- 等待 5 分钟
- 停止消息生产者
- 停止 Spark Streaming 应用程序
- 停止kafka服务器
- 停止动物园管理员服务器
- 验证输出
除了简单的 bash 脚本之外,还有什么专业的方法可以做到这一点?
我认为这是一个非常笼统的问题,与 Spark Streaming 和 Kafka 没有严格关系。可能有一些测试框架支持搭建环境,运行多进程并行和数据validation/assertions.
Maybe there are some testing frameworks which support setting up the environment, running multiple processes in parallel and data validation/assertions.
不幸的是,目前还没有一体化的框架。
单行答案是:使用 docker-compose 与您选择的最简单的单元测试或基于小黄瓜的框架。
将上述步骤视为:
启动环境
生成 Kafka 消息/验证
关闭环境
Docker-Compose 将是步骤 #1 和 #3 的最佳选择。
version: '2'
services:
kafka:
# this container already has zookeeper built in
image: spotify/kafka
ports:
- 2181:2181
- 9092:9092
# its just some mock-spark container, you'll have to replace it with
# docker container that can host your spark-app
spark:
image: epahomov/docker-spark:lightweighted
depends_on:
- kafka
撰写文件的想法是您可以使用一个命令启动您的环境:
docker-compose up
而且环境设置几乎可以跨开发机器和构建服务器移植。
对于第 2 步,任何测试框架都可以。
场景如下:
- 启动环境/确保它已启动
- 开始生成消息
- 做出断言/让我的甜蜜线程休眠
- 关闭环境
谈论框架:
Scala:Scalatest。在那里你可以有很好的异步断言和并行处理范围。
Python: Behave (be careful with multiprocessing there) or unit-testing framework such as pytest
不要让命名 "unit-testing framework" 让您感到困惑。
只有测试环境定义测试是否成为单元、模块化、系统或集成类,而不是工具。
如果一个人使用单元测试框架并在那里写
MyZookeeperConnect("192.168.99.100:2181")
它不再是单元测试了,连单元测试框架都帮不了它:)
将步骤 #1、#2、#3 粘合在一起 - 简单 bash 是我的选择。
考虑使用 Citrus (http://citrusframework.org/) 测试框架,它可能是适合您的一体化测试框架。
- Zookeeper 访问权限:检查
- Docker 集成:检查
- 通过 Apache Camel 集成 Kafka:检查
- 等待x时间:检查
- 验证结果:检查
还考虑使用 Fabric8 Docker Maven 插件 (https://github.com/fabric8io/docker-maven-plugin) 来设置 Docker 测试环境,然后在同一构建 运行 中执行 Citrus 测试。
下面是两个工具协同工作以进行自动化集成测试的示例:https://github.com/christophd/citrus-samples/tree/master/sample-docker
我正在为应用程序设置功能测试 运行 Spark Streaming 和 Kafka。要完成的步骤是
- 启动动物园管理员服务器
- 启动kafka服务器
- 启动消息生成器以向 kafka 提供必要的数据
- 启动 Spark Streaming 应用程序
- 等待 5 分钟
- 停止消息生产者
- 停止 Spark Streaming 应用程序
- 停止kafka服务器
- 停止动物园管理员服务器
- 验证输出
除了简单的 bash 脚本之外,还有什么专业的方法可以做到这一点?
我认为这是一个非常笼统的问题,与 Spark Streaming 和 Kafka 没有严格关系。可能有一些测试框架支持搭建环境,运行多进程并行和数据validation/assertions.
Maybe there are some testing frameworks which support setting up the environment, running multiple processes in parallel and data validation/assertions.
不幸的是,目前还没有一体化的框架。
单行答案是:使用 docker-compose 与您选择的最简单的单元测试或基于小黄瓜的框架。
将上述步骤视为:
启动环境
生成 Kafka 消息/验证
关闭环境
Docker-Compose 将是步骤 #1 和 #3 的最佳选择。
version: '2'
services:
kafka:
# this container already has zookeeper built in
image: spotify/kafka
ports:
- 2181:2181
- 9092:9092
# its just some mock-spark container, you'll have to replace it with
# docker container that can host your spark-app
spark:
image: epahomov/docker-spark:lightweighted
depends_on:
- kafka
撰写文件的想法是您可以使用一个命令启动您的环境:
docker-compose up
而且环境设置几乎可以跨开发机器和构建服务器移植。
对于第 2 步,任何测试框架都可以。
场景如下:
- 启动环境/确保它已启动
- 开始生成消息
- 做出断言/让我的甜蜜线程休眠
- 关闭环境
谈论框架:
Scala:Scalatest。在那里你可以有很好的异步断言和并行处理范围。
Python: Behave (be careful with multiprocessing there) or unit-testing framework such as pytest
不要让命名 "unit-testing framework" 让您感到困惑。 只有测试环境定义测试是否成为单元、模块化、系统或集成类,而不是工具。
如果一个人使用单元测试框架并在那里写
MyZookeeperConnect("192.168.99.100:2181")
它不再是单元测试了,连单元测试框架都帮不了它:)
将步骤 #1、#2、#3 粘合在一起 - 简单 bash 是我的选择。
考虑使用 Citrus (http://citrusframework.org/) 测试框架,它可能是适合您的一体化测试框架。
- Zookeeper 访问权限:检查
- Docker 集成:检查
- 通过 Apache Camel 集成 Kafka:检查
- 等待x时间:检查
- 验证结果:检查
还考虑使用 Fabric8 Docker Maven 插件 (https://github.com/fabric8io/docker-maven-plugin) 来设置 Docker 测试环境,然后在同一构建 运行 中执行 Citrus 测试。
下面是两个工具协同工作以进行自动化集成测试的示例:https://github.com/christophd/citrus-samples/tree/master/sample-docker