我们目前正在使用Watin在我们的网络应用程序上进行UI测试。实际上,我们正在进行从上到下的集成测试,因为我们使用的是测试数据库,而不是模拟。
为了确保测试数据库处于预期状态,我们以前一直使用SQL Server的快照功能在每次测试开始时回滚数据库。这很慢,并且在恢复快照后立即导致错误。
由于每个测试都在调用UI并且可能使用多个数据库连接,因此我们无法在每个连接上启动事务。
我想知道是否有可能以某种方式将所有数据库连接附加到单个事务并在以后将其回滚?这可能必须在db级别本身发生。
如果有人对如何重置每个UI测试的测试数据有任何其他建议,我很乐意听取您的想法。
答案 0 :(得分:3)
如果启动进程,Visual Studio开发Web服务器的一个实例,然后运行WatiN测试,那么您可以将测试包装在一个块中,如下所示:
using (new TransactionScope())
{
var server = new Server(PORT_NUMBER, VIRTUAL_PATH, PHYSICAL_PATH);
server.Start();
try
{
using (var ie = new IE())
{
// TODO: perform necessary testing using ie object
}
}
finally
{
server.Stop();
}
}
并且理论上所有数据库连接都会在单个分布式事务中登记,并且在处理TransactionScope时它们的更改都将被回滚。
要运行开发Web服务器,您需要从GAC中提取WebDev.WebHost.dll并在项目中引用它 - 这是上面代码段中Server类的来源。如果您需要更详细的说明,请告诉我。
您需要确保MSDTC正在运行,如果您和数据库之间存在防火墙,那么根据端口设置,您可能会遇到困难。启动服务器的一个额外好处是,WatiN测试现在可以用于测量代码覆盖率。