2015-06-02 73 views
5

我们有一个项目,我们需要为其进行功能测试,创建一个假数据库和假数据。最初我们从一个脚本开始,使用猫鼬创建实体,初始化它们并保存它们。在mongodb中设置虚假数据进行测试

var StudentA = new Student(); 
StudentA.name = "Bob"; 
StudentA.surname = "Marley"; 
StudentA.save(); 

随着应用程序的增长和文件之间的关系增加,这个脚本变得绝对乱七八糟。现在它在我们投资应用程序开发的时间方面构成了一个瓶颈。

问题是,有没有更好的方法来做到这一点?例如一个以更结构化的方式用数据填充数据库的库?还是应该像csv文件一样解析文件,然后将它推送到mongo?

问题是针对mongodb,但它可以推广到任何种类的需要用假数据填充的NO-SQL数据库中。 (对于RDBMS,使用类似语法的SQL更简单)

回答

5

您可以尝试写入json文件而不是代码,并使用mongoimport来重新创建数据库。 这比维护非常冗长和重复的代码更容易。

+0

这听起来足够强大。有没有一种简单的方法来管理这种方法中的文档关系?例如每个学生都有一个学校作为一个领域。在我的脚本中,mongoose处理这个id创建阶段(简单地当你创建对象时) - 在这种方法中,我需要手动设置Id到学校并将它们链接到json文档中? – ralzaul

+0

是的,你将不得不手动维护关系。请记住'_id'不需要是ObjectId。只要它是独一无二的,它可以是任何东西。 所以'school.json'可以包含:'{_id:1,name:“Foo”}'和'student.json'可以包含'{_id:“student_1”,school_id:1,name:“John”}' 。 请记住尝试嵌入文档,而不是制作“类似SQL的连接”。 –

+0

另外,我会使用不同的(小)json文件来确保我的所有测试都保持独立,以避免巨大的数据集。 –

2

Download这个json文件由MongoDB提供。

可以使用mongoimport它:在Mongoimport

mongoimport --db testDB --collection testCollection --file test.json 

更多细节可以发现here

+1

谢谢,但我宁愿使用我自己的数据模型。它不应该是随机数据,而应该是我数据模型中的随机数据。 – ralzaul

4

我同意上述解决方案,并认为最好的办法是:使用库工具

  1. 生成虚假信息。
  2. 将假信息转换为json文件。
  3. 使用mongoimport将其上传到mongo。

我ound有图书馆在那里,它允许你做生成自由伪造数据,如Faker.js(如果您熟悉一般的Node.js和JS),或者你可以使用免费的Java版本法克尔在这里:https://github.com/blocoio/faker

我还发现了一个付费的解决方案在这里:https://www.mockaroo.com/但不知道为什么会有人愿意支付这个,因为它是很容易产生的假数据 - 在这里是一步一步的指导。

导入骗子的Java库和JSON作家到您的项目(我使用gradle这个所以这里是gradle这个代码):

repositories { 
     maven { url 'https://jitpack.io' } 
    } 
dependencies { 
    compile 'com.github.blocoio:faker:1.0.1' 
    compile 'com.googlecode.json-simple:json-simple:1.1.1' 
} 

使用下列Java代码来生成许多假冒的对象,你想在这里我使用一个循环来生成3个对象,并将其保存到json.file中。 JSON文件的

public class FakerTest { 
    static FileWriter file; 
    public static void main(String[] args) { 
     try { 
      file = new FileWriter("c:\\<Your Location>\\test.json"); //try opening the file 
      for (int i = 0; i < 3; i ++) { 
       Faker faker = new Faker(); 
       JSONObject obj = new JSONObject(); 
       obj.put("Name", faker.name.firstName()); 
       obj.put("address",faker.address.streetAddress()); 
       obj.put("email",faker.internet.email()); 
       file.write(obj.toJSONString()); 

      } 
      file.flush(); 
      file.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

结果:

{ “地址”: “790墨菲 Vista的”, “电子邮件”:“威拉@ schmittjenkinsandabernathy。net“,”Name“:”Christop“} {”address“:”7706 Larkin River“,”email“:”[email protected]“,”Name“:”Braeden“} {”address“:” 1893年 贾马克斯 休息”, “电子邮件”: “[email protected]”, “姓名”: “马莉”}

现在,mongoimport上传

的摊贩库将让你生成大量字段请参考:

https://github.com/stympy/faker/blob/master/README.md

0

我创建了一个开源工具来生成随机BSON文档并将它们插入到Mongodb中。它支持所有的BSON types(ObjectId,ISODate,二进制数据等)
这些文档是根据配置文件生成的,所以你可以指定你想要的字段及其类型。

它还支持多收集,多数据库的写作,分片收集,索引构建之间的参考...

它可以在这里找到:github.com/feliixx/mgodatagen

相关问题