当运行数百个需要超过6小时才能执行的测试时,Protractor会无限期挂起



当运行数百个需要6小时以上才能执行的测试时,Protractor会无限期挂起。有时(很少)我们在需要30分钟才能完成的工作中看到这种行为。

我们已经将jenkins作业配置为在启用shardTestFiles并将最大实例设置为10的情况下运行大约1000个测试。Job总是说有1到2个网络驱动程序实例仍在运行。

如果我们连接到运行测试的远程windows机器,我们将看到2或3个nodejs进程使用0%CPU运行。在终止这些进程时,作业在不生成Junit xml的情况下完成。

对于运行时间超过6小时的所有作业,挂起问题一直存在。请对此提出解决方案。

使用带有量角器4.0.14、nodejs 6.9.5和firefox 41.0.2的windows 2012R2和windows 2016服务器机器。使用最新的量角器5.0.0也能看到同样的行为。

我们在conf文件中设置了以下参数:

  1. jasmineNodeOpts:

    {showColors:true,defaultTimeoutInterval:600000}

  2. allScripts超时:600000

  3. ignoreUncaughtException:true
  4. 功能:

    {'browserName':'firefox',"version":"ANY",shardTestFiles:true,maxInstances:10,}

  5. browser.ignoreSynchronization:真正的

  6. restartBrowserBetweenTests:true

由于我的回复指出了您上面描述的潜在故障排除问题,因此我将其包含在回答部分中。

  1. 我担心你的1000次测试。这是大量的e2e测试。您的测试并不是要取代单元测试,而是要帮助提供一个积极的信号,即作为用户,服务和Angular的集成是有效的。此外,e2e测试可能很不稳定,因为您正在使用测试中的驱动程序、文件系统、浏览器和Angular页面。有很多事情可能会出错。我认为你应该关闭其中的一些测试,以找出哪些测试会导致雪花
  2. 您正在并行启动10个实例。你应该问问自己,这在你运行的机器上是否合理。当启动一个Firefox实例时,您启动的不仅仅是一个新窗口,而是一个全新的Firefox实例。我建议最多3个或4个
  3. 如果将ignoreSynchronization设置为true,则必须处理等待逻辑。如果您正在测试一个Angular页面,我建议将其保留为false,让内置的waitForAngular来做它的事情
  4. 如果你的测试确实使用了内置的waitForAngular逻辑(Protractor为你做的),这可能是一个薄片。增加allScriptTimeouts可能会掩盖测试逻辑中的一些错误
  5. 在测试之间重新启动浏览器可能会导致严重延迟。如果你不必重新启动浏览器,我会避免这种情况

我不反对@cnishina的回答。这种行为通常是由于机器上缺少cpu/ram造成的。我会在maxInstances上减少的方式,看看这是否真的是问题所在。

最新更新