Um pacote costuma incluir vários módulos de teste e pode alcançar um tamanho do corpus de teste. Por exemplo, o Conjunto de teste de compatibilidade (CTS) do Android inclui centenas de módulos e centenas de milhares de casos de teste.
Uma grande quantidade de testes pode falhar devido a um isolamento inadequado ou dispositivos entrando em mau estado.
O recurso de nova tentativa do pacote foi criado para resolver esses casos: ele permite que você tente apenas com falhas, e não com os pacotes completos, para descartar a inconsistência e um isolamento ruim. Se um teste falha consistentemente, a nova tentativa também falha. e você terá um sinal muito mais forte de que há um problema real.
Implementar nova tentativa do pacote
A repetição de resultados envolve ler os resultados anteriores e executar novamente o da invocação anterior.
A interface principal que orienta a nova tentativa é ITestSuiteResultLoader
,
que permite carregar um resultado anterior e a linha de comando anterior.
RetryRescheduler
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 do pacote: CTS
A configuração de repetição 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 VTS:
Ele seria invocado com:
cts-tradefed run retry --retry <session>
A sessão seria encontrada listando 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 incluiu algumas opções, elas também parte da nova tentativa.
Exemplo:
cts-tradefed run cts-dev -m CtsGestureTestCases
A repetição do procedimento acima é sempre vinculada a CtsGestureTestCases
, porque
estamos repetindo um comando que só envolve ele.
Configurar uma nova tentativa para o pacote no estilo CTS
Para que a nova tentativa funcione, é necessário exportar os resultados anteriores .proto. É necessário adicionar o seguinte:
<result_reporter class="com.android.compatibility.common.tradefed.result.suite.CompatibilityProtoResultReporter" />
Ela precisa ser adicionada à 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 dos métodos test-record.pb
e
o test_result.xml
atual para preparar a invocação de repetição.