我们的apachestorm拓扑使用kafkaspout监听来自kafka的消息,在做了大量的Map/减少/丰富/聚合等之后,etc最终将数据插入cassandra。还有另一个kafka输入,在这里我们接收用户对数据的查询,如果topology找到一个响应,那么它会将该响应发送到第三个kafka主题。现在我们想用junit编写e2e测试,在这个测试中我们可以直接以编程的方式将数据插入到拓扑中,然后通过插入用户查询消息,我们可以在第三点Assert在查询中收到的响应是正确的。
为了实现这一点,我们考虑启动嵌入式kafka和cassandraunit,然后用它们替换实际的kafka和cassandra,然后我们可以在这个junit测试的上下文中启动拓扑。
但是我们的方法不适合junit,因为它使这些测试过于庞大。Kafka、Cassandra和拓扑学都是耗时耗力的。apachestorm中有什么东西可以支持我们计划编写的测试吗?
1条答案
按热度按时间r7knjye21#
这里有很多选择,这取决于你能忍受什么样的减速:
正如你提到的,你可以开始Kafka,Cassandra和拓扑结构。这是最慢的选择,也是“最现实的”。
启动kafka和cassandra一次,然后在所有测试中重用它们。您可以对storm localcluster执行相同的操作。在每次测试之间清除kafka/cassandra(例如删除所有主题)可能比重新启动它们更快。
更换Kafka喷口/螺栓和Cassandra螺栓与测试中的短柱。storm内置了许多工具,用于定位螺栓和管口,例如fixedtuplespout、feederspout、跟踪拓扑和localcluster中的completable拓扑功能。通过这种方式,您可以在拓扑中插入一些固定元组,并Assert哪些元组被发送到cassandra螺栓存根。这里和这里都有一些这种功能的例子
最后,您当然可以对单个螺栓进行单元测试。这是最快的测试。可以使用testing.testtuple创建要传递给螺栓的测试元组。