共用方式為


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

Azure DevOps 服務 |Azure DevOps Server |Azure DevOps Server 2022

持續整合(CI)是業界的重要做法。 整合經常發生,並使用執行回歸測試的自動化組建進行驗證,以儘快偵測整合錯誤。 但是,隨著程式代碼基底的成長和成熟,其回歸測試套件也傾向於成長,就執行完整回歸測試的範圍而言,可能需要數小時的時間。 此測試會降低整合的頻率,最終會失敗持續整合的目的。

若要讓 CI 管線快速完成,某些團隊會將需要長時間執行的測試推遲到管線中的另一個階段。 但是,此動作只能進一步擊敗持續整合。

相反地,當在建置管線中使用Visual Studio Test 工作時,啟用測試影響分析 (TIA)。 TIA 會透過自動測試選取來執行累加式驗證。 它會自動選擇僅針對驗證所提交代碼所需的測試子集。 針對進入 CI/CD 管線的指定程式碼提交,TIA 只會選取並執行驗證該提交所需的相關測試。 因此,測試回合會更快完成,如果發生失敗,您會更早收到警示,而且由於所有內容都根據相關性進行範圍設定,分析速度也會更快。

使用 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 範圍和應用程式的詳細資訊

啟用測試影響分析

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 任務介面。 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 進階設定的詳細資訊

提供自定義依賴關係映射

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 自定義相依性對應

另請參閱

說明與支援