test automated apium android jenkins continuous-integration robotium android-gradle

android - automated - appium test mobile



¿Cómo puedo ejecutar mis pruebas independientes de IU de Robotium en paralelo? (4)

Puede realizar esto en 3 pasos:

  1. Crea 2 nodos que apuntan a la única máquina de destino (que satisface tu condición para ejecutar pruebas en la misma máquina).
  2. En la tarea durante la ejecución, utilice la variable de env de Jenkins $ NODE_NAME y asigne diferentes conjuntos de pruebas a cada nodo (es posible que necesite el complemento de parámetros NodeLabel ).
  3. Después de la ejecución, tendrá 2 archivos de informe, afortunadamente en la misma máquina. Puede fusionarlos en uno si son archivos de texto o crear xml algo similar al formato de plugin PerfPublisher que le proporciona un informe detallado.

Significa que puede ejecutar 2 juegos de pruebas en la misma máquina (2 nodos apuntando a ella) con un solo trabajo. Obtener un solo informe sería complicado, pero si conozco el formato puedo ayudarlo.

Espero que esto sea útil

Estoy usando Jenkins para mi integración continua de Android. Tengo algunas pruebas independientes e independientes de IU de Robotium que actualmente tardan 12 minutos en ejecutarse en serie contra un solo emulador. ¿Alguien puede recomendar una buena manera de ejecutarlos en paralelo, por lo que tomará solo 6 minutos (o menos)?

Conozco varias formas de ejecutar el conjunto completo de pruebas en paralelo en múltiples dispositivos / emuladores, por ejemplo, consulte la sección de trabajos de configuración múltiple (matriz) de Jenkins Android Emulator Plugin, Spoon o empresas de prueba en la nube como AppThwack .

Sé cómo ejecutar un subconjunto específico de mis pruebas, mediante el uso de anotaciones JUnit, o aparentemente Spoon admite una función similar (vea mi pregunta al respecto ).

Ahora estoy usando Spoon para ejecutar mi suite de pruebas completa (principalmente para aprovechar la hermosa salida de HTML con capturas de pantalla). Si alguien tiene consejos sobre la mejor manera de dividir mis pruebas y ejecutarlas en paralelo, sería genial.

Supongo que podría lograr esto al dividir las pruebas en dos trabajos separados de CI, pero parece difícil mantener dos trabajos separados y combinar los resultados.


Puede utilizar, por ejemplo, Jenkins MultiJob Plugin y Testdroid API para enviar sus APK a dispositivos reales. Esa es probablemente la forma más fácil de hacerlo. Ref guía aquí .


Esta respuesta es una mejora en mi respuesta MultiJob anterior .

La mejor forma que he encontrado para hacer esto es usar un trabajo de Jenkins Matrix (también conocido como "Proyecto de configuración múltiple"). Esto es realmente conveniente porque puede configurar todo en un único trabajo de Jenkins.

Spoon ahora admite una opción --e que le permite pasar argumentos directamente al corredor de instrumentación. He actualizado su archivo README con una sección sobre Prueba Sharding .

Ese README debería darle lo que necesita, pero aquí hay otros aspectos destacados de nuestra configuración de trabajo de Jenkins, en caso de que eso ayude.

El User-defined Axis establece la cantidad de nodos esclavos que queremos ejecutar. Tenemos que establecer la etiqueta en android para que nuestro proveedor de la nube pueda ejecutar un esclavo apropiado.

Tenemos un script run-build.sh que invoca a Spoon con los parámetros correctos. Necesitamos pasar el número total de nodos (en este caso 6 ) y el índice del nodo esclavo específico que se está ejecutando (presente automáticamente en la variable node_index ).

Los pasos posteriores a la compilación no deberían ser diferentes de los existentes. En el futuro, probablemente necesitemos agregar algo para recopilar los resultados en el nodo maestro (esto ha sido sorprendentemente difícil de entender). Por ahora, todavía puedes hacer clic para obtener los resultados de los esclavos.


Actualización : He agregado otra respuesta que creo que brinda una configuración más clara y concisa de Jenkins, y se basa más directamente en Spoon.

Acabo de descubrir el plugin Jenkins MultiJob que le permite ejecutar múltiples trabajos en paralelo dentro de una Fase.

Debajo está mi enfoque de trabajo, pero un poco frágil para hacer esto usando el complemento Fork . Utilizo expresiones regulares configuradas manualmente para particionar las pruebas (esta fue la razón principal por la que traté de usar Fork - admite el uso de expresiones regulares).

El MultiJob se ve así con múltiples trabajos en sentido descendente en una Fase:

Configuración principal del trabajo

Así es como está configurado mi "Trabajo múltiple de Android":

Configuración de trabajo en sentido descendente

Así es como se configuran los trabajos posteriores de "Fase N de Android" (con diferentes expresiones regulares de android.test.classes para cada uno):

Gotchas

  • Actualmente, Fork no se ejecuta en Gradle v1.0.0, como lo indica el plugin fork # 6 .
  • Si desea una regex de Fork para que coincida con varios paquetes diferentes, debe separar la coma de su expresión regular. Esto no está muy bien documentado en el proyecto Fork, pero su fuente TestClassFilter muestra cómo interpretan la expresión regular.
  • Todas las clases de prueba abstractas deben llamarse Abstract* , de lo contrario, Fork intentará ejecutarlas como pruebas, creando fallas molestas. Su TestClassScanner controla esto, y emite pistas # 5 cambiando esto.
  • IIRC, debe tener instalado el complemento de huellas dactilares para que funcione la opción "resultados agregados de la prueba aguas abajo". Si no lo tiene instalado, verá este error: "La huella digital no está habilitada en esta versión. La agregación de prueba requiere huella digital".

Limitaciones

  • Los resultados de prueba se agregan, pero solo utilizando los informes de prueba de JUnit XML. Esto significa que debe hacer clic en cada trabajo en sentido descendente para ver buenos resultados HTML.
  • La partición manual de las pruebas basadas en expresiones regulares puede ser tediosa y propensa a errores. Si utiliza este enfoque, le recomiendo que todavía tenga un trabajo Jenkins nocturno / semanal para ejecutar su conjunto completo de pruebas en un solo lugar, para asegurarse de que no pierda accidentalmente ninguna prueba.
  • Este enfoque MultiJob requiere que configure manualmente cada trabajo en sentido descendente, uno para cada nodo esclavo que desee usar. Hemos creado un prototipo de un mejor enfoque utilizando un trabajo de Matrix, donde solo tiene que configurar todo en un solo trabajo de Jenkins). Intentaremos escribir eso en las próximas semanas.

Futuros

También hemos creado un prototipo de una forma de extender Spoon (la salida es más bonita que Fork ) para dividir automáticamente todo el conjunto de pruebas en N trabajos secundarios. Todavía tenemos que mejorarlo para agregar todos esos resultados a una sola página HTML en el trabajo de subida, pero desafortunadamente un error en el complemento de Jenkins "Copiar al esclavo" está impidiendo que funcione en este momento.