Qual è il modo consigliato per farlo programmaticamente?
L'unica opzione possibile è eseguire il comando ADB adb shell pm clear packageprima del test. Il problema più grande è che è un tipo di mal di testa che combina l'esecuzione dei test e i comandi della shell.
Tuttavia, noi (di Mediafe) abbiamo fornito alcune soluzioni che possono funzionare per te su un normale dispositivo non root. Tutto quello che devi fare è aggiungere un'annotazione. Tutto il resto viene eseguito eseguendo un semplice script bash .
Basta aggiungere @ClearDataun'annotazione prima di QUALSIASI dei tuoi test e tada 🎉, il comando di cancellazione ADB verrà eseguito prima dell'esecuzione del test.
Questo è un esempio di tale test:
@Test
@ClearData
public void someTest() {
// your test
}
L'idea è la seguente
- Leggi tutti i test utilizzando
adb shell am instrument -e log true
- Compilare il piano di esecuzione analizzando l'output di (1)
- Esegui il piano di esecuzione riga per riga
Usando la stessa idea, queste sono tutte opzioni che puoi facilmente supportare:
- Cancella i dati
- Cancella barra di notifica
- Parametrizzazione
- Filtra ed esegui per tag
Usa solo annotazioni. Come questo:
@Test
@ClearData
@Tags(tags = {"sanity", "medium"})
@Parameterized.Repeat(count = 3)
public void myTest() throws Exception {
String param = params[index];
// ...
}
Bonus! 🎁 Per ogni test fallito:
- Raccogli Logcat + stacktrace
- Registra video (mp4)
- Dump DB (sqlite)
- Scarica preferenze condivise predefinite (xml)
- Raccogli file dumpsys come: batteria, netstats e altro.
In generale, è facile aggiungere più opzioni, poiché i test vengono eseguiti uno ad uno dallo script bash anziché dall'attività gradle.
📗 Il post completo del blog : https://medium.com/medisafe-tech-blog/running-android-ui-tests-53e85e5c8da8
📘 Il codice sorgente con esempi : https://github.com/medisafe/run-android-tests
Spero che questo risponda alla domanda di 6 anni;)