使用測試影響分析 (TIA) 來加速測試

Azure DevOps Services |Azure DevOps Server 2022 |Azure DevOps Server 2020 |Azure DevOps Server 2019 |TFS 2018

注意

僅適用于 TFS 2017 Update 1 和更新版本,以及 Visual Studio 2015 Update 3 和更新版本。

持續整合 (CI) 是業界的重要做法。 整合經常發生,並使用自動化組建進行驗證,以執行迴歸測試以儘快偵測整合錯誤。 不過,隨著程式碼基底的成長和成熟,其迴歸測試套件也通常會成長-到執行完整迴歸測試的範圍可能需要數小時。 這會降低整合的頻率,最終會破壞持續整合的目的。 為了讓 CI 管線快速完成,某些小組會將執行較長執行的測試延遲到管線中的個別階段。 不過,這只有助于進一步破壞持續整合。

相反地,在建置管線中使用Visual Studio 測試工作時,請啟用測試影響分析 (TIA) 。 TIA 會透過自動測試選取來執行累加式驗證。 它會自動選取驗證所認可程式碼所需的測試子集。 針對輸入 CI/CD 管線的指定程式碼認可,TIA 只會選取並執行驗證該認可所需的相關測試。 因此,該測試回合會更快速地完成,如果發生失敗,您很快就會知道它,而且因為其全都依相關性來限定範圍,分析也會更快。

使用 TIA 時測試時間的比較

測試影響分析具有:

  • 強固的測試選取機制。 其中包含現有的受影響測試、先前失敗的測試,以及新新增的測試。
  • 安全後援。 對於 TIA 無法瞭解的認可和案例,它會回復為執行所有測試。 TIA 目前僅限於 Managed 程式碼和單一電腦拓撲。 因此,例如,如果程式碼認可包含 HTML 或 CSS 檔案的變更,則無法對它們產生原因,而且會回復為執行所有測試。
  • 可設定的覆寫。 您可以在設定的週期性執行所有測試。

不過,在搭配 Visual Studio 2015 使用 TIA 時,請注意下列注意事項:

  • 平行執行測試。 在此情況下,測試會以序列方式執行。
  • 執行已啟用程式碼涵蓋範圍的測試。 在此情況下,不會收集程式碼涵蓋範圍資料。

注意

在 Microsoft Team Foundation Server (TFS) 2018 和舊版中,組建和發行管線稱為定義執行稱為組建服務連線稱為服務端點階段稱為環境,而作業稱為階段

測試影響分析支援的案例

目前,TIA 支援:

  • TFS 2017 Update 1 及 Azure Pipelines
  • 組建管線中 Visual Studio 測試 工作的 2.* 版
  • 使用多個 VSTest 工作建置 vNext
  • 組建代理程式上的 VS2015 Update 3 更新版本
  • 本機和裝載的組建代理程式
  • CI 和 PR 工作流程中的
  • Git、GitHub、其他 Git、TFVC 存放庫 (包括部分對應的 TFVC 存放庫,以及 因應措施)
  • 使用 HTTP/HTTPS (通訊協定透過 REST、SOAP API) 進行 IIS 互動
  • 自動化測試
  • 單一電腦拓撲。 測試和應用程式 (SUT) 必須在相同的電腦上執行。
  • Managed 程式碼 (任何.NET Framework應用程式、任何 .NET 服務)

目前不支援下列專案:

  • 多部電腦拓撲 (,其中測試正在執行部署至不同電腦的應用程式)
  • 資料驅動測試
  • 測試配接器特定的平行測試執行
  • .NET Core
  • UWP

TIA 範圍和應用程式的詳細資訊

啟用測試影響分析

TIA 是透過 Visual Studio 測試 工作的 2.* 版支援。 如果您的應用程式是單層應用程式,您只需要檢查在工作 UI 中 只執行受影響的測試 。 測試影響資料收集器會自動設定。 不需要任何額外步驟。

在 VS 測試工作 UI 中啟用 TIA

如果您的應用程式與 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 會同時整合到摘要和詳細資料層級的現有測試報告,包括通知電子郵件。

報告摘要包含 TIA 整合

報告測試頁面包含 TIA 整合

有關 TIA 和 Azure Pipelines 整合的詳細資訊

管理測試影響分析行為

您可以在測試回合期間影響包含或忽略測試的方式:

  • 透過 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 進階設定的詳細資訊

提供自訂相依性對應

TIA 使用下列格式的相依性對應。

TestMethod1
  dependency1
  dependency2
TestMethod2
  dependency1
  dependency3

TIA 可以針對 Managed 程式碼執行產生這類相依性對應。 這類相依性位於 .cs.vb 檔案中,TIA 可以自動監看這類檔案的認可,然後在其相依性清單中執行具有這些原始程式檔的測試。

您可以明確提供相依性對應做為 XML 檔案,以擴充 TIA 的範圍。 例如,您可能想要支援其他語言的程式碼,例如 JavaScript 或 C++,或支援測試與產品程式碼在不同電腦上執行的案例。 對應甚至可以是近似的,而且您想要執行的一組測試可以在測試案例篩選中指定,例如,您通常會在 VSTest 工作參數中提供。

XML 檔案應該簽入您的存放庫,通常是在根層級。 然後設定組建變數 TIA。UserMapFile 指向它。 例如,如果檔案名為 TIAmap.xml,請將變數設定為 $ (System.DefaultWorkingDirectory) /TIAmap.xml

如需 XML 檔案格式的範例,請參閱 TIA 自訂相依性對應

另請參閱

說明及支援