基于kafka的spark流应用程序功能测试

oaxa6hgo  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(387)

我正在为运行spark streaming和kafka的应用程序设置功能测试。要做的步骤是
启动zookeeper服务器
启动kafka服务器
启动消息生成器,为Kafka提供必要的数据
启动spark流媒体应用程序
等待5分钟
停止消息生成器
停止spark流应用程序
停止kafka服务器
停止zookeeper服务器
验证输出
除了简单的bash脚本之外,还有什么专业的方法可以做到这一点?
我认为这是一个相当普遍的问题,并没有严格的Spark流和Kafka。可能有一些测试框架支持设置环境、并行运行多个进程和数据验证/Assert。

kadbb459

kadbb4591#

可能有一些测试框架支持设置环境、并行运行多个进程和数据验证/Assert。
不幸的是,目前还没有一体化的框架。
一句话的答案是:使用docker compose和最简单的单元测试,或者选择基于gherkin的框架。
将上述步骤考虑为:
启动env
生成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

compose文件的思想是,您可以通过一个命令启动env: docker-compose up 而且环境设置在开发人员的机器和构建服务器之间是非常可移植的。
对于步骤2,任何测试框架都可以。
场景如下所示:
启动环境/确保其已启动
开始生成消息
做主张/睡我的甜线
关闭环境
谈论框架:
斯卡拉:斯卡拉测试。在那里,您可以拥有一系列良好的异步Assert和并行处理。
python:behave(注意多处理)或pytest之类的单元测试框架
不要让命名“单元测试框架”迷惑你。只有测试环境才能定义测试是单元化、模块化、系统化还是集成化,而不是工具化。
如果一个人使用单元测试框架并在那里编写 MyZookeeperConnect("192.168.99.100:2181") 它不再是单元测试了,甚至单元测试框架也帮不了它:)
把第1步、第2步和第3步粘在一起——简单的bash是我的选择。

vcirk6k6

vcirk6k62#

考虑使用柑橘(http://citrusframework.org/)测试框架,可以是您的一体式测试框架。
zookeeper访问:检查
docker集成:检查
通过apache camel实现kafka集成:检查
等待x时间段:检查
验证结果:检查
还可以考虑使用fabric8 docker maven插件(https://github.com/fabric8io/docker-maven-plugin)用于在同一构建运行中执行柑橘测试之前设置docker测试环境。
下面是两个工具一起工作以进行自动化集成测试的示例:https://github.com/christophd/citrus-samples/tree/master/sample-docker

相关问题