Automated tests 处理自动化部署期间偶尔失败的Selenium测试

Automated tests 处理自动化部署期间偶尔失败的Selenium测试,automated-tests,jenkins,selenium-webdriver,Automated Tests,Jenkins,Selenium Webdriver,我们有一个C#/ASP.Net web应用程序,它是由构建服务器(Jenkins)构建和部署的。自动化部署之前的构建步骤之一是确保所有自动化测试都通过——包括我们使用Selenium 2 WebDriver和NUnit进行的功能测试 问题是:有时这些测试会随机失败。他们将成功构建100个版本,然后其中一个版本就失败了。它们失败的原因有很多——一个.Click()事件被忽略,元素找不到,IE糟糕的一天,等等。我们有一个使用AJAX的web应用程序,所以我们非常依赖WebDriverWaits,但我

我们有一个C#/ASP.Net web应用程序,它是由构建服务器(Jenkins)构建和部署的。自动化部署之前的构建步骤之一是确保所有自动化测试都通过——包括我们使用Selenium 2 WebDriver和NUnit进行的功能测试

问题是:有时这些测试会随机失败。他们将成功构建100个版本,然后其中一个版本就失败了。它们失败的原因有很多——一个.Click()事件被忽略,元素找不到,IE糟糕的一天,等等。我们有一个使用AJAX的web应用程序,所以我们非常依赖WebDriverWaits,但我们在编写测试时总是考虑到这一点,就像我说的,测试大部分时间都会通过

有哪些方法可以避免或解决此问题?我想到了一对:

  • 接受一定数量的失败(似乎是个坏主意)
  • 重新运行测试失败
我不喜欢你提到的任何一个建议,但我承认偶尔会用到它们。最好的办法是确保当出现看似“随机”的故障时,尽一切可能获取所有关于故障原因的数据。这是环境问题吗?机器上的其他过程是否会干扰测试?这是一个时间问题,只有当网站加载速度极慢或极快时才会出现

您可以尝试的一件事是浸泡测试您的自动测试。在相同的构建和相同的环境中运行每一个100多次(这样您就可以排除潜在的故障点),并找到偶尔出现故障的故障点。看看他们是在同一个地方还是在不同的地方失败了。一般来说,当您进行此练习时,您会发现一些测试确实有点不稳定,您可以将其从日常运行中删除,直到修复为止。您甚至可以将浸泡作为任何自动测试用例的签入标准


我发现的另一件有用的事情帮助我弄清了一些看似随机的失败,那就是拍摄失败的截图。通常,您会看到弹出了其他窗口或对话框,导致浏览器无法处于最前端,等等。

在这两个窗口中,我更愿意重新运行测试失败,或者,在测试失败时,重试测试

如果您接受了一定数量的测试失败,那么您就会遇到关于哪些测试允许失败的问题。你必须有两套测试,有些是允许失败的,有些不是


对于重新运行,我不是NUnit测试方面的专家,但是您可以让测试自己管理重试。在JUnit中,您可以引入一个规则,以便在测试失败时,它最多重试3次。这可能会避免您遇到的大多数问题。我不知道如何在努尼特做到这一点,但要注意。这将为您提供总体思路。

这里我要提醒的唯一一点是,重新运行测试失败有时可能意味着会错过间歇性产品故障。至少要记录失败,如果重试成功,您仍然可以进行自动部署,但至少要标记失败并进行调查。谢谢,在NUnit中这样做有点尴尬,但我设法添加了这个,直到我调试测试作为短期解决方案。谢谢,我喜欢“浸泡测试”的想法——在这样做之后(并截图)我看到一些测试总是在同一点失败,所以我将仔细观察它们。@Kryptic有趣。我自己也在处理类似的事情。你记得在仔细观察那些不可靠的测试时发现了什么模式吗?