Quelle est la méthode recommandée pour y parvenir par programme?
La seule option possible est d'exécuter la commande ADB adb shell pm clear packageavant le test. Le plus gros problème est que c'est une sorte de casse-tête combinant l'exécution de tests et les commandes shell.
Cependant, nous (chez Mediafe) avons proposé une solution qui peut fonctionner pour vous sur un appareil non enraciné régulier. Tout ce que vous avez à faire est d'ajouter une annotation. Tout le reste est fait en exécutant un simple script bash .
Ajoutez simplement une @ClearDataannotation avant TOUT de vos tests et tada 🎉, la commande ADB clear sera exécutée avant l'exécution du test.
Voici un exemple d'un tel test:
@Test
@ClearData
public void someTest() {
// your test
}
L'idée est la suivante
- Lire tous les tests en utilisant
adb shell am instrument -e log true
- Construire un plan d'exécution en analysant la sortie de (1)
- Exécutez le plan d'exécution ligne par ligne
En utilisant la même idée, ce sont toutes des options que vous pouvez facilement prendre en charge:
- Effacer les données
- Effacer la barre de notification
- Paramétrer
- Filtrer et exécuter par balises
N'utilisez que des annotations. Comme ça:
@Test
@ClearData
@Tags(tags = {"sanity", "medium"})
@Parameterized.Repeat(count = 3)
public void myTest() throws Exception {
String param = params[index];
// ...
}
Prime! 🎁 Pour chaque test échoué:
- Récupérer Logcat + stacktrace
- Enregistrer une vidéo (mp4)
- Dump DB (sqlite)
- Vider les préférences partagées par défaut (xml)
- Collectez des fichiers dumpsys tels que: batterie, netstats et autres.
En général, il est facile d'ajouter plus d'options, puisque les tests sont exécutés un par un à partir du script bash plutôt que de la tâche gradle.
📗 Le billet de blog complet : https://medium.com/medisafe-tech-blog/running-android-ui-tests-53e85e5c8da8
📘 Le code source avec des exemples : https://github.com/medisafe/run-android-tests
J'espère que cela répond à la question de 6 ans;)