【问题标题】:Functional tests of application running on Spark Streaming with Kafka使用 Kafka 在 Spark Streaming 上运行的应用程序的功能测试
【发布时间】:2017-02-27 16:08:57
【问题描述】:

我正在为使用 Spark Streaming 和 Kafka 运行的应用程序设置功能测试。要完成的步骤是

  1. 启动zookeeper服务器
  2. 启动kafka服务器
  3. 启动消息生产者为 kafka 提供必要的数据
  4. 启动 Spark Streaming 应用程序
  5. 等待 5 分钟
  6. 停止消息生产者
  7. 停止 Spark Streaming 应用程序
  8. 停止 kafka 服务器
  9. 停止 zookeeper 服务器
  10. 验证输出

除了简单的 bash 脚本之外,还有什么专业的方法来做到这一点?

我认为这是一个非常笼统的问题,与 Spark Streaming 和 Kafka 没有严格的关系。也许有一些测试框架支持设置环境、并行运行多个进程以及数据验证/断言。

【问题讨论】:

    标签: apache-spark apache-kafka spark-streaming functional-testing


    【解决方案1】:

    也许有一些测试框架支持设置环境、并行运行多个进程以及数据验证/断言。

    不幸的是,没有一体化的框架。

    单行答案是:将 docker-compose 与您选择的最简单的单元测试或基于小黄瓜的框架一起使用

    将上述步骤视为:

    1. 启动环境

    2. 生成 Kafka 消息/验证

    3. 关闭环境

    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 步,任何测试框架都可以。

    场景如下:

    • 启动环境/确保它已启动
    • 开始生成消息
    • 做出断言/睡我的甜蜜线程
    • 关闭环境

    谈论框架:

    • 斯卡拉:Scalatest。在那里,您可以拥有大量的异步断言和并行处理。

    • Python:Behave(注意多处理)或单元测试框架,例如pytest

    不要让命名“单元测试框架”让您感到困惑。 只有测试环境定义了测试是否成为单元、模块化、系统或集成,而不是工具。

    如果一个人使用单元测试框架并在那里写 MyZookeeperConnect("192.168.99.100:2181") 它不再是单元测试,即使是单元测试框架也帮不上忙 :)

    将步骤 #1、#2、#3 粘合在一起 - 简单的 bash 将是我的选择。

    【讨论】:

      【解决方案2】:

      考虑使用 Citrus (http://citrusframework.org/) 测试框架,它可能是您的一体化测试框架。

      • Zookeeper 访问:检查
      • Docker 集成:检查
      • 通过 Apache Camel 集成 Kafka:检查
      • 等待 x 时间段:检查
      • 验证结果:检查

      还可以考虑使用 Fabric8 Docker Maven 插件 (https://github.com/fabric8io/docker-maven-plugin) 在同一构建运行中执行 Citrus 测试之前设置 Docker 测试环境。

      以下是两个工具协同工作以进行自动化集成测试的示例:https://github.com/christophd/citrus-samples/tree/master/sample-docker

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-10
        • 2016-06-12
        • 1970-01-01
        • 2020-04-01
        • 1970-01-01
        • 2017-08-16
        • 2016-11-29
        • 2018-07-02
        相关资源
        最近更新 更多