如何编写依赖 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 来解决这个问题。
不是很优雅,因为现在一个恶意测试可以(可能)扰乱另一个测试的结果。
我正在编写一个从 Druid 数据库生成报告的应用程序。我的集成测试需要从该数据库中读取数据。
我目前的方法涉及为每个测试创建合成数据。但是,我无法删除从数据库创建的数据(通过删除条目或完全删除架构)。已尝试 this,但在禁用该段并触发 kill 任务后仍然取回数据。
我认为要么我的方法完全错误,要么有一种方法可以从数据库中删除我无法找到的信息。
您可以通过以下 2 种方法做到这一点
方法一:
- 禁用段(已用=0)
- 为该段触发终止任务
- 有加载和删除规则
参考:http://druid.io/docs/latest/ingestion/tasks.html(寻找破坏段)
方法 2:(在设置生产之前更喜欢此方法进行集成测试):
- 停止协调器节点并删除 druid_segments 中的所有实体 table 在元数据存储中
- 停止历史节点并删除历史节点
- 启动协调器和历史节点
druid.segmentCache.locations
指向的目录内的所有内容
记住这将从德鲁伊集群中删除所有内容。
最后,我通过在 Druid 中插入数据并查询每个单元测试的特定 ID 来解决这个问题。
不是很优雅,因为现在一个恶意测试可以(可能)扰乱另一个测试的结果。