我有一个使用 NUnit 和 Selenium 的测试方法,它在生产服务器上的我们网站上打开一个浏览器并注册用户并验证注册是否成功。
(我知道理想情况下系统测试应该在单独的测试服务器而不是生产环境上运行,但在这里他们想测试产品系统是否工作!)
问题是如何回滚由于该测试导致的数据库更改?比如我的数据库在运行前后的状态应该是一样的。
我想到了 3 种可能的选择,但没有一个是实用的:
1) 在开始测试之前(Setup)和运行测试之后(TearDown)编写 SQL 查询以从实际表中删除;这是我目前的方法但是这种方法的问题是我必须确切地知道每个运行的系统测试涉及哪些表,这很快就会变得非常复杂,因为测试可能会影响多个表。
2)编写事务代码这不是一个选项,因为代码更改是由网站完成的,而不是由编写的单元测试完成的。
3) 在每次测试开始之前获取现有数据库(SQL Server 2008 R2)的快照,然后在测试完成后,将快照恢复到原始快照。如果我们只能在暂存环境中运行测试,这个想法对我来说听起来不错,但问题是测试必须在生产环境中运行,并且可能完全需要 5 分钟,所以回滚并恢复它,这将是一个愚蠢的想法,因为在那 5 分钟内完成的更改将丢失!
请告知解决此问题的最佳方法是什么?可能有第四个选项?
谢谢,