当运行数百次测试时,量角器无限期挂起,执行时间超过6小时

时间:2017-02-11 06:12:43

标签: angularjs protractor

当运行数百次需要执行时间超过6小时的测试时,量角器会无限期挂起。有时(很少)我们会看到这种行为也需要30分钟才能完成。

我们已经将jenkins作业配置为在启用了shardTestFiles且最大实例设置为10的情况下运行大约1000个测试。作业总是卡住,说1或2个webdriver实例仍在运行。

如果我们连接到运行测试的远程Windows机器,我们将看到运行0%CPU的2或3个nodejs进程。杀死这些进程作业完成而不生成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:是的, defaultTimeoutInterval:600000 }

  2. allScriptsTimeout:600000

  3. ignoreUncaughtExceptions:true
  4. 功能:

    { 'browserName':'firefox', '版本':'任意', shardTestFiles:true, maxInstances:10, }

  5. browser.ignoreSynchronization:true

  6. restartBrowserBetweenTests:true

2 个答案:

答案 0 :(得分:2)

由于我的回复指出了上述内容的潜在故障排除问题,因此我已将其纳入答案部分。

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

答案 1 :(得分:1)

我不同意@ cnishina的回答中的任何内容。这种行为通常是由于机器上缺少cpu / ram。我会在maxInstances上剪掉 way ,看看是不是确实存在问题。