如何在系统测试运行后回滚/拆除/清除数据库更改?

The*_*ght 1 sql-server selenium nunit system-testing

我有一个测试方法,使用NUnit和Selenium,它在我们的网站上打开浏览器,该浏览器位于Production Server上并注册用户并验证注册是否成功.

(我知道理想情况下系统测试应该在单独的测试服务器而不是生产上运行,但在这里他们想测试prod系统是否有效!)

问题是如何通过此测试回滚数据库更改?例如,运行状态之前和之后我的数据库的状态应该是相同的.

我想到了3种可能的选择,但没有一种是实用的:

1)在开始测试(Setup)之前和运行测试之后(TearDown)编写SQL查询以从实际表中删除; 这是我当前的方法但是这种方法的问题在于我必须确切地知道每个运行的系统测试涉及哪些表,这可能很快变得非常复杂,因为测试可能会影响多个表.

2)编写事务代码这不是一个选项,因为代码更改是由网站完成的,而不是由编写的单元测试完成的.

3)在每次测试开始之前获取现有数据库(SQL Server 2008 R2)的快照,然后在测试完成后,将快照还原到原始快照.如果我们只能在Staging环境中运行测试,这个想法对我来说听起来不错,但问题是测试必须在生产上运行并且可能需要5分钟才能完全滚动并恢复它,这将是一个愚蠢的想法,因为在那5分钟内完成的更改将会丢失!

请告知解决此问题的最佳方法是什么方法?可能有第四种选择?

谢谢,

ang*_*ego 5

选项4永远永远永远永远做测试在生产服务器上它是一个灾难(看到成千上万的有趣的(如果你不是主角)在互联网上的故事如何,这可能严重错误),做正确的事情会以相同的方式配置测试和生产服务器.