도구 모음 재시도 사용

테스트 모음에는 여러 테스트 모듈이 포함되는 경향이 있으며 테스트 자료가 상당한 규모에 이를 수 있습니다. 예를 들어 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의 조합에서 데이터를 로드하여 재시도 호출을 준비합니다.