編寫 Tradefed 測試執行器

本頁面說明如何在 Tradefed 中編寫新的測試執行器。

背景

如想瞭解在交易架構中測試跑者的位置, 請參閱「測試執行器的結構」。

撰寫新測試執行工具並非必要條件;測試執行工具 建立個別容器

基本規定:實作介面

只有達到 IRemoteTest 介面 具體來說是 run(TestInformation testInfo, ITestInvocationListener listener) 方法

此方法是在使用測試執行器時由控管工具叫用的方法。 與 Java Runnable 類似

該方法的每個部分都會視為測試執行器執行作業的一部分。

回報測試執行工具的結果

基本介面的 run 方法可讓您存取 類型:ITestInvocationListener。這個物件是從測試執行程式回報至測試套件的結構化結果的關鍵。

透過回報結構化結果,測試執行程式具有下列屬性:

  • 回報所有執行的測試、測試所需時間,以及各個測試是否通過、失敗或處於其他狀態的適當清單。
  • 回報與測試相關的指標 (如適用),例如安裝時間指標。
  • 適合大部分的基礎架構工具,例如顯示結果 指標等等
  • 通常比較容易偵錯,因為執行作業的追蹤記錄會更精細。

換句話說,回報結構化資料為選用功能。測試執行工具 只想在沒有 PASSED 或 FAILED 的情況下,評估整個執行作業的狀態即可 任何實際執行細節

您可以在事件監聽器上呼叫下列事件,通知機制目前的執行進度:

  • testRunStarted:通知一組相關聯的測試案例開始執行。
    • testStarted:通知開始測試案例的開頭。
    • testFailed/testIgnored:通知測試案例的狀態變更。系統會將未變更狀態的測試案例視為通過。
    • testEnded:通知測試案例結束。
  • testRunFailed:通知各組測試案例的整體狀態 就會失敗測試執行結果可以是「通過」或「失敗」不受測試案例結果影響,這取決於執行作業的預期結果。舉例來說,執行多個測試案例的二進位檔可能會回報所有通過的測試案例,但會附帶錯誤的結束碼 (原因可能為任何原因:例如遺漏檔案)。
  • testRunEnded:通知測試案例群組結束。

維護及確保回呼的順序正確 測試執行工具實作工具的責任,例如確保 如果使用 finally 子句發生例外狀況,系統會呼叫 testRunEnded

測試案例回呼 (testStartedtestEnded 等) 為選用項目。測試執行作業可能沒有任何測試案例。

您可能會注意到,這個事件結構的靈感來自典型的 JUnit 結構。這麼做是為了讓開發人員熟悉基本概念。

回報測試執行程式的記錄

如果您是自行撰寫交易測試類別或執行者,則需將 IRemoteTest 並透過 run() 方法取得 ITestInvocationListener。這個事件監聽器 可用於記錄檔,如下所示:

    listener.testLog(String dataName, LogDataType type_of_data, InputStreamSource data);

使用裝置進行測試

上述最基本介面可讓您執行非常簡單的測試,這些測試是隔離的,且不需要任何特定資源,例如 Java 單元測試。

如要進行裝置測試的下一個步驟,測試編寫人員需要使用下列介面:

  • IDeviceTest 可讓您接收代表測試中裝置的 ITestDevice 物件,並提供可與該物件互動的 API。
  • IBuildReceiver 可讓測試取得在建構提供者步驟中建立的 IBuildInfo 物件,其中包含與測試設定相關的所有資訊和構件。

測試執行器通常對這些介面感興趣 與執行作業相關的構件 (例如額外檔案) 要在執行期間鎖定的受測試裝置。

使用多部裝置進行測試

換購支援可同時在多部裝置上執行測試。這在測試需要外部互動的元件時很實用,例如手機和手錶配對。

如要編寫可使用多部裝置的測試執行器,您必須實作 IMultiDeviceTest,這樣才能接收 ITestDeviceIBuildInfo 的對應項目,其中包含裝置表示法的完整清單,以及相關聯的建構資訊。

系統一律會在 run 方法之前呼叫介面的 setter,因此 可以放心假設在呼叫 run 時,結構可供使用。

測試能瞭解自身設定

部分測試執行器實作項目可能需要整體設定資訊才能正常運作,例如叫用作業的某些中繼資料,或是先前執行的 target_preparer 等。

為此,測試執行器可以存取 IConfiguration 物件 也會執行這項作業詳情請參閱設定物件說明。

如要執行測試執行工具,您需要將 IConfigurationReceiver 接收 IConfiguration 物件。

彈性測試執行工具

測試執行者可以靈活地執行測試 更精細地控管元件 例如建立 JUnit 測試執行器 執行每個單元測試

這樣一來,較大的測試套件和基礎架構就能利用精細控制功能,使用者也能透過篩選功能執行部分測試執行器。

ITestFilterReceiver 介面說明了篩選器支援功能,可讓您接收應執行或不應執行的測試的 includeexclude 篩選器組合。

根據我們的慣例,系統會根據下列一或多項因素,執行 IFF 測試 包含篩選器「且」與任何「排除」篩選器不符。如果未提供包含篩選條件,只要測試不符合任何排除篩選條件,就應執行所有測試。