【问题标题】:Using new database for testing or creating mocked data cloud foundry and MySQL?使用新数据库来测试或创建模拟数据 Cloud Foundry 和 MySQL?
【发布时间】:2025-11-29 19:40:02
【问题描述】:

我正在开发一个使用 AWS 的项目,我们正在将数据放入 MySQL 数据库中。该项目很长,主要处理数据库。我们的数据库结构可能会随时更改,但我们数据库中的数据会经常更改(例如每 15 天一次)。如果数据发生变化,这会导致系统集成商测试失败,因为我们在真实数据库上执行它。因此,我们提出了两个想法,一个是创建一个模拟数据并将其放入我们的数据库中并用它进行测试(大多数情况下它会起作用),但这是一项乏味的任务,因为数据库相当复杂。另一个是创建一个新数据库并从中复制当前数据(它将起作用,因为现在所有测试用例都通过了)。这将节省我们创建模拟数据的时间。我们将在 Dev 中运行我们的测试用例,并在此环境中进行验收,并在生产中进行 CF 绑定,因此就像编写额外的绑定和解除绑定行一样。我们正在使用蓝绿色部署,因此停机不是问题。 有人可以建议哪种方法更好吗?

一个单独的数据库用于测试(我从未见过这个) 还是创建模拟数据?

【问题讨论】:

    标签: mysql cloud-foundry


    【解决方案1】:

    假设您的数据库架构不是太复杂,我建议您使用内存数据库,如 H2 或 HSql 数据库。您可以加载所有必要的数据集作为设置的一部分,然后针对所有条件运行测试。

    在测试结束时,H2 实例将被清除。并且您的实际数据库不受影响。

    需要注意的是,作为内存数据库,您需要合理化设置期间输入的测试数据量。因此,您可以拥有多个测试套件,每个测试套件都有自己的一组测试数据(整体的子集)。

    您可以使用活动配置文件控制此类行为。

    【讨论】:

    • 我们总是将内存数据库用于开发目的,因为它速度很快,我们可以根据测试用例创建和销毁表,即根据您的测试用例要求创建数据库模式和记录并将其丢弃模拟数据对于外部资源很好,例如,您正在使用 API,比如说您的应用程序中的 Google Map,您不必在测试用例中真正调用该 API,或者假设您正在代码中发送电子邮件,您可以模拟这些代码
    • 我们还在内存数据库中使用我们在运行时执行期间创建和销毁的模拟数据。但这并不能解决测试原始数据的问题,如果数据库架构发生变化怎么办?