我正在通过SpecFlow,NUnit和Coypu对项目进行验收测试(对于浏览器自动化,使用WatiN驱动程序)。通过powershell / psake脚本调用测试的运行。
如果我在本地盒子上运行这些测试,它们运行正常。但是,我们有一个构建服务器,Jenkins作业将自动运行这些测试,当通过这个Jenkins作业运行时,它们不会执行 - 它们只是挂起。
查看任务管理器我可以看到在Jenkins作业运行时创建了两个iexplore.exe
实例。但是在某一点之后它们就会挂起 - 不会改变内存使用情况或CPU。
nunit-agent-x86.exe
和nunit-console-x86.exe
也在运行,但大部分都是挂起的,只是nunit-agent-x86.exe
内存速度非常缓慢。
如果我杀死其中一个iexplore.exe进程,事情会继续,但SpecFlow规范随后都会失败。
在杀死iexplore.exe时,日志中出现以下异常:
Unhandled Exception: System.Runtime.InteropServices.COMException: The remote procedure call failed. (Exception from HRESULT: 0x800706BE)
如果我在登录服务器时手动调用psake脚本,则规范运行正常。
当我尝试在BrowserSession中使用基本DI时,就会出现这个问题,如下所示:https://gist.github.com/2301407
在此之前,我通过NUnit [SetupFixture]类的静态属性共享BrowserSession。事情大部分工作都很好,除了一个涉及模态对话框无法正常工作的小问题,但我不确定我做得对,所以想要在要点中做技术
我有点迷失导致挂起的原因。任何想法是什么或追踪它的提示?
更新:切换到Firefox作为浏览器,Selenium作为驱动程序后,问题就消失了......
答案 0 :(得分:0)
我在Coypu列表上得到了几个回复。我还没有测试它们,因为目前Firefox的一切都很好,但万一他们对其他人有帮助......
2012年8月2日星期四16:38:30 UTC + 1,Adiel写道:
[...]我相信watin需要nunit在STA(单线程)中运行,这可能与你的问题有关。
换句话说,也许您使用静态单例浏览器会话使测试线程安全,但现在通过specflow的IOC你是 由于nunit正在运行的方式而获得多个实例。
2012年8月2日星期四16:41:11 UTC + 1,Matt Ellis写道:
这听起来像是Internet Explorer的保护模式阻碍了它。 IE运行不同的区域,例如Internet和Intranet (和关于:空白)在不同的过程中,IIRC WatiN没有 处理得很好。如果您可以禁用保护模式 服务器,你应该没事。