我有几个Nifi流程组,在推广到生产之前,我想对其进行集成测试。问题是我似乎找不到任何有关此操作的文档。
数据来源似乎是实现我想要的目标的有前途的工具,但是,在flowfile的生命周期中,数据是从kafka或文件系统发布的。结果,流文件UUID发生更改,因此我无法使用nifi-api
对其进行查询。
此外,我知道Nifi提供了一个TestRunner
库来运行测试,但是,这似乎仅适用于通过代码而非UI生成的处理器/处理器组。
没有人知道用于nifi流程组的集成和单元测试的工具,框架或模式。理想情况下,这是一个解决方案,您可以在不修改现有工作流程的情况下以编程方式比较处理器/处理器组的输入/输出。
答案 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
该库仍在开发中,因此欢迎改进和想法! :)