2011-11-30 60 views
8

我們有一個由構建服務器(Jenkins)構建和部署的C#/ ASP .Net Web應用程序。自動部署之前的構建步驟之一是確保所有自動化測試都通過 - 包括我們使用Selenium 2 WebDriver和NUnit進行的功能測試。處理在自動化部署過程中偶爾失敗的硒測試

問題:有時候這些測試會隨機失敗。他們將獲得100次構建成功,然後失敗。他們因各種原因失敗--Click()事件被忽略,元素無法找到,IE瀏覽器糟糕的一天,等等。我們有一個AJAX沉重的Web應用程序,所以我們嚴重依賴於WebDriverWaits,但我們總是採取在編寫測試時考慮到這一點,就像我說的那樣,大部分時間測試都通過了。

有什麼方法可以避免或解決這個問題?即來到我的腦海裏一對夫婦:

  • 接受一定數量的失敗(似乎是一個壞主意)
  • 重新檢測故障?

回答

9

我不喜歡你提到的任何建議,但我承認偶爾會使用它們。要做的最好的事情是確保在看似「隨機」失敗的情況下盡一切可能獲取關於爲什麼它失敗的所有數據。這是一個環境問題嗎?機器上的其他一些過程是否會干擾測試?這是一個時間問題,只有在網站載入速度極慢或快速增長時纔會出現。

你可能會嘗試的一件事是浸泡測試你的自動化測試。在同一個版本和相同的環境中運行每個版本100次以上(因此您可以將這些版本排除爲潛在的故障點),並找出偶爾發生故障的版本。看看他們是否在同一個地方或不同的地方失敗。一般來說,當你通過這個練習時,你會發現一些測試真的有點片狀,你可以將它們從日常運行中刪除,直到它們被修復。任何自動化測試用例甚至可以包含一個浸泡作爲簽入標準。

我發現的另一個有用的東西,幫助我找到了一些看似隨機的故障的底部,並對故障進行截圖。通常你可以看到其他窗口或對話框彈出導致瀏覽器無法在最前沿,等等。

+0

謝謝,我喜歡'浸泡測試'的想法 - 做了(並截圖)之後,我看到一些測試總是在同一個地方失敗,所以我會仔細看看它們。 – Kryptic

+0

@Kryptic有趣。我正在處理類似的事情。仔細觀察這些片狀測試過程中是否還記得您發現的任何模式? – anjunatl

5

在這兩者中,我寧願重新運行測試失敗,或者更確切地說,測試失敗,重試測試。

如果您接受一定數量的測試失敗,那麼您會遇到關於哪些測試可能失敗的問題。你將不得不有兩套測試,一些允許失敗,一些不允許。

對於重新運行,我不擅長使用NUnit進行測試,但您可以讓測試自己管理重試。在JUnit中,您可以引入規則,以便在測試失敗時重試最多3次。這可能會避免你遇到的大多數問題。我不知道如何在NUnit中執行此操作,但請參閱my answerHow to Re-run failed JUnit tests immediately?。這會給你一個總的想法。

+0

我要在這裏給出的唯一警告是,重新運行測試失敗有時可能意味着間歇性產品失敗。至少記錄失敗,如果重試成功,您仍然可以執行自動部署,但至少會標記失敗並對其進行調查。 –

+0

@SamWoods完全同意。 –

+0

謝謝,在NUnit中做這樣的操作有點尷尬,但我設法加入這個,直到我將測試作爲短期解決方案進行調試 – Kryptic