本頁面說明如何在 Tradefed 中編寫新的測試執行器。
背景
如想瞭解在交易架構中測試跑者的位置, 請參閱「測試執行器的結構」。
撰寫新測試執行工具並非必要條件;測試執行工具 建立個別容器
基本規定:實作介面
只有達到
IRemoteTest 介面
具體來說是 run(TestInformation testInfo, ITestInvocationListener listener)
方法
此方法是在使用測試執行器時由控管工具叫用的方法。 與 Java Runnable 類似
該方法的每個部分都會視為測試執行器執行作業的一部分。
回報測試執行工具的結果
基本介面的 run
方法可讓您存取
類型:ITestInvocationListener
。這個物件是從測試執行程式回報至測試套件的結構化結果的關鍵。
透過回報結構化結果,測試執行程式具有下列屬性:
- 回報所有執行的測試、測試所需時間,以及各個測試是否通過、失敗或處於其他狀態的適當清單。
- 回報與測試相關的指標 (如適用),例如安裝時間指標。
- 適合大部分的基礎架構工具,例如顯示結果 指標等等
- 通常比較容易偵錯,因為執行作業的追蹤記錄會更精細。
換句話說,回報結構化資料為選用功能。測試執行工具 只想在沒有 PASSED 或 FAILED 的情況下,評估整個執行作業的狀態即可 任何實際執行細節
您可以在事件監聽器上呼叫下列事件,通知機制目前的執行進度:
- testRunStarted:通知一組相關聯的測試案例開始執行。
- testStarted:通知開始測試案例的開頭。
- testFailed/testIgnored:通知測試案例的狀態變更。系統會將未變更狀態的測試案例視為通過。
- testEnded:通知測試案例結束。
- testRunFailed:通知各組測試案例的整體狀態 就會失敗測試執行結果可以是「通過」或「失敗」不受測試案例結果影響,這取決於執行作業的預期結果。舉例來說,執行多個測試案例的二進位檔可能會回報所有通過的測試案例,但會附帶錯誤的結束碼 (原因可能為任何原因:例如遺漏檔案)。
- testRunEnded:通知測試案例群組結束。
維護及確保回呼的順序正確
測試執行工具實作工具的責任,例如確保
如果使用 finally
子句發生例外狀況,系統會呼叫 testRunEnded
。
測試案例回呼 (testStarted
、testEnded
等) 為選用項目。測試執行作業可能沒有任何測試案例。
您可能會注意到,這個事件結構的靈感來自典型的 JUnit 結構。這麼做是為了讓開發人員熟悉基本概念。
回報測試執行程式的記錄
如果您是自行撰寫交易測試類別或執行者,則需將
IRemoteTest
並透過 run()
方法取得 ITestInvocationListener
。這個事件監聽器
可用於記錄檔,如下所示:
listener.testLog(String dataName, LogDataType type_of_data, InputStreamSource data);
使用裝置進行測試
上述最基本介面可讓您執行非常簡單的測試,這些測試是隔離的,且不需要任何特定資源,例如 Java 單元測試。
如要進行裝置測試的下一個步驟,測試編寫人員需要使用下列介面:
- IDeviceTest 可讓您接收代表測試中裝置的
ITestDevice
物件,並提供可與該物件互動的 API。 - IBuildReceiver 可讓測試取得在建構提供者步驟中建立的
IBuildInfo
物件,其中包含與測試設定相關的所有資訊和構件。
測試執行器通常對這些介面感興趣 與執行作業相關的構件 (例如額外檔案) 要在執行期間鎖定的受測試裝置。
使用多部裝置進行測試
換購支援可同時在多部裝置上執行測試。這在測試需要外部互動的元件時很實用,例如手機和手錶配對。
如要編寫可使用多部裝置的測試執行器,您必須實作 IMultiDeviceTest,這樣才能接收 ITestDevice
到 IBuildInfo
的對應項目,其中包含裝置表示法的完整清單,以及相關聯的建構資訊。
系統一律會在 run
方法之前呼叫介面的 setter,因此
可以放心假設在呼叫 run
時,結構可供使用。
測試能瞭解自身設定
部分測試執行器實作項目可能需要整體設定資訊才能正常運作,例如叫用作業的某些中繼資料,或是先前執行的 target_preparer
等。
為此,測試執行器可以存取 IConfiguration
物件
也會執行這項作業詳情請參閱設定物件說明。
如要執行測試執行工具,您需要將
IConfigurationReceiver
接收 IConfiguration
物件。
彈性測試執行工具
測試執行者可以靈活地執行測試 更精細地控管元件 例如建立 JUnit 測試執行器 執行每個單元測試
這樣一來,較大的測試套件和基礎架構就能利用精細控制功能,使用者也能透過篩選功能執行部分測試執行器。
ITestFilterReceiver 介面說明了篩選器支援功能,可讓您接收應執行或不應執行的測試的 include
和 exclude
篩選器組合。
根據我們的慣例,系統會根據下列一或多項因素,執行 IFF 測試 包含篩選器「且」與任何「排除」篩選器不符。如果未提供包含篩選條件,只要測試不符合任何排除篩選條件,就應執行所有測試。