Usar a repetição de conjunto

Um pacote tende a incluir vários módulos de teste e pode atingir um tamanho de corpus de teste bastante grande. Por exemplo, o Teste de compatibilidade do Android (CTS) inclui centenas de módulos e centenas de milhares de casos de teste.

É possível que uma grande quantidade de testes falhe devido ao isolamento inadequado ou a dispositivos em um estado ruim.

O recurso de nova tentativa da suíte foi criado para resolver esses casos. Ele permite repetir apenas as falhas em vez das suítes completas para descartar instabilidade e isolamento inadequado. Se um teste falhar de forma consistente, a nova tentativa também vai falhar, e você vai receber um sinal muito mais forte de que há um problema real.

Implementar a nova tentativa do pacote

A nova tentativa de resultados envolve a leitura dos resultados anteriores e a nova execução da invocação anterior.

A principal interface que impulsiona a nova tentativa é ITestSuiteResultLoader, que permite carregar um resultado anterior e a linha de comando anterior.

RetryRescheduler e usa essas informações para recriar o comando anterior e preencher alguns filtros para executar novamente apenas as falhas anteriores ou os testes não executados.

Exemplo de nova tentativa de conjunto: CTS

A configuração de novas tentativas no 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>

Isso se aplica à maioria dos pacotes que o estendem, por exemplo, o VTS.

Ele seria invocado com:

cts-tradefed run retry --retry <session>

Para encontrar a sessão, liste os resultados anteriores no console do 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

O comando original exato será recarregado e executado novamente com filtros extras. Isso significa que, se o comando original incluía algumas opções, elas também fazem parte da nova tentativa.

Exemplo:

cts-tradefed run cts-dev -m CtsGestureTestCases

A nova tentativa acima está sempre vinculada a CtsGestureTestCases porque estamos tentando novamente um comando que envolveu apenas ele.

Configurar novas tentativas para um conjunto de estilo CTS

Para que a nova tentativa funcione, os resultados anteriores precisam ser exportados no formato proto. É necessário adicionar o seguinte:

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

Isso precisa ser adicionado à configuração XML do comando principal, e resulta na criação de um arquivo test-record.pb na pasta de resultados.

A nova tentativa do CTS carrega dados de uma combinação do test-record.pb e do test_result.xml atual para preparar a invocação da nova tentativa.