TransactionScope 回滚可以与 Selenium 或 Watin 一起使用吗?
我正在尝试对 ASP.NET 应用程序进行一些自动化 Web 测试。 我希望使用 Xunit.net 扩展中的 AutoRollback 属性来撤消测试期间所做的任何数据库更改。 AutoRollback 使用 TransactionScope 在测试前启动事务并在测试后回滚。
当我尝试在交易期间访问我的网络应用程序时,它总是超时。 看起来这应该可行,有什么想法吗? 这是我的测试:
[Fact]
[AutoRollback]
public void Entity_should_be_in_list()
{
Entity e = new Entity
{
Name = "Test",
};
dataContext.Entities.InsertOnSubmit(e);
dataContext.SubmitChanges();
selenium.Open("http://localhost/MyApp");
Assert.True(selenium.IsTextPresent("Test"));
}
I am trying to do some automated web testing of my ASP.NET application. I was hoping to use the AutoRollback attribute from Xunit.net extensions to undo any database changes that were made during the test. AutoRollback uses TransactionScope to start a transaction before the test and roll it back afterwards.
When I try to hit my web application during a transaction, it always times out. It seems like this should work, any ideas? Here is my test:
[Fact]
[AutoRollback]
public void Entity_should_be_in_list()
{
Entity e = new Entity
{
Name = "Test",
};
dataContext.Entities.InsertOnSubmit(e);
dataContext.SubmitChanges();
selenium.Open("http://localhost/MyApp");
Assert.True(selenium.IsTextPresent("Test"));
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的 ASP.NET 应用程序有一个单独的数据库上下文,并且它不知道您希望它加入由 Xunit.net 启动的事务。 显然,数据库在事务开始时锁定了一些资源; Web应用程序耐心等待一段时间并最终放弃。
我认为你最好的选择是从空数据库开始并使用 SQL 脚本创建架构并填充查找表(你的数据库是 在源代码控制下,对吧?)。 另一种方法是在运行测试之前备份数据库,然后在测试完成后恢复数据库。
Your ASP.NET application has a separate database context and it has no idea that you want it to join transaction started by Xunit.net. Apparently, the database locks some resources when transaction starts; web application waits patiently for some time and eventually gives up.
I think your best bet is to start from empty database and use SQL script to create schema and populate lookup tables (your database is under source control, right?). Another approach is to backup database before running the tests and then restore it once they finish.