如何在比例下创建PostgreSQL测试数据

2021-03-11 00:29:17

无论哪种方式,软件开发生命周期都需要将数据视为开发人员工作流的组成部分。在本文中,我们' ll探索3种不同的方法,用于为Postgres数据库生成测试数据。

正如您所看到的,我们' VE设置非常不安全的默认凭据。这并不意味着是一个强大/成本化的实例,但它' ll为我们的测试线束做。

在这个例子中,我们' ll设置一个非常简单的架构。我们创建了我们拥有一堆公司的基本应用程序,这些公司都有联系人。

此模式捕获了我们应用的一些业务逻辑。我们有唯一的主要密钥,我们有外国关键约束,我们有一些具有&#39的特定于域的数据类型;语义含义'例如,随机字符串_SXæA-II不是有效的电话号码。

您可以做的第一件事在您启动项目时效果很好,这是手动插入所需的所有数据。这涉及只需手动编写一个具有一堆插入语句的SQL脚本。唯一真正思考的是插入命令,以便你不要违反外国关键约束。

所以在这里,我们将直接插入我们的数据库中。此方法是直接的,但是当您需要更多数据或模式的复杂性增加时不扩展。此外,对边缘案例的测试需要插入的数据中的硬编码边缘情况 - 导致您要捕获的错误的线性工作。

自你和#39;重新编程人员,你不要像手动工作一样。你喜欢无缝的东西,最重要的是自动化!

postgres附带一个名为generate_series的方便函数,哪个...鼓卷...生成系列!我们可以使用它来产生尽可能多的数据,而无需手工写作。

我们在此生成了100家公司和联系人,这些类型是正确的,但输出是强大的。首先,每个公司都有1个联系,更重要的是实际数据看起来完全无用。

如果您关心语义上的数据(即,您的电话列中的文本实际为电话号码),我们需要更复杂。

我们可以为自己定义函数来生成名称/电话号码/电子邮件等,但为什么重新发明轮子?

Synth是一个开源项目,旨在解决创建现实测试数据的问题。它与Postgres集成了,所以您赢得了' t需要编写任何SQL。

Synth使用声明性配置文件(JSON Don' t担心)来定义如何生成数据。安装合成器二进制文件是指“安装”页面。

使用Synth的第一步是创建工作空间。工作空间只是文件系统中的目录,告诉合成器,这是您将要存储的配置:

接下来我们希望为此模式创建一个名称空间(基本上是独立数据模型)。我们通过简单地创建子目录,合成器将其作为单独的架构将其视为:

有趣的来了!使用Synth' S配置语言我们可以指定如何生成数据。让&#39开始与较小的表格公司开始。

要告诉合成器,公司是桌子(或合成Lingo的集合)我们' ll创建一个新的文件app / companies.json。

在这里,我们'重新告诉synth,我们有2列,company_id和company_name。第一个是数字,第二个是字符串,JSON对象的内容定义了数据的约束。

现在我们可以通过创建文件my_app / contacts.json来为联系人表做同样的事情。在这里,我们对公司表的外键约束具有额外的复杂性,但我们可以轻松地使用Synth' s smote_as生成器来解决它。

这里有很多事情 - 为了深入了解Synth配置,请参阅I' D建议阅读综合文档。这种模式可以'真的有很多很酷的功能!

现在我们在Synth中拥有我们的表数据模型,我们可以生成数据到Postgres:

手动插入:可以让你开始。 如果您的需求是基本的,它是最少努力创建工作数据集的路径。 postgres generate_series:此方法比手动插入更好 - 但如果您关心数据的内容并具有外键约束您' LL手头需要写一点定制的SQL。 Synth:Synth有一个小的学习曲线,但要在比例下创建现实的测试数据,降低了大部分人工劳动力。 在下一个帖子中我们' ll探索如何将现有数据库借助进行测试。 如果你有敏感/个人数据 - 我们也是担心的,不要担心。