集成和单元测试Nifi流程组

时间:2018-08-13 22:42:32

标签: testing apache-nifi

我有几个Nifi流程组,在推广到生产之前,我想对其进行集成测试。问题是我似乎找不到任何有关此操作的文档。

数据来源似乎是实现我想要的目标的有前途的工具,但是,在flowfile的生命周期中,数据是从kafka或文件系统发布的。结果,流文件UUID发生更改,因此我无法使用nifi-api对其进行查询。

此外,我知道Nifi提供了一个TestRunner库来运行测试,但是,这似乎仅适用于通过代码而非UI生成的处理器/处理器组。

没有人知道用于nifi流程组的集成和单元测试的工具,框架或模式。理想情况下,这是一个解决方案,您可以在不修改现有工作流程的情况下以编程方式比较处理器/处理器组的输入/输出。

2 个答案:

答案 0 :(得分:2)

通过引入Apache NiFi Registry,我们已经看到用户将流程从开发/沙盒环境提升到了测试/ QE环境,在该环境中,围绕“被测流程”存在现有的“测试工具”流程,因此他们可以通过流程发送可重复且确定性的(或真实生产数据的匿名样本)并将结果与​​预期值进行比较。

正如您所指出的,为单元测试提供了一个TestRunner类和一个whole testing framework。尽管可能很难将UI构造的流程手动转换为程序化构造,但是您还可以创建诸如转换器之类的内容来接受流程模板或flow.xml.gz文件,并将其转换为测试框架可处理的内容。

答案 1 :(得分:1)

也许plumber将帮助您进行流量测试。

我们还想测试整个NiFi流,而不仅仅是单个处理器,因此我们创建了这个库并决定开源。 Scala中的简单示例:

    // read flow previously exported from NiFi
    val template = TemplateDeserializer.deserialize(this.getClass.getClassLoader.getResourceAsStream("exported-flow.xml"))
    val flow = NifiTemplateFlowFactory(template).create()
    // enqueue some data to any processor
    flow.enqueueByName("csv row,12,another value,true", "CsvParserProcessor")

    // run entire flow once
    flow.run(1)

    // get the results from any processor
    val records = flow.resultsFromProcessorRelation("LastProcessorInFlow","successRelation")
    records should have size 1

该库仍在开发中,因此欢迎改进和想法! :)