我应该在 git 中存储用于我们自动化测试的数据库备份吗?

Should I store a database backup used for our automated tests in git?

我们目前正在尝试将自动化集成测试添加到我们的持续集成 (CI) 流程中。我们的 CI 流程正在使用 TeamCity,并且已经构建了我们的 .NET 解决方案,运行s NUnit 通过 Octopus Deploy 进行测试和部署。它是一个典型的 Web 应用程序,使用 SQL 服务器数据库。

所有代码和单元测试都在 Git 存储库中。

现在,自动化测试已经用 TestComplete 编写并且运行良好。在测试 运行 之前,测试依赖于数据库中存在的特定数据,因此我计划在 运行 测试之前 CI 进程恢复数据库。

我几乎肯定这些自动化测试与代码属于同一个存储库 - 毕竟所有测试都应该与代码一起进行版本控制。我不太确定的是数据库备份。我认为知道每个版本的测试使用哪个数据库备份很重要,但我读到将大型二进制文件存储在 Git 中并不是一个好主意。目前的备份是40mb。

我在将备份存储在 Git 和将其存储在某处的文件共享之间左右为难。我只是担心数据库备份将来可能会被覆盖,而我们测试中的先前版本会失败。我猜想 运行 对以前的构建进行自动化测试并不常见,所以也许这不是问题,我担心是不必要的。有没有其他人遇到过类似的情况?你最后做了什么?

我还没有遇到过同样的情况,但这是我解决这个问题的方法:

  • 测试应该进入与代码相同的回购协议。如果那不可能,请将它们放在不同的存储库中,但请确保保持版本同步,以便您知道哪一组测试适用于代码版本。
  • 将数据库备份文件放在文件共享上。使用带有版本号或时间戳的目录,以便您可以保留多个版本的备份。例如 backup-2015-02-26.
  • 在您的代码库中,添加一个指向数据库备份的文件作为参考。使用您的代码库提交并版本化该文件。这样,您将始终知道数据库备份文件适用于特定版本的代码。
  • 只删除您绝对不再需要的数据库备份文件。
  • 确保保存数据库备份文件的文件共享是 daily/weekly/incremental 备份计划的一部分。

将数据库备份文件添加到您的代码库只会让每个人都膨胀,这可能不是您想要的。

在 git 存储库中添加过多数据可能会导致存储库变大,这可能会导致生产力下降和新开发人员的入职时间变长。

如果您 CI env 可以访问互联网,您最好将数据存储在 s3 等云服务中。如果没有,除了将这些文件存储在可从 CI env 和开发人员的本地计算机访问的 Intranet 上之外,别无选择。