我提前为文字墙道歉,但这是一个奇怪的问题,我还没有找到任何可能的解决方案,也没有在网上搜索任何类似的内容。
我正在使用量角器测试一些角度应用程序。我最近将运行测试的数据库/应用程序服务器切换到一个严格用于运行自动化测试的新盒子,并使用原始盒子作为手动测试床。我必须在应用程序中更改的是gruntfile中的SQL命令(以正确备份和恢复数据库)以及protractor.conf.js中的连接字符串。我还确保config.json中的APIServiceURL指向正确的新服务器URL。
在切换到新服务器之前,我可以在本地计算机上运行测试,没有任何问题,所有测试都会通过。自从切换到这个新服务器后,我得到了Jasmine超时,但仅限于我的本地计算机。如果我在其中一个构建服务器上运行这些测试,它们都可以正常运行,并且没有任何问题。但是,在我的本地计算机上运行时,Chrome会因应用程序崩溃而挂起,我在Git Shell中获得以下内容:
' timestamp='2016-03-10T19:58:50.978']
A Jasmine spec timed out. Resetting the WebDriver Control Flow.
##teamcity[testFailed name='should navigate to manage schedule templates screen' message='Error: Timeout - Asy
nc callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.'
这些错误仅在前10-12个测试已经过去后才开始出现,并且总是涉及在URL之间切换,例如从主页转到设置页面。我尝试过使用browser.pause()进行测试,我可以通过一遍又一遍地点击链接来重现问题。 Chrome控制台中没有错误。但是,如果我启动Chrome并手动浏览到该应用程序,则无法重现该错误。这让我相信它与网络驱动程序在我的本地计算机上运行的Chrome版本有某些特定关系。我的本地计算机正在运行最新版本的Chrome,正如构建服务器一样,并且在浏览器中。暂停(),我能够确认webdriver正在启动我在手动浏览应用程序时运行的相同版本的Chrome
protractor.conf.js中的我的Chrome args是--disable-web-security和--ignore-certificate-errors(我们使用自签名的IIS证书进行测试)。我原本以为可能会有一个恶意扩展导致一些破坏,所以我用--disable-extensions开关运行了几次都无济于事。
Grunt正在运行适当的ngmins,因此应用程序正在运行中,并且没有缺少依赖项。
我在量角器配置中设置了以下超时:
jasmineNodeOpts: {
defaultTimeoutInterval:60000
},
allScriptsTimeout: 60000,
导致初始失败的测试示例:
it('should navigate to manage states screen', function() {
homePage.statesButton.click().then(function() {
expect(browser.getCurrentUrl()).toContain('states');
});
});
上述测试是该特定套件中的第6次也是最后一次测试,如果我将其移动到套件中的第一次测试,它就会通过,新的最后一次测试成为失败点,所以它是'对任何一个特定测试都没有问题。我已经尝试过对测试进行评论,当它转移到下一个套件时,失败就会突然出现。我无法看到任何可辨别的模式,因为有时它会在此过程中失败。此外,其他测试套件也可以通过,例如用于登录测试的测试套件,而其他套件则比预期更早或更晚失败。
使用webdriver-manager更新,运行量角器2.1.0和selenium standalone和chromedriver都是最新的。我的本地计算机正在运行Node版本4.4,而构建服务器都运行Node版本4.2。我的本地计算机是Windows 7,原始测试服务器是Windows Server 2008,新测试服务器是Windows Server 2012。
我只是在我的智慧'以此结束。那里有人有什么想法吗?
编辑:在其他几个人能够从他们的计算机上运行测试之后,我将测试更改为使用http而不是https,删除了--ignore-certificate-error来自Chrome参数的标志,现在我的计算机上的测试运行正常。我不确定实际问题是什么,但似乎在我的机器上运行针对SSL的测试导致了问题。我需要做一些关于我的机器上的设置可能导致这种情况的研究,但现在测试似乎工作正常。如果我想出任何东西,我会在这里分享。