¿Cuál es la forma recomendada de hacer esto mediante programación?
La única opción posible es ejecutar el comando ADB adb shell pm clear packageantes de la prueba. El mayor problema es que es una especie de dolor de cabeza que combina la ejecución de pruebas y los comandos de shell.
Sin embargo, nosotros (en Mediafe) vinimos con alguna solución que puede funcionar para usted en un dispositivo no rooteado normal. Todo lo que necesitas hacer es agregar una anotación. Todo lo demás se realiza ejecutando un script bash simple .
Simplemente agregue una @ClearDataanotación antes de CUALQUIERA de sus pruebas y tada 🎉, el comando ADB clear se ejecutará antes de la ejecución de la prueba.
Este es un ejemplo de tal prueba:
@Test
@ClearData
public void someTest() {
// your test
}
La idea es la siguiente
- Lea todas las pruebas usando
adb shell am instrument -e log true
- Cree un plan de ejecución analizando el resultado de (1)
- Ejecute el plan de ejecución línea por línea
Usando la misma idea, estas son todas las opciones que puede admitir fácilmente:
- Borrar datos
- Borrar barra de notificaciones
- Parametrizar
- Filtrar y ejecutar por etiquetas
Usa solo anotaciones. Me gusta esto:
@Test
@ClearData
@Tags(tags = {"sanity", "medium"})
@Parameterized.Repeat(count = 3)
public void myTest() throws Exception {
String param = params[index];
// ...
}
¡Prima! 🎁 Para cada prueba fallida:
- Recoge Logcat + stacktrace
- Grabar video (mp4)
- Dump DB (sqlite)
- Volcado de preferencias compartidas predeterminadas (xml)
- Recopile archivos dumpsys como: batería, netstats y otros.
En general, es fácil agregar más opciones, ya que las pruebas se ejecutan una por una desde el script bash en lugar de desde la tarea gradle.
📗 La publicación completa del blog : https://medium.com/medisafe-tech-blog/running-android-ui-tests-53e85e5c8da8
📘 El código fuente con ejemplos : https://github.com/medisafe/run-android-tests
Espero que esto responda la pregunta de 6 años;)