Um teste pode falhar por qualquer motivo, e às vezes basta executar o teste novamente para que ele seja aprovado (devido a instabilidade, como problemas na infraestrutura subjacente). É possível configurar a Tradefed para realizar a repetição automaticamente.
O objetivo principal da repetição automática é evitar a reexecução de todos os testes. Ela executa novamente apenas os testes com falha, o que resulta em uma grande economia de tempo de execução.
O Tradefed também permite executar testes várias vezes para detectar instabilidade usando o recurso iterações. Nesse caso, todos os testes serão executados novamente, e o teste vai falhar se alguma das iterações falhar.
Ativar a repetição automática
A nova tentativa automática é controlada pelo
objeto RetryDecision
que oferece duas opções para ativar 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 feitas. Ele define um limite superior para evitar novas tentativas infinitas.
retry-strategy
orienta a decisão de como tentar de novo. Consulte as seções a seguir para mais detalhes.
Desativar repetição automática
Use a seguinte opção:
--retry-strategy NO_RETRY
Tentar novamente em caso de falha
Para tentar novamente os testes com falha, use as seguintes opções:
--retry-strategy RETRY_ANY_FAILURE --max-testcase-run-count X
Isso vai tentar novamente até que a falha seja corrigida ou até que o número máximo de tentativas seja atingido, o que ocorrer primeiro.
Iterações
Para executar os testes várias vezes, use as seguintes opções:
--retry-strategy ITERATIONS --max-testcase-run-count X
Como são os resultados?
Por padrão, os repórteres de resultados recebem resultados agregados de todas as tentativas.
Por exemplo, um Fail
e um Pass
para RETRY_ANY_FAILURE
vão resultar em um Pass
agregado, já que a nova tentativa conseguiu corrigir a falha.
É possível que os repórteres recebam os resultados não agregados. Para isso, eles precisam estender a interface ISupportGranularResults, que declara suporte para os resultados granulares (não agregados).
Detalhes da implementação
Para ativar a repetição automática de falhas no nível do caso de teste, implemente ITestFilterReceiver.
Se não for possível implementar ITestFilterReceiver, implemente IAutoRetriableTest para controlar manualmente como a nova execução funciona. InstalledInstrumentationsTest é um exemplo de implementação dessa interface.