Apache spark 使用Kafka在Spark Streaming上运行应用程序的功能测试
我正在为运行Spark Streaming和Kafka的应用程序设置功能测试。需要完成的步骤如下:Apache spark 使用Kafka在Spark Streaming上运行应用程序的功能测试,apache-spark,apache-kafka,spark-streaming,functional-testing,Apache Spark,Apache Kafka,Spark Streaming,Functional Testing,我正在为运行Spark Streaming和Kafka的应用程序设置功能测试。需要完成的步骤如下: 启动zookeeper服务器 启动卡夫卡服务器 启动消息生成器以向kafka提供必要的数据 启动Spark流媒体应用程序 等5分钟 停止消息生成器 停止火花流应用程序 停止卡夫卡服务器 停止zookeeper服务器 验证输出 除了简单的bash脚本之外,还有什么专业的方法可以做到这一点 我认为这是一个相当普遍的问题,与Spark Streaming和卡夫卡没有严格的关系。可能有一些测试框架支持设置
docker编写
而且环境设置在开发人员机器和构建服务器之间的可移植性非常好
对于步骤2,任何测试框架都可以
该场景看起来像:
- 启动环境/确保其已启动
- 开始生成消息
- 使断言/睡眠成为我的甜线
- 关闭env
谈论框架:
- 斯卡拉:。在那里,您可以拥有一系列良好的异步断言和并行处理
- Python:(注意多处理)或单元测试框架,例如
不要让命名“单元测试框架”迷惑你。
只有测试环境才能定义测试是否成为单元、模块、系统或集成,而不是工具
如果一个人使用单元测试框架并在那里编写
MyZookeeperConnect(“192.168.99.100:2181”)
它不再是一个单元测试,甚至单元测试框架也帮不上忙:)
要将步骤#1、#2、#3粘合在一起,我可以选择简单的bash
可能有一些测试框架支持设置环境、并行运行多个进程以及数据验证/断言
不幸的是,目前还没有一体化的框架
一行回答是:使用docker compose和您选择的最简单的单元测试或基于小黄瓜的框架
将上述步骤视为:
启动env
生成卡夫卡消息/验证
关闭env
将是步骤1和步骤3的最佳选择
撰写文件的思想是,您可以通过一个命令启动环境:
docker编写
而且环境设置在开发人员机器和构建服务器之间的可移植性非常好
对于步骤2,任何测试框架都可以
该场景看起来像:
- 启动环境/确保其已启动
- 开始生成消息
- 使断言/睡眠成为我的甜线
- 关闭env
谈论框架:
- 斯卡拉:。在那里,您可以拥有一系列良好的异步断言和并行处理
- Python:(注意多处理)或单元测试框架,例如
不要让命名“单元测试框架”迷惑你。
只有测试环境才能定义测试是否成为单元、模块、系统或集成,而不是工具
如果一个人使用单元测试框架并在那里编写
MyZookeeperConnect(“192.168.99.100:2181”)
它不再是一个单元测试,甚至单元测试框架也帮不上忙:)
要将步骤#1、#2和#3粘合在一起,我会选择简单的bash。考虑使用柑橘()测试框架,它可能是您的一体式测试框架
- Zookeeper访问:检查
- Docker集成:检查
- 通过ApacheCamel进行Kafka集成:检查
- 等待x时间段:检查
- 验证结果:检查
还考虑使用Cuff8 Doker-Maven插件()来在同一个构建运行中执行柑橘测试之前设置DOCKER测试环境。
下面是两个工具一起工作进行自动化集成测试的示例:
考虑使用Citrus()测试框架,它可能是您的一体式测试框架
- Zookeeper访问:检查
- Docker集成:检查
- 通过ApacheCamel进行Kafka集成:检查
- 等待x时间段:检查
- 验证结果:检查
还考虑使用Cuff8 Doker-Maven插件()来在同一个构建运行中执行柑橘测试之前设置DOCKER测试环境。
以下是两种工具一起进行自动化集成测试的示例:
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