gpt4 book ai didi

sql-server - 管理测试数据 : Can you enlist all db connections into a single transaction?

转载 作者:行者123 更新时间:2023-11-28 20:07:12 28 4
gpt4 key购买 nike

我们目前正在使用 Watin 在我们的 Web 应用程序上进行 UI 测试。实际上,我们正在从上到下进行集成测试,因为我们使用的是测试数据库而不是模拟。

为了确保测试数据库处于预期状态,我们之前一直使用 SQL Server 的快照功能在每次测试开始时回滚数据库。这相当慢,并且在恢复快照后会立即导致错误。

由于每个测试都调用 UI 并可能使用多个数据库连接,我们无法在每个连接上启动事务。

我想知道是否有可能以某种方式将所有数据库连接附加到单个事务并在稍后将它们回滚?这可能必须在数据库级别本身发生。

如果有人对如何为每个 UI 测试重置我们的测试数据有任何其他建议,我很想听听您的想法。

最佳答案

如果启动 进程中 Visual Studio 开发 Web 服务器实例,然后运行 ​​WatiN 测试,那么您可以像这样将测试包装在一个 block 中:

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 并在您的项目中引用它 - 这是上面代码片段中服务器类的来源。如果您需要更详细的说明,请告诉我。

您需要确保 MSDTC 正在运行,如果您和数据库之间存在防火墙,那么您可能会遇到困难,具体取决于端口设置。在进程中启动服务器的另一个好处是,WatiN 测试现在可以有助于测量代码覆盖率。

关于sql-server - 管理测试数据 : Can you enlist all db connections into a single transaction?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/687825/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com