6

我们已经开始在我们的很多数据管道工作中使用 NiFi。在 Nifi 中具有挑战性的一件事是对流的变化进行回归测试。

处理 NiFi 流的单元和功能测试的常用方法是什么?有没有框架?

4

1 回答 1

11

关于这个主题可以写很多,但我会尽量保持重点和简短。

  • 单元测试
    • NiFi 框架为框架本身以及单个处理器提供了广泛的测试实用程序。您可以检查任何捆绑处理器的测试代码以查看常见的测试模式(测试特定逻辑方法与通过TestRunner模拟执行测试任意流文件的执行)。许多模拟类和服务可用于简化这些测试。例子:TestEncryptContent
    • 还支持 Groovy 单元测试和 Spock 作为测试框架,以允许描述性场景。例子:StandardHttpResponseMapperSpec
  • 集成测试
    • 您还可以在测试代码中构建动态流(即配置多个处理器和连接),然后传入任意数据以评估行为。以编程方式构建流程一开始可能需要一些时间,但一旦完成,您将拥有一个可重复的流程定义,您可以将其用于许多不同的输入特征。例子:ITestHandleHttpRequest
    • 您可以在进程组上测试变量等的应用。例子:StandardProcessGroupIT
    • 您可以使用 Docker 容器来测试 MongoDB 等依赖服务。一些操作系统集成功能使用容器测试使用TestContainers。例子:ShellUserGroupProviderIT
  • 冒烟测试
    • 您可以在 NiFi 注册表中有一个特殊的存储桶,其中包含用于在新/升级的 NiFi 实例上建立基线的“测试流程”。也许一个流试图通过繁重的处理来耗尽内存、另一个网络、另一个 CPU 等。您可以将这些版本化的流部署到一个新系统上并运行它们以确定常见已知场景中的性能。
    • 您可以在修改流程后通过流程重放特定流程文件,以在流程开发期间收集更多信息,收紧反馈循环并验证预期行为。NiFi 用户指南 - 重放流文件
    • 您可以使用GenerateFlowFile模拟静态或动态流文件内容和属性,您可以将其馈送到部署“被测流”的流程组中。从 FUT 的角度来看,这与生产场景没有什么不同。当流程更新时,可以使用相同的 GFF 来“验证”新行为,然后可以禁用它,并将“生产”输入连接拖到相同的输入端口上。我的演示文稿中的更多示例BYOP:使用 Apache NiFi 进行自定义处理器开发幻灯片
于 2019-07-16T17:48:47.940 回答