Hoy quiero contarles sobre una herramienta de código abierto bastante nueva para pruebas automatizadas llamada Airtest . En el futuro haré algunos artículos más con una historia detallada sobre los elementos individuales de este kit de herramientas y cómo trabajar con ellos, pero ahora tengo el objetivo de presentarlo y darle una idea general.
Este es el primero de tres artículos. La segunda parte describe el marco para el reconocimiento de imágenes (Reconocimiento de imágenes) - AirTest , y la tercera y última parte está dedicada a Poco - el marco de automatización de UI escribiendo código .
AirTest IDE fue desarrollado por NetEase y está destinado a aplicaciones "difíciles de automatizar", como, por ejemplo, juegos. En realidad, son el foco principal de los desarrolladores, aunque esto no deja de usar AirTest para otras aplicaciones.
AirTest IDE se ejecuta en Windows, MacOS X y Linux y contiene 2 marcos: AirTest y Poco. Este desarrollo fue presentado por Xin Liu en la Cumbre de desarrolladores de juegos de Android 2018 . Python 2.7 y Python 3.3+ se usan para escribir pruebas. Cosas tan importantes como el soporte para ejecutar pruebas inmediatamente en una gran cantidad de dispositivos, código fuente abierto y aplicación gratuita, así como pruebas escritas fáciles: estas son las ventajas que los desarrolladores destacan. La aplicación se puede utilizar tanto en Windows como en MacOS y le permite automatizar aplicaciones desde el siguiente sistema operativo: Windows, iOS, Android.
El Proyecto AirTest en GitHub contiene 4 proyectos: Airtest , Poco , iOS-Tangent , multi-device-runner .
También vale la pena mencionar que NetEase proporciona su propia granja de dispositivos físicos para pruebas automatizadas llamada AirLab .

Brevemente sobre los marcos.
Airtest es un marco multiplataforma de reconocimiento de imágenes para juegos y aplicaciones móviles basado en la retención de imágenes . AirTest IDE le permite interactuar con la aplicación utilizando los siguientes comandos:
tocar, esperar, deslizar, existe, texto, evento clave, instantánea, dormir, afirmar_existe, afirmar_no_existe, afirmar_equal, afirmar_no_equal. Hablaré sobre las características y parámetros de los comandos en un artículo separado dedicado a un estudio más detallado de los marcos de AirTest y Poco. Ahora vale la pena mencionar que el comando keyevent es responsable de "presionar los botones físicos" del dispositivo, como Inicio, Encendido, Menú, Atrás. Al usar la mayoría de los comandos, se le pide al usuario que resalte una parte de la pantalla del dispositivo de trabajo, una captura de pantalla de la cual se usará para el comando correspondiente (tocar, deslizar, afirmar, etc.).

Las ventajas de Airtest que puedo destacar después del trabajo:
- Escritura de código rápida y clara. Todo se hace, en la práctica, en modo automático, solo necesita seleccionar los parámetros necesarios, ajustar los tiempos y tener cuidado con la elección de la imagen.
- La definición exacta de la imagen, que se utiliza en el código, en el dispositivo de trabajo activo. Además, el informe indica el porcentaje de coincidencia (comparación) de la imagen utilizada en el código y la imagen de la pantalla del dispositivo de trabajo.
- Hablando de informes. Después de cada lanzamiento, puede crear un informe utilizando el método abreviado de teclado Ctrl \ Cmd + L. Un informe conveniente proporciona información como: tipos de afirmación, sus resultados, y también cada paso de prueba se resalta en una subsección separada con información sobre dónde hizo clic AirTest, dónde esperaba una imagen, porcentaje de imágenes coincidentes, etc.
- Una vez que haya escrito el código, puede usarlo en cualquier dispositivo.
- Multithreading: conecte múltiples dispositivos de prueba y ejecútelos en paralelo.
Contras Airtest, que puedo destacar después del trabajo:
- Si en el proceso hay elementos que se ven visualmente iguales, por ejemplo, controles deslizantes, botones, etc., con una alta probabilidad AirTest no entenderá qué control desea usar. Esto se indicará en el error correspondiente. Pero este signo negativo se dispensa fácilmente con el uso del segundo marco (Poco), que se analizará a continuación.
- La comparación de imágenes (del código y las reales en la pantalla) ocurre en blanco y negro. Vale la pena considerar si eres importante, por ejemplo, la apariencia visual del personaje (su color, ropa diferente, etc.). Si los personajes son visualmente diferentes, pero se muestran en la pantalla de la misma manera (una pose, etc.), entonces la verificación probablemente tendrá éxito. Las opciones de reconocimiento de imagen tienen una marca de verificación "rgb" que puede usar, pero no funciona muy bien si tiene una imagen pequeña.
- No puede "congelar" la pantalla mientras usa la aplicación para tomar con precisión las capturas de pantalla que necesita. De vez en cuando necesita "atrapar" el marco que necesita.
- Porque aplicación en versión beta abierta, entonces puede encontrar varios errores molestos o imprecisiones, por ejemplo, la imposibilidad de cambiar el tamaño de una ventana con una aplicación integrada en Windows. Los autores ahora están actualizando el IDE de AirTest una vez cada pocos meses, y espero que estos descuidos se solucionen pronto.
Poco es un marco universal para automatizar la interfaz de usuario (UI), que proporciona API potentes independientes del motor (juego). Esos, a su vez, recuperan la jerarquía de elementos de la IU en tiempo de ejecución. Gracias a esto, el usuario puede "alcanzar" toda la jerarquía de elementos en la página actual en unos pocos clics al elemento que necesita, etc. Además, este marco le permite "congelar" la pantalla actual para escribir código basado en la jerarquía de elementos de la ventana actual. Poco está diseñado para ayudar a AirTest a entender de qué tipo de elemento de interfaz de usuario están hablando las pruebas, pero nadie te molesta en escribir todas las pruebas usando solo este marco.
Todas las pruebas están escritas en Python. Las implementaciones de comandos se pueden encontrar en las API correspondientes: módulo airtest.core.api , paquete airtest.core.android , paquete airtest.core.ios , paquete airtest.core.win

