我有一个storm拓扑,它有一个连接到kafka队列的喷口,并将元组转发给我的bolt进行处理。我只想在螺栓上做单元测试,而不是从 kafka -> spout -> bolt
. 但是,我还想在storm拓扑示例中测试这个螺栓,而不仅仅是测试它的纯功能。原因是bolt实际上将处理后的数据发送到cassandra数据库。
我实现这一点的一种方法是制作一个测试喷口,将它连接到螺栓上,然后通过测试喷口将测试元组发送到螺栓上。然而,对于一个测试来说,这似乎是太多的工作了。有没有更好的办法?比如劫持测试中的原始喷口来发送一些测试元组?
1条答案
按热度按时间rsaldnfx1#
你可以考虑用这两种方法中的任何一种来代替你的Kafka壶嘴https://storm.apache.org/releases/0.9.6/javadocs/backtype/storm/testing/fixedtuplespout.html 或者https://storm.apache.org/releases/0.9.6/javadocs/backtype/storm/testing/feederspout.html 用于测试。
使用fixedtuplespout进行测试的一个好处是它实现了https://github.com/apache/storm/blob/a4afacd9617d620f50cf026fc599821f7ac25c79/storm-client/src/jvm/org/apache/storm/testing/completablespout.java,所以可以与完全拓扑结合使用https://github.com/apache/storm/blob/64e29f365c9b5d3e15b33f33ab64e200345333e4/storm-server/src/main/java/org/apache/storm/testing.java#l405. 这可以让您编写测试,最初设置一些元组,运行拓扑直到所有元组都已确认/失败,然后让您Assert(例如,数据已写入cassandra,所有元组均已确认)。
这里有一个使用完全拓扑的例子https://github.com/xumingming/storm-lib/blob/master/src/jvm/storm/testingapidemo.java#l83.