Azure DevOps 服務 |Azure DevOps Server |Azure DevOps Server 2022
持續整合(CI)是業界的重要做法。 整合經常發生,並使用執行回歸測試的自動化組建進行驗證,以儘快偵測整合錯誤。 但是,隨著程式代碼基底的成長和成熟,其回歸測試套件也傾向於成長,就執行完整回歸測試的範圍而言,可能需要數小時的時間。 此測試會降低整合的頻率,最終會失敗持續整合的目的。
若要讓 CI 管線快速完成,某些團隊會將需要長時間執行的測試推遲到管線中的另一個階段。 但是,此動作只能進一步擊敗持續整合。
相反地,當在建置管線中使用Visual Studio Test 工作時,啟用測試影響分析 (TIA)。 TIA 會透過自動測試選取來執行累加式驗證。 它會自動選擇僅針對驗證所提交代碼所需的測試子集。 針對進入 CI/CD 管線的指定程式碼提交,TIA 只會選取並執行驗證該提交所需的相關測試。 因此,測試回合會更快完成,如果發生失敗,您會更早收到警示,而且由於所有內容都根據相關性進行範圍設定,分析速度也會更快。
測試影響分析包含:
- 健全的測試選取機制。 其中包含現有的受影響的測試、先前失敗的測試,以及新加入的測試。
- 安全後援。 對於 TIA 無法理解的提交和情境,它會自動退回至跑所有測試。 TIA 目前僅限於受控代碼和單一電腦拓樸。 因此,例如,如果程式碼提交包含對 HTML 或 CSS 檔案的更改,它將無法處理這些更改,並因此回退到執行所有的測試。
- 可設定的覆蓋。 您可以在設定的週期性執行所有測試。
不過,在搭配 Visual Studio 2015 使用 TIA 時,請注意下列注意事項:
- 平行執行測試。 在此情況下,測試會以序列方式執行。
- 執行啟用程式碼覆蓋的測試。 在此情況下,不會收集程式代碼涵蓋範圍數據。
測試影響分析支援的案例
下列案例支援測試影響分析 (TIA):
- TFS 2017 Update 1 和 Azure Pipelines
- 組建管線中Visual Studio測試工作的2.*版
- 使用多個 VSTest 任務來建置 vNext 版本
- 從 VS2015 Update 3 開始在組建代理運行的更新
- 本機和裝載的組建代理程式
- CI 和 PR 工作流程
- Git、GitHub、其他 Git、TFVC 存放庫(包括部分對應的 TFVC 存放庫及替代方案)
- IIS 互動(透過 REST、SOAP API),使用 HTTP/HTTPS 通訊協定
- 自動化測試
- 單一計算機拓撲。 測試和應用程式 (SUT) 必須在同一部電腦上執行。
- 受控代碼(任何 .NET Framework 應用程式、任何 .NET 服務)
下列案例不支援 TIA:
- 多機器拓撲(測試正在執行部署至不同電腦的應用程式)
- 數據驅動測試
- 測試轉接器特定的平行測試執行
- .NET 核心
- UWP
啟用測試影響分析
TIA 在 Visual Studio測試工作 的 2.*版中 支援。 如果您的應用程式是單一層應用程式,您只需要在工作 UI 中勾選只執行受影響的測試。 測試影響數據收集器會自動設定。 不需要任何進一步的步驟。
如果您的應用程式與 IIS 內容中的服務互動,您也必須使用 .runsettings 檔案,將測試影響數據收集器設定為在 IIS 內容中執行。 下列範例會建立此組態:
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<DataCollectionRunSettings>
<DataCollectors>
<!-- This is the TestImpact data collector.-->
<DataCollector uri="datacollector://microsoft/TestImpact/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.TestImpactDataCollector, Microsoft.VisualStudio.TraceCollector, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Test Impact">
<Configuration>
<!-- enable IIS data collection-->
<InstrumentIIS>True</InstrumentIIS>
<!-- file level data collection -->
<ImpactLevel>file</ImpactLevel>
<!-- any job agent related executable or any other service that the test is using needs to be profiled. -->
<ServicesToInstrument>
<Name>TeamFoundationSshService</Name>
</ServicesToInstrument>
</Configuration>
</DataCollector>
</DataCollectors>
</DataCollectionRunSettings>
</RunSettings>
檢視測試影響分析結果
TIA 會整合到既有測試報告的摘要和詳細層級中,包括通知電子郵件。
管理測試影響分析行為
您可以在測試回合期間影響包含或忽略測試的方式:
- 透過 VSTest 任務介面。 TIA 可以設定為以設定的頻率執行所有測試。 建議使用此選項,而且是規範測試選取的方法。
- 藉由設定組建變數。 即使在 VSTest 工作中啟用 TIA 之後,您也可以將變數 DisableTestImpactAnalysis 設定為 true,將它停用特定組建。 此覆寫會迫使 TIA 執行該構建的所有測試。 在後續的組建中,TIA 會回到優化的測試選取範圍。
當 TIA 開啟提交並看到未知的文件類型時,它會改為執行所有測試。 雖然從安全觀點來看,此動作不錯,但在某些情況下,調整此行為可能很有用。 例如:
- 將 TIA_IncludePathFilters 變數設定為特定路徑,以只在您想要套用 TIA 的存放庫中包含這些路徑。 當小組使用共用存放庫時,此動作很有用。 設定此變數會停用設定中未涵蓋的所有其他路徑上的 TIA。
-
設定TIA_IncludePathFilters變數,以指定不會影響測試結果的檔類型,以及應該忽略哪些變更。 例如,若要忽略對.csproj 檔案所做的變更,請將變數設定為 值:
!\*\*\\\*.csproj。
設定變數時,請使用minimatch 模式,並以分號分隔多個項目。
若要評估 TIA 是否選取適當的測試:
- 手動驗證選取範圍。 瞭解 SUT 和測試架構建構方式的開發人員,可以利用 TIA 報告功能手動驗證選取的測試。
- 執行 TIA 選取的測試,然後依序執行所有測試。 在組建管線中,使用兩個測試任務:一個是只執行受影響的測試(T1),另一個是執行所有測試(T2)。 如果 T1 通過,請檢查 T2 是否也通過。 如果 T1 中有失敗的測試,請檢查 T2 是否報告相同的一組失敗。
提供自定義依賴關係映射
TIA 使用下列格式的依賴圖。
TestMethod1
dependency1
dependency2
TestMethod2
dependency1
dependency3
TIA 可以產生受控代碼執行的相依關係圖。
這些相依性位於 .cs 和 .vb 檔案之中,TIA 可以自動監控這些檔案的提交,然後執行測試,這些測試的相依性清單中包含這些來源檔案。
您可以藉由明確將相依性映射作為 XML 檔案提供來擴充 TIA 的範圍。 例如,您可能想要支援其他語言的程式代碼,例如 JavaScript 或 C++,或支援在不同電腦上執行測試和產品代碼的案例。 映射甚至可以是近似的,而您想要執行的測試集可以以測試案例篩選器的形式指定,例如您通常會在 VSTest 任務參數中提供的那樣。
XML 檔案應該簽入您的儲存庫,通常位於根層級。 然後設定組建變數 TIA。UserMapFile 指向它。 例如,如果檔案名為 TIAmap.xml,請將變數設定為 $(System.DefaultWorkingDirectory)/TIAmap.xml。
如需 XML 檔格式的範例,請參閱 TIA 自定義相依性對應。
另請參閱
說明與支援
- 請參閱我們的 疑難解答 頁面
- 取得 Stack Overflow 的建議,並透過 開發人員社群 取得支援