使用套件重試

套件通常包含多個測試模組,測試語料庫大小可能相當龐大。舉例來說,Android 相容性測試套件 (CTS) 包含數百個模組和數十萬個測試案例。

如果隔離效果不佳或裝置處於不良狀態,可能會導致大量測試失敗。

套件重試功能就是為解決這些情況而生:這項功能可讓您只重試失敗的項目,而非整個套件,藉此排除不穩定和隔離不良的問題。如果測試持續失敗,重試也會失敗;而且 您會收到更強烈的信號,表示有實際問題。

實作套件重試功能

重試結果時,系統會讀取先前的結果,並重新執行先前的叫用。

主要介面是 ITestSuiteResultLoader,可讓您載入先前的結果和先前的指令列,藉此重試。

RetryRescheduler 然後使用這項資訊重新建立先前的指令,並填入部分篩選器,以便只重新執行先前失敗或未執行的測試。

套件重試範例:CTS

CTS 中的重試設定如下:

<configuration description="Runs a retry of a previous CTS session.">
    <object type="previous_loader" class="com.android.compatibility.common.tradefed.result.suite.PreviousResultLoader" />
    <test class="com.android.tradefed.testtype.suite.retry.RetryRescheduler" />

    <logger class="com.android.tradefed.log.FileLogger">
        <option name="log-level-display" value="WARN" />
    </logger>
</configuration>

這適用於大多數擴充此項目的套件,例如 VTS

這項功能會透過下列方式叫用:

cts-tradefed run retry --retry <session>

在 CTS 控制台中列出先前的結果,即可找到工作階段:

cts-tf > l r
Session  Pass  Fail  Modules Complete  Result Directory     Test Plan  Device serial(s)  Build ID   Product
0        2092  30    148 of 999        2018.10.29_14.12.57  cts        [serial]          P          Pixel

系統會重新載入原始指令,並使用額外篩選器重新執行。也就是說,如果原始指令包含某些選項,這些選項也會一併重試。

例如:

cts-tradefed run cts-dev -m CtsGestureTestCases

上述重試作業一律會繫結至 CtsGestureTestCases,因為我們重試的指令只涉及該項目。

為 CTS 樣式的測試套件設定重試

如要重試,必須先以 proto 格式匯出先前的結果。請新增下列項目:

<result_reporter class="com.android.compatibility.common.tradefed.result.suite.CompatibilityProtoResultReporter" />

這項設定必須新增至主要指令的 XML 設定,並在結果資料夾中建立 test-record.pb 檔案。

接著,CTS 重試會從 test-record.pb 和現有 test_result.xml 的組合載入資料,準備重試呼叫。