繁体   English   中英

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

[英]Bulk loading MongoDB database from Java/Groovy for testing

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

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

基本上,我不需要编写如下几百行代码:new Record(name:'John Doe',age:'25',favoriteColor:'blue')。save()

除了各自具有30个属性外,所有这些都确保满足约束并且数据真实。 这就是为什么我要使用生产数据。

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

有没有更好的办法? 也许以某种方式将原始JSON解组到我可以用Grails MongoDB GORM或GMongo执行或直接调用Java MongoDB驱动程序的东西中?

您可以使用com.mongodb.util.JSON类将JSON数据直接转换为DBObject。 看一下这个示例 ,该示例演示了如何使用Java驱动程序进行操作。
这个MongoDB 博客文章显示了如何使用GORM和Groovy驱动程序来做到这一点。

您是否需要将测试数据存储在可传输文件中,还是始终可以访问可在其上运行的mongodb实例? 例如,假设您有一个测试mongodb服务器,并且可以在运行测试时依靠它来访问它。

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

如果需要将测试数据保存在文件中(例如,因为您要将其存储在代码存储库中),则需要找到一种易于从BSON序列化/反序列化的格式。 JSON似乎是一个显而易见的选择,尤其是因为正如@drorb所述,mongodb已经具有为您完成此操作的工具。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM