1

我有一个使用 NUnit 和 Selenium 的测试方法,它在生产服务器上的我们网站上打开一个浏览器并注册用户并验证注册是否成功。

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

问题是如何回滚由于该测试导致的数据库更改?比如我的数据库在运行前后的状态应该是一样的。

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

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

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

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

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

谢谢,

4

3 回答 3

5

选项 4 永远不会在生产服务器上进行测试,这是灾难的根源(请参阅互联网上成千上万的有趣(如果您不是主角)故事,了解这会如​​何发生可怕的错误),正确的做法是以相同的方式配置测试和生产服务器。

于 2012-03-16T10:34:22.060 回答
0

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

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

于 2012-03-16T11:12:12.183 回答
-1

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

于 2012-03-16T10:34:39.237 回答