【问题标题】:Dealing with Selenium tests that fail occasionally during automated deployment处理自动化部署期间偶尔失败的 Selenium 测试
【发布时间】:2011-11-30 21:42:04
【问题描述】:

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

问题:有时这些测试会随机失败。他们将成功进行 100 次构建,然后一次失败。它们因各种原因而失败 - .Click() 事件被忽略,找不到元素,IE 有糟糕的一天等。我们有一个 AJAX 繁重的网络应用程序,因此我们严重依赖 WebDriverWaits,但我们总是采取在编写测试时考虑到这一点,就像我说的那样,测试大部分时间都通过了。

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

  • 接受一定数量的失败(似乎是个坏主意)
  • 重新运行测试失败?

【问题讨论】:

    标签: automated-tests jenkins selenium-webdriver


    【解决方案1】:

    我不喜欢你提到的任何一个建议,但我承认我偶尔会使用它们。最好的办法是确保当出现看似“随机”的失败时,尽一切可能获取有关失败原因的所有数据。是环境问题吗?机器上的其他进程是否干扰了测试?是仅在网站加载速度极慢或速度极快时才会出现的时间问题?

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

    我发现的另一件有用的事情可以帮助我了解一些看似随机的失败,那就是对失败进行截图。经常可以看到弹出了其他窗口或对话框,导致浏览器无法排在最前面等。

    【讨论】:

    • 谢谢,我喜欢“浸泡测试”的想法——在做了(并截屏)之后,我看到一些测试总是在同一个地方失败,所以我会仔细看看他们。
    • @Kryptic 有趣。我自己也在处理类似的事情。你记得在仔细观察那些不稳定的测试时发现了什么模式吗?
    【解决方案2】:

    在这两者中,我更愿意重新运行测试失败,或者更确切地说,在测试失败时重试测试。

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

    对于重试,我不是使用 NUnit 进行测试的专家,但您可以让测试自己管理重试。在 JUnit 中,你可以引入一个规则,如果测试失败,它会重试最多 3 次。这可能会避免您遇到的大多数问题。我不知道如何在 NUnit 中执行此操作,但请参阅 my answerHow to Re-run failed JUnit tests immediately?。这将为您提供总体思路。

    【讨论】:

    • 我要在这里给出的唯一警告是,重新运行测试失败有时可能意味着错过了间歇性产品故障。至少记录失败,如果重试成功,您仍然可以进行自动部署,但至少标记失败并进行调查。
    • 谢谢,在 NUnit 中做这件事有点尴尬,但我设法将它添加进去,直到我将测试作为短期解决方案进行调试
    猜你喜欢
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 2020-08-08
    • 2016-08-28
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    相关资源
    最近更新 更多