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

时间:2012-03-16 10:14:41

标签: 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分钟内完成的更改将会丢失!

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

谢谢,

3 个答案:

答案 0 :(得分:5)

选项4从来没有在生产服务器上进行测试,这是灾难的一个秘诀(在互联网上看到数千个有趣的(如果你不是主角)故事,这可能会出现可怕的错误),正确的做法是将以相同的方式配置测试和生产服务器。

答案 1 :(得分:0)

有一个fith选项。如果网站收到用户“WeAreTestingOutSite”的注册,除了将用户实际添加到数据库之外,它会执行所有操作。

老实说,正如所说的那样,有更好的方法可以测试生产站点是否仍在运行,而不是运行机器人注册用户以确保其正常运行(或运行)。

答案 2 :(得分:-1)

我建议您使用第4个选项:引入允许删除用户的新功能。可能不是用户本人而是系统管理员(Backoffice用户)。这样你就可以测试用户是否可以注册 - 之后删除,而不关心SQL脚本。