版本控制开发测试记录在数据库中

时间:2010-01-06 17:29:25

标签: database version-control

我在数据库中有一些表和记录,用于手动测试我的(PHP)代码。假设,我想分享这些记录和表结构(例如:与其他开发人员);如果添加了一些模型更改或新表,每个人都会知道。

如何将此需求与您的开发过程集成?我的想法是在每次提交时将数据库转储到一个文件中,并在脚本确定它被修改后提交该文件。在更新时,也要更新此文件并重新加载其他开发数据库。这可以通过eclipse的external tool函数来实现,但我觉得这是 hacky。

如果应该对数据库中的测试数据进行版本控制/共享,您如何处理数据?

4 个答案:

答案 0 :(得分:3)

处理测试数据的方法很多,但我们使用的过程如下:

  • 维护项目(Visual Studio支持数据库项目)或至少包含数据库脚本的文件夹结构
  • 构建一个能够抓取最新脚本并从中创建数据库的工具
  • 将您的数据导出为可在脚本运行后执行的某种格式(INSERT语句或其他)

显然,随着数据库的更改,您需要维护数据,这可能意味着在添加新的非空列时重构数据文件。但是,一旦您拥有了这个系统,您的所有开发人员都可以轻松地从源代码控制中获取所有SQL,并轻松地使用测试数据生成自己的数据库。

替代方案是为所有开发人员维护开发数据库,​​我们也有。这样,您就可以获得开发数据库的一个“黄金”副本,其中包含最新的架构更改和测试数据。

答案 1 :(得分:3)

您可以使用OffScale DataGrove来解决此问题。

DataGrove跟踪对整个数据库(架构+数据)的更改,并允许您在任何时间点保存版本。通过简单的操作,您可以恢复到任何版本,并快速拥有一个完全可操作的数据库。

您可以使用DataGrove为每个版本或您的应用程序保存版本。您还可以为每个测试用例保存一个版本。如果你有一个构建服务器,它只需从DataGrove加载数据库并自动运行每个测试用例。

DataGrove还允许您生成数据库的多个独立虚拟副本。因此,你可以在存储库中拥有一个黄金DB(如@Ed建议的那样)以及所有最后的黄金副本。如果您需要在旧版本中修补代码,则可以从存储库中生成与该版本匹配的虚拟副本。

答案 2 :(得分:1)

测试数据与测试本身一样是代码的一部分,因此它们肯定应该在版本控制中。

由于测试数据通常不会更改每次提交,但仅更新以适应新的测试或模式,这是手动完成的,主要是为了防止转储因测试而改变的数据(使用测试数据)。但是,您可以编写转储脚本,或在构建软件中创建目标。

我们这样做的方法是使用ant和合并文件。合并文件是SQL中数据文件的更新(alter table,INSERT,UPDATE语句等)。 ant目标使用最新版本的测试数据进行初始化,并在其上执行合并文件,并转储新数据。这样一来,它总是很清楚变化是什么。

答案 3 :(得分:0)

SQL Data Compare Pro并行工作SQL比较允许静态数据以及架构编写出来并存储在源代码管理中。它通过使用DML(INSERT)语句保存.sql文件来实现此目的。除了脚本化文件外,SQL Data Compare Pro还可以从这些文件部署到数据库。

http://www.red-gate.com/products/SQL_Data_Compare/index.htm

免责声明:我是Red Gate SQL比较工具的产品经理。