編寫交易測試執行者

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

背景

如果您想瞭解 Tradefed 架構中的測試執行器位置,請參閱「測試執行器的結構」。

這並非編寫新測試執行工具的必要條件,測試執行工具可以獨立編寫。

最低要求:實作介面

要符合 Tradefed 測試執行器的最低標準,您必須實作 IRemoteTest 介面,具體來說是 run(TestInformation testInfo, ITestInvocationListener listener) 方法。

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

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

回報測試執行工具的結果

基本介面的 run 方法可讓您存取 ITestInvocationListener 類型的事件監聽器物件。這個物件是將結構化結果從測試執行器回報給測試套件的重要關鍵。

回報結構化結果時,測試執行工具會具備下列屬性:

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

不過,回報結構化結果並非必要;測試執行程式可能只想評估整個執行作業的狀態為「通過」或「失敗」,而不需要任何實際執行作業的詳細資料。

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

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

維護並確保回呼的正確順序是測試執行器實作者的責任,例如確保在使用 finally 子句的例外狀況中,會呼叫 testRunEnded

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

您可能會注意到這個事件結構是來自一般 JUnit 結構。這是為了讓開發人員能夠大致瞭解基本知識。

回報測試執行器的記錄

如要自行編寫 Tradefed 測試類別或執行器,則必須實作 IRemoteTest,並透過 run() 方法取得 ITestInvocationListener。這個事件監聽器可用於記錄檔案,如下所示:

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

使用裝置進行測試

上述的最低介面可讓您執行非常簡單的測試,並不需要任何特定資源,例如 Java 單元測試。

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

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

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

使用多部裝置進行測試

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

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

介面中的 setter 一律會在 run 方法之前呼叫,因此可以安全地假設在呼叫 run 時,結構會可供使用。

測試瞭解其設定

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

為達成此目標,測試執行工具可以存取所屬的 IConfiguration 物件,並在該物件中執行。詳情請參閱設定物件說明。

針對測試執行程式實作,您需要實作 IConfigurationReceiver 來接收 IConfiguration 物件。

彈性測試執行工具

如果測試執行程式具有精細的控制項,則可提供靈活的測試執行方式,例如 JUnit 測試執行程式可個別執行每項單元測試。

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

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

我們的慣例是,如果測試符合一或多個「包含」篩選器,且不符合任何「排除」篩選器,就會執行。如果沒有提供包含篩選器,只要測試不符合任何排除篩選器,就應執行所有測試。