2014-10-30 19 views
0

我有一個包含一些自動化測試的項目計劃設置。整個環境似乎設置正確,即控制器已註冊到團隊項目集合,並且代理正在實驗室中的客戶端設置的桌面上以交互方式運行。使用MTM運行超過1個時,編碼的ui測試失敗

這是我面臨的問題。我有100個自動化測試。如果我一次運行他們1,他們工作得很好。

如果我運行了2個或更多,他們會失敗,並在第二次測試中出現以下異常。

該控件不可用或無效。

再次,如果我獨立運行任一測試,它們都會通過每一次。

我猜這與運行之間的狀態有關。

我的測試初始化​​看起來是這樣的:

[TestInitialize] 
     public void Init() 
     { 
      Playback.PlaybackSettings.WaitForReadyLevel = WaitForReadyLevel.AllThreads; 
      Playback.Wait(5000); 
      AppManager.EnsureMyAppIsRunning(); 
      AppManager.SetTestEssentials(); 
     } 

回答

0

我解決了這個問題。

我有一個名爲AppManager的自定義靜態類,它處理與applicationUnderTest的連接。

public static ApplicationUnderTest LaunchApplicationUnderTest(string applicationPath, bool closeOnPlaybackCleanup) 
     { 
     var processes = Process.GetProcessesByName("MyApplication"); 

     if (processes.Length > 0) 
     { 
      _application = ApplicationUnderTest.FromProcess(processes[0]); 
     } 
     else 
     { 
      _application = ApplicationUnderTest.Launch(applicationPath); 
      _application.CloseOnPlaybackCleanup = closeOnPlaybackCleanup; 
     } 

     return _application; 
     } 

在這個類裏面,我也有一個靜態的UIMap。這意味着UIMap在測試運行開始時正在創建一次,並且在測試運行之間不會更新。

所以我實現我的ApplicationManager的新方法:

public static void ResetUIMap() 
     { 
      _map = new UIMap(); 
     } 

然後我把它從測試初始化​​:

[TestInitialize] 
     public void Init() 
     { 
      AppManager.EnsureApplicationUnderTestIsRunning(); 
      AppManager.SetTestEssentials(); 
      AppManager.ResetUIMap(); 
     } 
相關問題