如何编写依赖 Druid 的集成测试?

How to write integration tests depending on Druid?

我正在编写一个从 Druid 数据库生成报告的应用程序。我的集成测试需要从该数据库中读取数据。

我目前的方法涉及为每个测试创建合成数据。但是,我无法删除从数据库创建的数据(通过删除条目或完全删除架构)。已尝试 this,但在禁用该段并触发 kill 任务后仍然取回数据。

我认为要么我的方法完全错误,要么有一种方法可以从数据库中删除我无法找到的信息。

您可以通过以下 2 种方法做到这一点

方法一:

  • 禁用段(已用=0)
  • 为该段触发终止任务
  • 有加载和删除规则

参考:http://druid.io/docs/latest/ingestion/tasks.html(寻找破坏段)

方法 2:(在设置生产之前更喜欢此方法进行集成测试):

  • 停止协调器节点并删除 druid_segments 中的所有实体 table 在元数据存储中
  • 停止历史节点并删除历史节点
  • druid.segmentCache.locations指向的目录内的所有内容
  • 启动协调器和历史节点

记住这将从德鲁伊集群中删除所有内容。

最后,我通过在 Druid 中插入数据并查询每个单元测试的特定 ID 来解决这个问题。

不是很优雅,因为现在一个恶意测试可以(可能)扰乱另一个测试的结果。