使用測試影響分析來加速測試 (TIA)
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
持續整合(CI)是業界的重要做法。 整合經常發生,並使用執行回歸測試的自動化組建進行驗證,以儘快偵測整合錯誤。 但是,隨著程式代碼基底的成長和成熟,其回歸測試套件也傾向於成長,就執行完整回歸測試的範圍而言,可能需要數小時的時間。 此測試會降低整合的頻率,最終會失敗持續整合的目的。
若要讓 CI 管線快速完成,某些小組會將長時間執行的測試執行延遲到管線中的個別階段。 但是,此動作只能進一步擊敗持續整合。
相反地,在建置管線中使用Visual Studio測試工作時啟用測試影響分析 (TIA)。 TIA 會透過自動測試選取來執行累加式驗證。 它會自動選取驗證所認可程序代碼所需的測試子集。 針對輸入 CI/CD 管線的指定程式代碼認可,TIA 只會選取並執行驗證該認可所需的相關測試。 因此,如果發生失敗,測試回合會更快完成,而且因為所有範圍都依相關性,分析也會更快。
測試影響分析具有:
- 健全的測試選取機制。 其中包含現有的受影響的測試、先前失敗的測試,以及新加入的測試。
- 安全後援。 對於 TIA 無法理解的認可和案例,它會回復為執行所有測試。 TIA 目前僅限於 Managed 程式代碼和單一電腦拓撲。 因此,例如,如果程式代碼認可包含 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) 必須在同一部電腦上執行。
- Managed 程式代碼 (任何 .NET Framework 應用程式、任何 .NET 服務)
下列案例不支援 TIA:
- 多機器拓撲(測試正在執行部署至不同電腦的應用程式)
- 數據驅動測試
- 測試配接器特定的平行測試執行
- .NET Core
- 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 工作 UI。 TIA 可以設定為在設定的週期性執行所有測試。 建議使用此選項,而且是規範測試選取的方法。
- 藉由設定組建變數。 即使在 VSTest 工作中啟用 TIA 之後,您也可以將變數 DisableTestImpactAnalysis 設定為 true,將它停用特定組建。 此覆寫會強制 TIA 執行該組建的所有測試。 在後續的組建中,TIA 會回到優化的測試選取範圍。
當 TIA 開啟認可並看到未知的文件類型時,它會回復為執行所有測試。 雖然從安全觀點來看,此動作不錯,但在某些情況下,調整此行為可能很有用。 例如:
- 將 TI_IncludePathFilters 變數設定為特定路徑,以便只將這些路徑包含在您要套用 TIA 的存放庫中。 當小組使用共用存放庫時,此動作很有用。 設定此變數會停用設定中未包含之所有其他路徑的 TIA。
- 設定TIA_IncludePathFilters變數,以指定不會影響測試結果的檔類型,以及應該忽略哪些變更。 例如,若要忽略對.csproj 檔案所做的變更,請將變數設定為 值:
!\*\*\\\*.csproj
。
設定變數時, 請使用迷你 模式,並以分號分隔多個專案。
若要評估 TIA 是否選取適當的測試:
- 手動驗證選取範圍。 瞭解 SUT 和測試架構如何建構的開發人員,可以使用 TIA 報告功能手動驗證測試選取專案。
- 執行 TIA 選取的測試,然後依序執行所有測試。 在組建管線中,使用兩個測試工作 - 一個只執行受影響的測試 (T1) 和一個執行所有測試 (T2) 的測試。 如果 T1 通過,請檢查 T2 是否也通過。 如果 T1 中有失敗的測試,請檢查 T2 報告相同的失敗集。
提供自定義相依性對應
TIA 使用下列格式的相依性對應。
TestMethod1
dependency1
dependency2
TestMethod2
dependency1
dependency3
TIA 可以產生 Managed 程式代碼執行的相依性對應。
這類相依性位於 和 .vb
檔案中.cs
,TIA 可以自動監看這類檔案的認可,然後執行在其相依性清單中具有這些來源檔案的測試。
您可以藉由明確提供相依性對應做為 XML 檔案來擴充 TIA 的範圍。 例如,您可能想要支援其他語言的程式代碼,例如 JavaScript 或 C++,或支援在不同電腦上執行測試和產品代碼的案例。 對應甚至可以是近似值,而且您想要執行的測試集可以在測試案例篩選條件中指定,例如,您通常會在 VSTest 工作參數中提供。
XML 檔案應該簽入您的存放庫,通常是在根層級。 然後設定組建變數 TIA。UserMapFile 指向它。 例如,如果檔案名為 TIAmap.xml,請將變數設定為 $(System.DefaultWorkingDirectory)/TIAmap.xml。
如需 XML 檔格式的範例,請參閱 TIA 自定義相依性對應。
另請參閱
說明與支援
- 請參閱我們的 疑難解答 頁面
- 取得 Stack Overflow 的建議,並透過 開發人員社群 取得支援