¿Cuáles son la lista de tareas que ConnectedAndroidTest ejecuta?

Quiero entender más sobre ConnectedAndroidTest Gradle tarea. Veo que se utiliza para instalar la aplicación y probar los apks y ejecutar las pruebas.

¿Pero cuáles son los pasos individuales que hace? (Tareas de gradle si las hay)

"Gradle build" parece generar el apk de la aplicación. ¿Qué tarea genera la prueba apk? ¿Y cómo (ConnectedAndroidTest) instala la aplicación y prueba apk? ¿Y cómo comienza las pruebas?

Muchas gracias.

Mi primera respuesta, por favor, sea amable;)

¿Pero cuáles son los pasos individuales que hace? (Tareas de gradle si las hay)

Así que si quieres una visión general de alto nivel de las tareas de ConnectedAndroidTest depende, sólo ejecuta ./gradlew connectedAndroidTest o ./gradlew cAT (sin la opción -q ) mostrará el nombre de cada tarea que cAT depende antes de que se ejecute por sí mismo . La tarea en sí no puede tener otras tareas dentro de ella, pero puede depender de otros que vienen antes.

A partir de esta respuesta, la tarea de gradle build es en realidad algo relacionado con java, y no es lo que es responsable de construir la prueba apk. En su lugar, es la tarea assembleAndroidTest que viene justo antes de connectedAndroidTest que lo hace. Usted tiene razón sobre el connectedAndroidTest , sin embargo, en realidad instala y ejecuta el apk de prueba. Pero voy a venir a la forma en un poco. El resto de mi respuesta es más detallado de lo que es necesario para utilizar la tarea de manera eficaz, pero es útil si desea entender cómo funciona.

Algunos antecedentes
Al igual que muchas otras tareas de plug-in de gradle de Android, connectedAndroidTest es en realidad unido en algún momento de la fase de ejecución debido a las diferentes variantes de compilación (depuración, lanzamiento, sabor 1, sabor 2, etc.). Así que connectedAndroidTest no está disponible para usted en la fase de configuración (cuando se ejecuta la mayor parte de su lógica de script de compilación). En su lugar, una vez que se ha creado, se establece como la propiedad connectedInstrumentTest (básicamente, un campo) de la propiedad testVariants en el objeto android .

Como ejemplo de aclaración, si desea acceder a esta tarea para manipularla de alguna manera (tal vez agregar una Action al final de ella), puede hacer algo como esto en su archivo build.gradle :

 android { testVariants.all { variant -> variant.connectedInstrumentTest.doLast { println "This will be executed right after our connectedInstrumentTest!" println "The name of the test type: $connectedInstrumentTest.name" println "The type of test $connectedInstrumentTest.class" } } } 

Y luego ejecuta ./gradlew -q cAT

Así que aquí, estoy añadiendo una acción al final de cualquier tarea que se ha construido y asignado a la propiedad connectedInstrumentTest , que está anidado bastante profundo en el objeto android . Probablemente esta tarea estará connectedDebugAndroidTest a connectedDebugAndroidTest o algo similar.

¿Qué está haciendo la tarea?
Ahora, desde la propiedad de tipo que he puesto en la última println, podemos ver que la clase de la tarea es en realidad com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestTask_Decorated . Para ser honesto, no estoy muy seguro todavía de dónde viene la parte _Decorated , pero una búsqueda de Google para el resto del nombre de la clase nos proporciona el código fuente para la clase base de la tarea.

La Action principal de la tarea se llama runTests() y muestra más o menos cómo la tarea realiza lo que hace. Si sigues un poco el código fuente, encontrarás que el comando adb pm install se utilizará para instalar el apk.

Aunque no pude encontrarlo, sospecho que en algún otro lugar se usa el comando adb shell am instrument -w com.package.name/android.support.test.runner.AndroidJUnitRunner adb con el comando adb shell am instrument -w com.package.name/android.support.test.runner.AndroidJUnitRunner para finalmente conducir las pruebas.

Así que espero que no fue demasiado confuso – aprendí la mayoría de esto muy recientemente por lo que algunas cosas podrían no ser el 100%. Yo sugeriría trabajar a través de los documentos de gradle, en particular, cómo crear un complemento personalizado y una tarea personalizada, y también echa un vistazo a la documentación de herramientas de plug-in de gradle de Android .

Para responder a la pregunta más general "¿cuál es la lista de tareas que la tarea <taskName> ejecuta?", Hay dos maneras sencillas de averiguarlo para cualquier tarea determinada.

La primera es:

 ./gradlew tasks --all | grep <taskName> 

Donde <taskName> debe ser reemplazado con cualquier tarea que le interesa. Por ejemplo, ./gradlew tasks --all | grep connectedDebugAndroidTest ./gradlew tasks --all | grep connectedDebugAndroidTest . Tenga en cuenta que estoy navegando a través de grep para ahorrarme el problema de cribar manualmente la lista de todas las tareas.

La segunda es:

Utilice el complemento de árbol de tareas . Una vez aplicado, el uso se ve así:

 ./gradlew <taskName> taskTree 

O, como generalmente lo prefiero:

 ./gradlew <taskName> taskTree --no-repeat -quiet 

Esta última opción hace que la salida sea un poco menos desordenada.

  • Prueba de GPS en Android
  • Prueba de unidad de Android en el proyecto
  • Uso de Espresso ¿Cómo puedo comprobar el número de elementos en mi alerta Cuadro de diálogo
  • ¿Puedo tener un código de versión inferior en producción desde el canal de pruebas alfa?
  • Espresso - haga clic en el texto en la vista de lista
  • ¿Cómo hago que Espresso espere hasta que Data Binding haya actualizado la Vista con el modelo de datos?
  • Pruebas funcionales: llamadas a MediaPlayer
  • Gradle: ¿Cómo mostrar los resultados de androidTest en la consola?
  • El módulo de prueba de Android (Gradle Plugin 1.3) no funciona: "debug-classes not found"
  • ¿Cómo puedo crear un módulo de prueba de Android en IntelliJ 13 para un proyecto Android de Gradle?
  • Google Espresso o Robotium
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.