apache storm unit测试实时拓扑中的螺栓

时间:2018-02-09 19:28:18

标签: unit-testing apache-storm

我有一个风暴拓扑,它有一个连接到kafka队列的spout,并将元组转发给我的bolt进行处理。我想仅对螺栓进行单元测试,而不是kafka -> spout -> bolt的整个段。但是,我还想在风暴拓扑实例中测试螺栓,而不仅仅是它的纯功能。原因是bolt实际上将处理后的数据发送到cassandra数据库。

因此,实现此目的的一种方法是制作测试喷口,将其连接到螺栓,并将测试元组通过测试喷口发送到螺栓。然而,这似乎可能对测试来说太多了。有一个更好的方法吗?就像劫持测试中的原始喷口发送一些测试元组一样?

1 个答案:

答案 0 :(得分:1)

您可能会考虑使用https://storm.apache.org/releases/0.9.6/javadocs/backtype/storm/testing/FixedTupleSpout.htmlhttps://storm.apache.org/releases/0.9.6/javadocs/backtype/storm/testing/FeederSpout.html替换您的Kafka喷口进行测试。

使用FixedTupleSpout进行测试的一个好处是它实现了https://github.com/apache/storm/blob/a4afacd9617d620f50cf026fc599821f7ac25c79/storm-client/src/jvm/org/apache/storm/testing/CompletableSpout.java,因此可以与completeTopology https://github.com/apache/storm/blob/64e29f365c9b5d3e15b33f33ab64e200345333e4/storm-server/src/main/java/org/apache/storm/Testing.java#L405一起使用。这可以让你编写最初设置一些元组的测试,运行拓扑直到所有元组被激活/失败,然后让你断言,例如这些数据被写入Cassandra并且所有元组都被激活了。

这里有一个使用completeTopology https://github.com/xumingming/storm-lib/blob/master/src/jvm/storm/TestingApiDemo.java#L83的例子。