2014-10-02 38 views
1

我有一個CodedUI測試。它偶爾會因異常而失敗(無法聚焦元素)。我可以做這樣的事情在運行時重新運行CodedUI測試

[TestMethod] 
public void MySporadicFailedTest() 
{ 
     try { 
      //Some Test action 
     } 
     catch((Exception ex)) { 
      if (ex is System.Exception.ElementNotFocused){ 
      //retry test 
      } 
     } 
} 
+1

是的。但是,如果拋出異常,那麼爲什麼只要重試測試會做得更好?我建議你做一些網絡搜索來調試編碼的UI測試和處理報告的錯誤消息。把完整的錯誤信息放在這裏的問題將是一個好主意。 – AdrianHHH 2014-10-02 08:16:39

+0

錯誤在我的問題中並不重要。我可以儘量避免它。我對重新開始測試的可能性很感興趣。 – 2014-10-02 08:59:29

+0

'[TestMethod]'只是C#代碼。你可以做任何你可以用C#寫的東西。這個問題看起來似乎是否對您的測試應用程序(AUT)有意義;只有你可以決定。您需要考慮「重試測試」代碼的功能。它是否正確地重新啓動AUT,還是將它留在執行中的某個未知位置?通常,「偶發的異常*失敗」意味着AUT中的錯誤或測試套件中的錯誤。只是重試測試有點像「*希望重新啓動計算機將修復它*」。 – AdrianHHH 2014-10-02 09:58:58

回答

0

只要你能抓住它曾經拋出異常,可以在重試循環包裝你的測試代碼。然後,它會嘗試測試代碼一定次數放棄之前:

for (var i = 0; i < TimesToRetry; i++) 
{ 
    try{ 
     //perform test 

     //test ran correctly - break out loop to end test 
     break; 
    } 
    catch(Exception){ 
     //might want to log exception 
    } 
} 
0

如果codedUI測試沒有合適的理由不斷地失敗,你可以添加一些代碼,以提高測試並使其失敗安全。如果在對某個元素進行對焦時嘗試專門嘗試將焦點放在上一級元素上,然後嘗試對子元素進行聚焦,則該測試失敗。這LINK可能會幫助您編寫故障安全測試案例。

1

這是我在編寫編碼UI測試時經常處理的東西。我幾乎總是最終編寫一個簡單的擴展方法來處理重試特定操作(不是整個測試!)。有時,特別是在頁面上出現奇怪的非標準標記或發生大量AJAX事件時,您只會遇到行動將失敗一秒的情況,因爲尚未準備好,然後傳遞下一個。

public static class TestRetryExtensions 
{ 
    public static void WithRetry<T>(this Action thingToTry, int timeout = 30) where T: Exception 
    { 
     var expiration = DateTime.Now.AddSeconds(timeout) 
     while (true) 
     { 
      try 
      { 
       thingToTry(); 
       return; 
      } 
      catch (T) 
      { 
       if (DateTime.Now > expiration) 
       { 
        throw; 
       } 
       Thread.Sleep(1000); 
      } 
     } 
    } 
} 

然後,我的實際測試中:

uiMap.ClickSomeThing(); 
uiMap.EnterSomeText(); 
Action clickSomeOtherThingAction =() => uiMap.ClickSomeOtherThingThatFailsForNoReason(); 
clickSomeOtherThingAction.WithRetry<UITestControlHiddenException>(60); 

它試圖執行的操作。如果它失敗了,並且你沒有意識到這是一個偶然的「正常」事件,它就會像往常一樣拋出異常。如果它失敗了,並且您告訴它重試,那麼它將繼續嘗試該操作(重試之間的延遲爲1秒),直到超過超時,此時它只是放棄並重新拋出異常。

相關問題