通过Jenkins作业运行时,Coypu / SpecFlow验收测试会挂起

时间:2012-08-02 11:58:53

标签: nunit jenkins watin specflow

我正在通过SpecFlow,NUnit和Coypu对项目进行验收测试(对于浏览器自动化,使用WatiN驱动程序)。通过powershell / psake脚本调用测试的运行。

如果我在本地盒子上运行这些测试,它们运行正常。但是,我们有一个构建服务器,Jenkins作业将自动运行这些测试,当通过这个Jenkins作业运行时,它们不会执行 - 它们只是挂起。

查看任务管理器我可以看到在Jenkins作业运行时创建了两个iexplore.exe实例。但是在某一点之后它们就会挂起 - 不会改变内存使用情况或CPU。

nunit-agent-x86.exenunit-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作为驱动程序后,问题就消失了......

1 个答案:

答案 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没有   处理得很好。如果您可以禁用保护模式   服务器,你应该没事。