Qual é a maneira recomendada de fazer isso programaticamente?
A única opção possível é executar o comando ADB adb shell pm clear packageantes do teste. O maior problema é que é um tipo de dor de cabeça combinando a execução de testes e os comandos do shell.
No entanto, nós (na Mediafe) viemos com uma solução que pode funcionar para você em um dispositivo não raiz comum. Tudo que você precisa fazer é adicionar uma anotação. Todo o resto é feito executando o script bash simples .
Basta adicionar @ClearDataanotação antes de QUALQUER dos seus testes e tada 🎉, o comando ADB clear será executado antes da execução do teste.
Este é um exemplo desse teste:
@Test
@ClearData
public void someTest() {
// your test
}
A ideia é a seguinte
- Leia todos os testes usando
adb shell am instrument -e log true
- Construa o plano de execução analisando a saída de (1)
- Execute o plano de execução linha por linha
Usando a mesma idéia, todas essas opções podem ser facilmente suportadas:
- Apagar os dados
- Limpar barra de notificação
- Parametrizar
- Filtrar e executar por tags
Use apenas anotações. Como isso:
@Test
@ClearData
@Tags(tags = {"sanity", "medium"})
@Parameterized.Repeat(count = 3)
public void myTest() throws Exception {
String param = params[index];
// ...
}
Bônus! 🎁 Para cada teste com falha:
- Coletar Logcat + stacktrace
- Gravar vídeo (mp4)
- Banco de dados de despejo (sqlite)
- Despejar preferências compartilhadas padrão (xml)
- Colete arquivos dumpsys como: bateria, netstats e outros.
Em geral, é fácil adicionar mais opções, pois os testes são executados um a um a partir do script bash, em vez da tarefa gradle.
📗 A publicação completa do blog : https://medium.com/medisafe-tech-blog/running-android-ui-tests-53e85e5c8da8
Code O código fonte com exemplos : https://github.com/medisafe/run-android-tests
Espero que isso responda 6 anos pergunta;)