apache 风暴单元测试实时拓扑中的螺栓
apache storm unit testing a bolt in a live topology
我有一个风暴拓扑,它有一个连接到 kafka 队列的喷口,并将元组转发到我的螺栓进行处理。我只想对螺栓进行单元测试,而不是 kafka -> spout -> bolt
中的整个片段。但是,我还想在风暴拓扑实例中测试螺栓,而不仅仅是它的纯功能。原因是螺栓实际上将处理后的数据发送到 cassandra 数据库。
所以我实现这一目标的一种方法是制作一个测试喷口,将其连接到螺栓,然后通过测试喷口将测试元组发送到螺栓。但是,对于测试来说,这似乎工作量太大了。有一个更好的方法吗?比如在测试中劫持原始 spout 来发送一些测试元组?
您可能会考虑将 Kafka spout 替换为 https://storm.apache.org/releases/0.9.6/javadocs/backtype/storm/testing/FixedTupleSpout.html or 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, so can be used with completeTopology https://github.com/apache/storm/blob/64e29f365c9b5d3e15b33f33ab64e200345333e4/storm-server/src/main/java/org/apache/storm/Testing.java#L405。这可以让你编写测试,最初设置一些元组,运行拓扑直到所有元组都是 acked/failed,然后让你断言,例如该数据已写入 Cassandra,所有元组均已确认。
这里有一个使用 completeTopology 的例子 https://github.com/xumingming/storm-lib/blob/master/src/jvm/storm/TestingApiDemo.java#L83。
我有一个风暴拓扑,它有一个连接到 kafka 队列的喷口,并将元组转发到我的螺栓进行处理。我只想对螺栓进行单元测试,而不是 kafka -> spout -> bolt
中的整个片段。但是,我还想在风暴拓扑实例中测试螺栓,而不仅仅是它的纯功能。原因是螺栓实际上将处理后的数据发送到 cassandra 数据库。
所以我实现这一目标的一种方法是制作一个测试喷口,将其连接到螺栓,然后通过测试喷口将测试元组发送到螺栓。但是,对于测试来说,这似乎工作量太大了。有一个更好的方法吗?比如在测试中劫持原始 spout 来发送一些测试元组?
您可能会考虑将 Kafka spout 替换为 https://storm.apache.org/releases/0.9.6/javadocs/backtype/storm/testing/FixedTupleSpout.html or 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, so can be used with completeTopology https://github.com/apache/storm/blob/64e29f365c9b5d3e15b33f33ab64e200345333e4/storm-server/src/main/java/org/apache/storm/Testing.java#L405。这可以让你编写测试,最初设置一些元组,运行拓扑直到所有元组都是 acked/failed,然后让你断言,例如该数据已写入 Cassandra,所有元组均已确认。
这里有一个使用 completeTopology 的例子 https://github.com/xumingming/storm-lib/blob/master/src/jvm/storm/TestingApiDemo.java#L83。