Um conjunto tende a incluir vários módulos de teste e pode atingir um tamanho de corpus de teste bastante grande. Por exemplo, o Android Compatibility Test Suite (CTS) inclui centenas de módulos e centenas de milhares de casos de teste.
Torna-se possível que uma grande quantidade de testes falhe devido ao mau isolamento ou dispositivos que entram em mau estado.
O recurso de repetição de suíte destina-se a atender a esses casos: ele permite que você tente novamente as falhas apenas em vez das suítes completas, a fim de descartar falhas e isolamento inadequado. Se um teste falhar consistentemente, a nova tentativa também falhará; e você obtém um sinal muito mais forte de que há um problema real.
Implementar nova tentativa de suíte
A repetição dos resultados envolve a leitura dos resultados anteriores e a reexecuçã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 reexecutar apenas as falhas anteriores ou testes não executados.
Exemplo de nova tentativa de suíte: CTS
A configuração de nova tentativa 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 é aplicável à maioria das suítes que o estendem, por exemplo VTS .
Seria invocado com:
cts-tradefed run retry --retry <session>
A sessão seria encontrada listando os resultados anteriores no console 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 incluir algumas opções, elas também farão parte da nova tentativa.
Por exemplo:
cts-tradefed run cts-dev -m CtsGestureTestCases
A repetição do acima está sempre vinculada a CtsGestureTestCases
porque estamos repetindo um comando que envolvia apenas ele.
Configurar nova tentativa para suíte estilo CTS
Para que a nova tentativa funcione, os resultados anteriores precisam ser exportados em formato proto. O seguinte precisa ser adicionado:
<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 então carrega dados de uma combinação do test-record.pb
e do test_result.xml
existente para preparar a chamada de nova tentativa.