Um teste pode falhar por qualquer motivo e, às vezes, simplesmente reexecutá-lo é suficiente para fazê-lo passar novamente (devido a falhas, como problemas na infraestrutura subjacente). Você pode configurar o Tradefed para realizar a nova tentativa automaticamente.
O núcleo da nova tentativa automática é evitar a repetição de todos os testes; ele executa novamente apenas os testes que falharam, resultando em grande economia no tempo de execução.
Tradefed também suporta a execução de testes várias vezes para detectar instabilidade por meio do recurso de iterações . Nesse caso, todos os testes serão executados novamente e o teste falhará se alguma das iterações falhar.
Ativar nova tentativa automática
A nova tentativa automática é controlada por meio do objeto RetryDecision que fornece duas opções para habilitar o recurso: max-testcase-run-count
e retry-strategy
.
max-testcase-run-count
determina o número de novas tentativas ou iterações que serão tentadas. Ele define um limite superior para evitar novas tentativas para sempre. retry-strategy
orienta a decisão de como tentar novamente; consulte as seções a seguir para obter mais detalhes.
Desativar nova tentativa automática
Use a seguinte opção:
--retry-strategy NO_RETRY
Repetir falhas
Para tentar novamente as falhas de teste, use as seguintes opções:
--retry-strategy RETRY_ANY_FAILURE --max-testcase-run-count X
Isso tentará novamente a falha até que ela seja aprovada ou até que o número máximo de tentativas seja atingido, o que ocorrer primeiro.
Iterações
Para reexecutar testes por um determinado período de tempo, as seguintes opções podem ser usadas:
--retry-strategy ITERATIONS --max-testcase-run-count X
Como são os resultados?
Os relatores de resultados, por padrão, receberão resultados agregados de todas as tentativas.
Por exemplo: uma Fail
e uma Pass
para RETRY_ANY_FAILURE
resultarão em uma Pass
agregada, pois a nova tentativa conseguiu eliminar a falha.
É possível que os repórteres recebam os resultados não agregados. Para fazer isso, eles precisam estender a interface ISupportGranularResults que declara suporte para resultados granulares (não agregados).
Detalhes de implementação
Para habilitar a repetição automática para executar novamente falhas no nível do caso de teste, implemente ITestFilterReceiver .
Se não for possível implementar ITestFilterReceiver, você poderá implementar IAutoRetriableTest para controlar manualmente como a reexecução funciona. InstalledInstrumentationsTest é um exemplo de implementação dessa interface.