我正在为特定的网络应用程序进行自动化测试。它使用数据库来保存数据(在本例中为SQL Server)。
在我们的自动化测试中,我们执行了几项数据库更改(插入,更新)。测试完成后,我们希望将数据库恢复到原始状态。
步骤将是这样的:
第一个版本非常简单 - 创建表备份然后恢复它。但是我们遇到了引用完整性的问题。
之后我们决定使用完整的数据库备份,但我不喜欢这个想法。
此外,我们认为我们可以跟踪所有引用并仅备份所需的表而不是整个数据库。
最后的想法是以某种方式记录我们的操作(插入,更新),然后执行反向操作(删除插入,更新旧数据以进行更新),但它看起来有点复杂。
可能有另一种解决方案吗?
答案 0 :(得分:2)
实际上,不需要以本机SQL Server术语还原数据库,也不需要跟踪更改然后将其还原回来
您可以使用 ApexSQL Restore - 一个SQL Server工具,将本机和本机压缩的SQL数据库备份和事务日志备份作为实时数据库附加,可通过SQL Server Management Studio,Visual Studio或任何其他第三方工具。它允许附加单个或多个完整,差异和事务日志备份
有关如何在您的方案中使用该工具的详细信息,请查看 Using SQL database backups instead of live databases in a large development team 在线文章
免责声明:我在ApexSQL担任产品支持工程师
答案 1 :(得分:1)
如果您希望使用“插入和更新”对数据库进行最小的更改,那么在事务中执行那些可以在测试结束时回滚的更改是更好的选择。这样,SQL服务器将自动存储有关您更改的信息,并在测试开始之前将其反转回状态。
BEGIN TRANSACTION
http://technet.microsoft.com/en-us/library/ms188929.aspx
答案 2 :(得分:1)
我认为更好的想法是创建测试数据库。 您还可以为方法创建接口,首先实现真实数据(使用真实数据库),然后为测试数据库创建第二个实现。
答案 3 :(得分:1)
您可以创建数据库快照。
快照将跟踪测试期间更改的所有已更改数据页。完成后,您可以将快照还原到以前的状态。
CREATE DATABASE [test_snaphot1] ON
( NAME = test, FILENAME =
'e:\SQLServer\Data\test_snapshot1.ss' )
AS SNAPSHOT OF [test];
GO
- 完成所有测试
RESTORE DATABASE [test] from
DATABASE_SNAPSHOT = 'test_snaphot1';
GO
您必须为数据库的每个数据文件创建一个快照文件。因此,如果您有一个包含4个数据文件的数据库,那么您的快照语法应该包含4个快照文件。
答案 4 :(得分:0)
找到简单的解决方案 - 重命名表。
算法非常简单:
由于