【问题标题】:AngularJS Protractor tests time out when run through Bamboo通过 Bamboo 运行 AngularJS Protractor 测试超时
【发布时间】:2015-09-03 13:29:57
【问题描述】:

我们为 AngularJS 应用程序提供了端到端的测试套件。用量角器写的。测试通过 Grunt 任务运行。在 Windows 命令行上本地运行时,测试通过。当我们在托管 Bamboo 的 CI 机器上的命令行上运行它们时,它们会通过。但是,当 Bamboo 运行 grunt 任务“test:e2e”时,它们会失败。失败是各种超时(请参阅下面的日志示例)。我们尝试增加一些超时时间,但似乎没有帮助。确实,30 秒超时似乎已经相当大了。

我没有想法。有没有人有任何其他调查途径建议?作为 CI 构建的一部分,我们暂时禁用了 e2e。

build   17-Jun-2015 23:34:59    [4mRunning "protractor:run" (protractor) task[24m
build   17-Jun-2015 23:35:00    Starting selenium standalone server...
build   17-Jun-2015 23:35:00    [launcher] Running 1 instances of WebDriver
build   17-Jun-2015 23:35:04    Selenium standalone server started at http://10.161.0.147:58338/wd/hub
build   17-Jun-2015 23:35:09    Started
error   17-Jun-2015 23:46:59    A Jasmine spec timed out. Resetting the WebDriver Control Flow.
error   17-Jun-2015 23:46:59    The last active task was: 
error   17-Jun-2015 23:46:59    WebElement.click()
error   17-Jun-2015 23:46:59        at [object Object].webdriver.WebDriver.schedule (C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:345:15)
error   17-Jun-2015 23:46:59        at [object Object].webdriver.WebElement.schedule_ (C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:1727:23)
error   17-Jun-2015 23:46:59        at [object Object].webdriver.WebElement.click (C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:1832:15)
error   17-Jun-2015 23:46:59        at actionFn (C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\lib\element.js:75:32)
error   17-Jun-2015 23:46:59        at C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\lib\element.js:394:17
error   17-Jun-2015 23:46:59        at Array.forEach (native)
error   17-Jun-2015 23:46:59        at C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\lib\element.js:393:9
error   17-Jun-2015 23:46:59        at C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\base.js:1582:15
error   17-Jun-2015 23:46:59        at [object Object].webdriver.promise.ControlFlow.runInNewFrame_ (C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1654:20)
error   17-Jun-2015 23:47:29    A Jasmine spec timed out. Resetting the WebDriver Control Flow.
error   17-Jun-2015 23:47:29    The last active task was: 
error   17-Jun-2015 23:47:29    Protractor.waitForAngular()
error   17-Jun-2015 23:47:29        at [object Object].webdriver.WebDriver.schedule (C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:345:15)
error   17-Jun-2015 23:47:29        at [object Object].Protractor.executeAsyncScript_ (C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\lib\protractor.js:251:26)
error   17-Jun-2015 23:47:29        at [object Object].Protractor.waitForAngular (C:\bamboo-home\xml-data\build-dir\PA-PPA-JOB1\node_modules\protractor\lib\protractor.js:274:15)

【问题讨论】:

    标签: angularjs protractor bamboo


    【解决方案1】:

    量角器测试可能在一个地方通过而在其他地方失败的原因有很多。以下是发生在我身上的非详尽原因列表:

    1. Bamboo 服务器具有与本地不同的二进制文件(例如,不同版本的 chrome、chrome 驱动程序、selenium、protractor、karma,...)
    2. Bamboo 服务器有多个进程同时访问 selenium 服务器
    3. Bamboo 服务器比本地服务器更慢/更快

    数字 1 和 2 很容易诊断和修复,因此我不会进一步详细介绍它们。 #3 更难诊断和修复,因为错误是时间相关的,而且只是偶尔发生。

    我发现可以定位许多这些时间错误的一件事是强制您的服务器非常慢(显然只是为了诊断)。当我们为所有 REST 调用添加 5 秒等待时,这在我们的测试中发现了很多脆弱性。解决所有这些问题是一个漫长而乏味的过程,但它会奏效。

    如果您不想要真正的修复,而只是想修补问题,请尝试将implicit wait 添加到您的 WebDriver 实例。在你的 protractor.conf 文件中看起来像这样:

    browser.webDriver.implicitlyWait(5000);
    

    【讨论】:

    • 感谢您的想法。我们最初假设是 3。所以我们将机器(在亚马逊上)提升到 8 核野兽,但它仍然失败。我怀疑是 2。因为我们只配置了一个构建,并且服务器专用于 Bamboo CI。我们执行 npm install 和 bower install 作为预构建步骤。如果从通过 RDP 登录的用户帐户运行测试确实可以正常运行,因此它似乎与 Bamboo 或它在 Bamboo 正在运行的帐户下运行的事实隔离。
    • 好吧,桌面通常设置为自动更新 chrome,而服务器通常禁用(或应该禁用)该功能。确保在两个地方运行相同版本的 chrome。其他可能性是竹帐户具有与 RDP 帐户不同的权限集或使用不同的浏览器。最后,我们在量角器方面遇到了很多麻烦,我们停止使用它并通过 java API 切换到纯硒。我们发现它更稳定且更易于调试。我并不是说这对你来说是最好的选择,而是要考虑一下。
    • 也可能是您的服务器运行其测试的速度太快了。您是否尝试过降低 CI 服务器的速度?
    猜你喜欢
    • 2016-05-05
    • 2015-04-14
    • 2018-01-11
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    相关资源
    最近更新 更多