Poco ventajas que puedo destacar después del trabajo:
- Hay soporte para varios motores de juego importantes, incluidos Unity3D, cocos2dx-js, cocos2dx-lua, motores internos NetEase, así como soporte para aplicaciones nativas de Android / iOS. Si desea utilizar un motor que no está en la lista de los "compatibles", puede escribir el suyo siguiendo las instrucciones correspondientes . En la documentación oficial hay una mención del Unreal Engine, pero hasta ahora, todo se limita a la frase "Próximamente".
- La jerarquía de los elementos de la interfaz de usuario en la pantalla vuelve en tiempo real.
- Inicio rápido y ejecución de pruebas.
- Como en AirTest, escribí el código una vez, úselo en todas partes. Soporte para Python 2.7 y 3.3+
- Es posible conectar cualquier biblioteca externa a su proyecto.
- A juzgar por la documentación, hay soporte para GPS, acelerómetro y sensores giroscópicos, así como soporte para modos de visualización vertical y horizontal.
Poco contras que puedo destacar después del trabajo:
- Durante el trabajo en Windows 7 no encontré problemas fundamentales. lo que interferiría con el trabajo completo, pero en este momento lo son cuando se trabaja con Windows 10. Lo principal es el movimiento incorrecto de los objetos (comando deslizar) en algunos casos. Por ejemplo, indico el objeto a mover y las coordenadas del segundo objeto, que es el punto final. En estos raros casos, Poco pierde la ubicación final, pero los informes muestran los datos de desplazamiento correctos (vector) y el paso se considera exitoso.
- Cuando selecciona algunos elementos con diseños grandes (diseño), la selección puede superponerse a la ventana Poco Assistant y no podrá seleccionar otros elementos hasta que la selección se elimine de la actual. Para eliminar la selección, puede usar el método abreviado de teclado Alt + F4
Para completar la imagen, vale la pena mencionar que Airtest IDE tiene su propio complemento Selenium , con el que puede automatizar su proyecto web, pero utilizando solo un navegador Chrome. El resto, por el momento, no son compatibles. Personalmente, todavía no he trabajado con él, así que no puedo decir sobre su trabajo, pero fue imposible extrañarlo en esta breve descripción.

Como resultado, diría que AirTest IDE es un desarrollo muy prometedor que está diseñado para automatizar la interfaz de usuario en los juegos, pero, por el momento, no es adecuado para probar el proceso del juego como tal. Si tiene muchos elementos de la interfaz de usuario y / o muchos dispositivos para verificar y no desea gastar muchas horas de trabajo, entonces este IDE puede convertirse en su salvavidas. Para comenzar a escribir las pruebas más simples, no necesita un conocimiento profundo en automatización y programación, solo tiene una comprensión básica del trabajo con Python. Por supuesto, de esta manera no irá muy lejos y tendrá que aprender este lenguaje de programación, pero para comenzar y comprender cuán realista es este programa, es suficiente para sus ojos. Lo único que es frustrante ahora son varios errores molestos asociados con, por ejemplo, la incapacidad de cambiar el tamaño de una ventana con un dispositivo que funciona (aplicación de Windows) después de incrustarla, superponiendo un gran objeto seleccionado de la interfaz principal del programa, etc., pero es bastante posible llegar a un acuerdo, especialmente teniendo en cuenta el hecho de que la aplicación está en fase Beta.
