java - 从 Java/Groovy 批量加载 MongoDB 数据库进行测试

标签 java mongodb grails groovy bson

我有一个现有的 Grails/MongoDB 应用程序,我正在向其中添加一些自动化测试。我希望针对 Mongo 集合中的一组特定数据执行这些测试。我希望测试能够破坏数据(如果幸运的话,可以得到可预测的结果),然后能够快速删除并重新创建/重新加载数据库,以便我可以再次运行测试。

由于我要将此种子测试数据基于我们生产系统中的真实数据,因此我希望能够从 JSON/BSON 格式加载数据,我可以从 Mongo 中的查询中检索该数据shell 或类似的东西。

基本上我不想编写如下所示的一百行代码: new Record(姓名:'John Doe',年龄:'25',favoriteColor:'blue').save()

除了每个属性有 30 个属性外,始终确保满足约束条件且数据真实。这就是为什么我想使用生产数据。

我也不想求助于生成运行 mongorestore 的执行程序来加载和重新加载真实数据,因为这需要在测试人员的计算机上运行其他软件。

还有更好的办法吗?也许以某种方式将原始 JSON 解码为我可以使用 Grails MongoDB GORM 或 GMongo 执行的东西,或者直接调用 Java MongoDB 驱动程序?

最佳答案

您是否需要将测试数据存储在可传输文件中,或者您始终可以访问其所在的 mongodb 实例?例如,假设您有一个测试 mongodb 服务器,并且无论何时运行测试,您都可以依赖对其进行访问。

在这种情况下,最简单的解决方案是将测试数据保存在您在每次测试运行之前克隆的集合中。然后测试可以随意地破坏克隆的集合,而不会丢失任何实际数据。

如果您需要将测试数据保存在文件中(例如,因为您希望将其存储在代码存储库中),那么您需要找到一种易于序列化为 BSON 或从 BSON 反序列化的格式。 JSON 似乎是一个显而易见的选择,特别是因为,正如 @drorb 上面所说,mongodb 已经有工具可以为您做到这一点。

然后,您只需要编写一个脚本来将现有集合的内容转储到 JSON 文件中,然后编写另一个脚本来加载一组 JSON 文件并将它们存储在集合中 - 每个脚本可能不超过几行。

我建议将每个对象存储在单独的 JSON 文件中,而不是使用包含所有测试数据的大文件。尽管我很喜欢 JSON,但它不太适合流式传输,而且您必须将整个集合存储在内存中,然后才能开始将其转储到 mongodb 中。如果您的测试数据足够大,它可能会开始导致内存问题。

关于java - 从 Java/Groovy 批量加载 MongoDB 数据库进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15554352/

相关文章:

Java服务器: Socket sending HTML code to browser

java - Java Visualvm中如何解释大自检结果?

mongodb - Geonear 不工作 - mongodb?

javascript - mongodb 按最后一条记录到第一条记录的顺序查找

arrays - 数组数组的Mongo过滤器数组

java - 在hadoop中进行集合成员资格测试的最佳方法是什么?

grails - 在 Grails 域类上运行初始化函数

grails - 多重创建/编辑grails

Grails 配置 - 动态确定配置属性的正确方法

java - 如何在数组中生成随机数,使其总和达到定义的总数?