Y ahora ha llegado el momento en que nuestras necesidades de prueba se han llenado en el escritorio del probador. El alma preguntó a las nubes. En realidad no En realidad no
Nuestras metas y objetivos
(lector apurado, puedes terminar en la siguiente sección)
Estamos desarrollando una aplicación financiera para el mercado extranjero, que está disponible en diferentes formatos: para navegadores de escritorio (sitio web y extensión para Google Chrome), para navegadores móviles, así como una aplicación híbrida para teléfonos. Debido a los detalles de la aplicación, prestamos especial atención a probar la aplicación en varias configuraciones y dispositivos. Para nosotros, el funcionamiento estable y seguro de la aplicación es importante tanto en los navegadores de escritorio de nuestros clientes como en sus dispositivos.
La razón para encontrar una granja de dispositivos basada en la nube para realizar pruebas para nosotros fue un cambio en el formato de trabajo desde la oficina a completamente remoto y distribuido (entre ciudades y países). Es decir, si antes para la prueba pudiéramos ensamblar diferentes dispositivos en un grupo (literalmente) y probar manualmente el siguiente ensamblaje en una tabla al mismo tiempo, ahora se ha vuelto imposible hacer esto. Además, con el crecimiento de la funcionalidad, con el fin de reducir el trabajo manual, automatizamos los conjuntos de regresión de pruebas importantes, lo que significa que después del ensamblaje debemos poder llamar a las pruebas en la configuración y dispositivo deseados, y es mejor hacerlo tan pronto como el ensamblaje pase a la puesta en escena.
En este caso, la solución más simple y obvia es usar emuladores para Android y simuladores para dispositivos iOS en nuestra cartera de DevOps. Sin embargo, que es relativamente fácil de implementar en la computadora de trabajo del desarrollador, se convierte en una tarea difícil y costosa de usar en la nube. Para que el mismo emulador de Android funcione rápidamente, se requiere un servidor x86 con soporte HAXVM, y para un simulador de iOS, solo se requiere un dispositivo MacOS con xcode. Pero, desafortunadamente, incluso habiendo resuelto este problema, la pregunta sigue siendo la brecha entre el comportamiento del software en emuladores y dispositivos reales. Por ejemplo, cada segundo lanzamiento detectamos errores extraños en dispositivos Samsung que no se pueden reproducir en emuladores. Bueno, y, por supuesto, la exótica "delicia" exótica "china" con errores únicos y que también me gustaría encontrar en la etapa de desarrollo.
Como resultado, entendimos la necesidad de usar una granja de dispositivos móviles en la nube, en la que pudiéramos ejecutar rápidamente nuestras pruebas y, si fuera necesario, depurar manualmente. Y a lo que todo nuestro equipo tendría acceso desde cualquier parte del mundo (nos encanta trabajar incluso cuando viajamos).
Nuestras pruebas están escritas en Python 3.7 (esto será importante más adelante), ya que en la pila usamos tox + pytest + Selenium + Appium, bueno, un pequeño conjunto de bibliotecas de python útiles. Definitivamente probaremos máquinas en Windows y MacOS con los navegadores Edge, Firefox, Chrome, Safari, así como dispositivos Android e iOS con navegadores y una aplicación. No tenemos muchas pruebas para cada dispositivo (menos de mil), pero cuando las pruebas en un solo hilo en los dispositivos, un conjunto completo lleva un par de horas. Por lo tanto, el criterio para elegir un servicio para nosotros será:
- Pruebas API (Selenium / Appium)
- IOS, dispositivos Android
- Admite pruebas de navegador móvil
- Soporte para descargar y probar aplicaciones
- Dispositivo de referencia (GooglePixel (Android 9) y iPhone X (iOS 12+))
- Depuración manual
- Registro (más capturas de pantalla, grabación de una ejecución de video)
- Parque de dispositivos y disponibilidad
- Tiempo promedio de prueba
- Precio
Deseable, pero no necesario:
- Nivel de servicio de soporte de Python (lo que sea que eso signifique)
- Soporte para dispositivos de escritorio \ navegadores
Resultados de estudios de mercado
Durante una semana navegué por Internet y probé una docena de servicios diferentes. La mayoría de ellos proporcionan tiempo libre para oportunidades de prueba. Los resultados de mi investigación, más conclusiones son subjetivas. Su opinión y resultados pueden diferir de los míos.
En Habré encontré un artículo para 2017 dedicado al mismo tema, pero desde entonces han aparecido nuevos servicios y nuestra tarea es un poco más estricta. Entonces, por ejemplo, los servicios “sabrosos” como Samsung Remote Test Lab, Firebase Test Lab, Xamarin Test Cloud, por desgracia, no nos convienen.
Fuera del juego
Laboratorio de prueba remota de Samsung
Enlace
El servicio brinda una oportunidad gratuita para intentar trabajar con varios dispositivos Samsung, incluidos los más nuevos, incluidos televisores o relojes inteligentes en Tizen (la limitación es un máximo de 10 horas por día, por día, el servicio otorga 10 créditos gratis, lo que equivale a 2.5 horas por día , la sesión mínima es de media hora (2 créditos)). Esto es muy bueno para la depuración y para encontrar las causas raíz de los errores en ciertos dispositivos, el servicio incluso proporciona acceso a la depuración remota (puente de depuración remota, acceso a la consola y registros del sistema), pero, desafortunadamente, el servicio no proporciona acceso API a los dispositivos. La única forma de "automatizar" es registrar las acciones del usuario y luego reproducirlas en su herramienta de automatización local.
Laboratorio de pruebas de Firebase
Enlace
Un servicio de Google le permite probar su aplicación en dispositivos con Android e iOS de forma gratuita (no del todo). Pero hay una advertencia: el servicio requiere el uso de herramientas de automatización nativas (UIAtomator2 y Espresso para Android y XCTest para iOS), o el uso de arañas automáticas (rastreador) para Android: Robo Test y Game Loop Test. Es decir, usar UIAutomator y Selenium, por desgracia, no funcionará. En cuanto a gratis, el paquete gratuito está limitado a 10 pruebas en emuladores y cinco en dispositivos reales por día. Si necesita más, entonces por cada hora adicional tendrá que pagar otros $ 1 y $ 5, respectivamente. En general, para nuestras tareas, esta sería una buena opción si escribiéramos pruebas desde cero, pero no tengo ganas de reelaborar varios cientos de pruebas, es simplemente costoso. Y resulta que tendríamos que divergir mucho en las pruebas entre versiones de escritorio y dispositivos móviles, lo que complicaría en gran medida el soporte.
Centro de aplicaciones de Visual Studio
Enlace
Antigua nube de prueba de Xamarin. Este servicio finalmente es compatible con Appium y permite realizar pruebas en miles de dispositivos diferentes. Pero, como en el caso de otros productos de Microsoft, está firmemente clavado en la pila nativa, lo que significa que para usar este servicio necesitará la presencia de VisualStudio y el requisito de escribir el proyecto y las pruebas exclusivamente en Java. Pero si de repente tienes una pila Java (con MS VS), entonces el precio es de $ 99 por ranura de dispositivo por mes, lo cual es relativamente liberal.
Servicios para elegir
AWS Device Farm
Enlace
Quizás la granja más poderosa para probar en dispositivos virtuales y reales hoy (más de 2500 dispositivos). Para nosotros, este era un servicio prioritario, ya que nuestros servicios se acaban de implementar en la nube de AWS, además, los precios por minuto del dispositivo a partir de 17 centavos. AWS le permite trabajar con marcos nativos, así como con Appium, Calabash y otros marcos de prueba automatizados. Además de las pruebas automatizadas, el servicio proporciona la capacidad de depurar manualmente. Bueno, 1000 minutos "para probar" es muy tentador. Sin embargo, el diablo, como siempre, está en los detalles. En términos de pruebas, AWS tiene varias características.
Nosotros, como ya mencioné, usamos Python 3.7, sin embargo, AWS Device Farm todavía funciona con Python 2.7.6 (consulte el manual aquí ). Y fuera de la caja no sabe nada sobre tox. Para nosotros, esto significa la ausencia de una serie de capacidades y la necesidad de procesar parte de las pruebas para garantizar la compatibilidad con versiones anteriores y crear un entorno que evite el tox. Además, un mecanismo bastante extraño para descargar un paquete de prueba (archivo) también implica descargar la aplicación para la prueba. En nuestro caso, si probamos nuestro servicio a través de un navegador móvil, descargar la aplicación es un paso adicional. Sin embargo, puede reemplazar la aplicación con un "código auxiliar" y crear un venv con Python 3.7 en el entorno Python 2.7, y luego crear un entorno con toxina, que ...

Amazon no sería Amazon si todo se basara en versiones antiguas. Como alternativa (y ningún servicio tendrá esa oportunidad a continuación) AWS sugiere usar AWS Device Farm a través de la AWS CLI (interfaz de línea de comandos) (consulte el manual aquí ). Es decir, podemos conectar el dispositivo desde la nube como un dispositivo real a nuestra computadora en el modo de depuración remota, sin embargo, habiendo reemplazado previamente adb con el parcheado (no hay binario para linux en la lista de binarios, pero estoy seguro de que existe en la naturaleza). Es decir, al configurar la CLI de AWS, para las pruebas tendremos que ejecutar solo unos pocos comandos (porque no vamos a utilizar la GUI como una aplicación de granja de dispositivos de AWS).
Si queremos probar la aplicación, también se puede descargar a través del SDK de AWS.
Pero no dije un matiz clave aquí. Nos topamos con el diablo nuevamente en detalle. El hecho es que la opción de depuración remota está disponible solo si usamos el plan de dispositivos privados para AWS. En primer lugar, esta función está disponible solo a pedido (debe escribir una carta a Amazon), en segundo lugar, la opción está disponible para la región us-west-2 y, en tercer lugar, esta opción nos devuelve al escenario cuando tenemos un servidor para prueba con un conjunto (o al menos uno) de dispositivos conectados a él. Las ventajas son obvias: podemos usar este dispositivo exclusivamente, que obviamente es más seguro y rápido, por otro lado, perdemos la principal ventaja: la elección y la variedad de dispositivos.
Me gustó el servicio en su conjunto, pero para nuestro equipo, por desgracia, hay demasiados "peros" en él.
Bitbar
Enlace
Esta granja móvil basada en la nube es la primera en caer en los motores de búsqueda. Y no en vano. Mirando hacia el futuro, diré que este servicio tiene la mejor opción de dispositivos (solo dispositivos reales) y el mejor rendimiento en términos de una prueba en comparación con otras. Bitbar ofrece servicios para pruebas remotas manuales y automatizadas (usando Appium y otros marcos), y también, si lo desea, le permite usar algo similar al rastreador de Firebase Test Lab (Robot Test) - AI TestBot. La principal ventaja de BitBar es un número ilimitado de subprocesos de prueba (es decir, puede probar inmediatamente su aplicación en cientos de dispositivos) seleccionando de antemano el conjunto de dispositivos requerido. Si el dispositivo está ocupado, se seleccionará otro igual o la sesión se pondrá en cola. Al final de la ejecución de la prueba, se genera un registro, un registro de prueba, los resultados se guardan y la notificación se envía por correo. Aunque existen oportunidades para configurar la interacción con diferentes herramientas de CI / CD. El servicio también proporciona la capacidad de probar los navegadores de escritorio en diferentes resoluciones y, si lo desea, crear, como en AWS, sus dispositivos privados. Es cierto que debe pagar todos estos chips: cada minuto de prueba costará $ 0.29.

El proceso de configuración es simple, como la interacción de dos dedos con asfalto:
Ejemplo de código from appium import webdriver """ ... """ com_executor = 'https://appium.bitbar.com/wd/hub' desired_capabilities = { 'deviceName': 'Motorola Google Nexus 6', 'deviceId': 'FA7AN1A00253', 'newCommandTimeout': 12000, 'browserName': 'Chrome',
Kobiton
Enlace
Otro servicio que brinda servicios de prueba en dispositivos reales. La elección de dispositivos es más modesta que Bitbar (350+), la disponibilidad de dispositivos también es menor. En general, es muy similar en su funcionalidad básica a BitBar, permite pruebas manuales y automáticas (usando Appium, aquí sin elegir marcos). No hay forma de probar en navegadores de escritorio. El servicio también le permite organizar pruebas con un número ilimitado de sesiones y dispositivos, pero no puede crear un grupo de dispositivos aquí. El precio del servicio es muy liberal: desde $ 0,10 por minuto adicional de prueba, pero durante el período de prueba noté cierta inestabilidad del servicio, Internet a menudo se cayó en los dispositivos, una vez que el dispositivo se colgó. Además, si el dispositivo está ocupado o reservado, todas las pruebas en ejecución fallarán. Es decir, a diferencia de Bitbar, no hay colas de las sesiones. Es cierto que se puede organizar a bajo costo. Kobiton tiene su propia API pequeña.

La configuración también es muy simple, a diferencia del bitbar, casi el Appium original.
Ejemplo de código import base64 from time import sleep from appium import webdriver import requests """ ... """
Pila de navegador
Enlace
Buen viejo BrowserStack. Se escribieron muchas cosas sobre él y muchos de los que lo usan. Sí, permite realizar pruebas no solo en diferentes navegadores, sino también en diferentes dispositivos. Tanto en modo manual como usando Selenium / Appium. Dependiendo de sus necesidades, en navegadores móviles o usando su aplicación. En términos de capacidades, todo es igual a los dos servicios en la parte superior, pero a diferencia de ellos, ya hay restricciones en el número de sesiones simultáneas. Es cierto, por el contrario, paga $ 199 por mes y prueba por tiempo ilimitado. Hay complementos para Jenkins, Travis CI, TeamCity, su rica API, excelentes registros y una gran selección de dispositivos y navegadores de escritorio en diferentes configuraciones. Es cierto que, según lo que esté probando, la configuración variará, para probar los navegadores (incluso los móviles), se utiliza un concentrador Selenium y, para las aplicaciones, un concentrador Appium. Además, para probar la aplicación, deberá pagar por separado. Es decir, para probar tanto los navegadores móviles como las aplicaciones, debe pagar $ 199 y otros $ 159 (el precio de un dispositivo para probar al mismo tiempo).

Código de muestra para la aplicación from appium import webdriver """ ... """ com_executor = 'https://USERNAME:API_KEY@hub-cloud.browserstack.com/wd/hub' desired_capabilities = {'device': 'Google Pixel', 'deviceName': 'Google Pixel', 'app': app_name, 'realMobile': 'true', 'os_version': '8.0', 'name': 'Bstack-[Python] Sample Test' } driver = webdriver.Remote(com_executor, desired_capabilities) """ ... """
Código de muestra para un navegador móvil from selenium import webdriver """ ... """ com_executor = 'http://USERNAME:API_KEY@hub.browserstack.com:80/wd/hub' desired_capabilities = {'device': 'Google Pixel', 'deviceName': 'Google Pixel', 'browserName': 'Chrome', 'realMobile': 'true', 'os_version': '8.0', 'name': 'Bstack-[Python] Sample Test' } driver = webdriver.Remote(com_executor, desired_capabilities) """ ... """
Experimental

Enlace
Otro servicio que brinda la capacidad de probar de forma manual y automática tanto los dispositivos móviles como los navegadores de escritorio utilizando Appium, Selenium y otros marcos. Como en el caso de BrowserStack, el número de sesiones simultáneas es limitado, pero los precios son ligeramente diferentes: para probar aplicaciones móviles, el servicio solicita $ 199 por mes, y para las pruebas entre navegadores solo $ 39 (para una sesión simultánea). Además, al igual que Bitbar con AWS, puede construir su propio laboratorio privado con dispositivos que, sin embargo, se pueden mezclar con una nube pública de miles de dispositivos, emuladores y navegadores de diferentes versiones y plataformas (MacOS, Windows), si lo desea. De las características interesantes: la disponibilidad de extensiones para IntelliJ y Eclipse, su propia herramienta Appium Studio, que le permite utilizar la funcionalidad avanzada de dispositivos como interactuar con FaceID, control de voz, escaneo de códigos de barras, configuración de calidad de comunicación, ubicación geográfica y más. De las desventajas, puedo nombrar un conjunto extraño de dispositivos para el período de prueba, la arancelización draconiana para el período de prueba, así como el requisito de usar el correo corporativo (gmail no funcionará).

Ejemplo de código from appium import webdriver """ ... """ com_executor = 'https://Uhttps://cloud.seetest.io/wd/hub' desired_capabilities = {"deviceName": "iPhone X", "accessKey": API_KEY, "platformName": "ios", "deviceQuery": "'@os='ios' and @version='12.1.3' and @category='PHONE'", } driver = webdriver.Remote(com_executor, desired_capabilities) """ ... """
Saucelabs
Enlace
Uno de los servicios de prueba en la nube más antiguos. Casi 400 dispositivos reales diferentes, una amplia selección de simuladores y emuladores, incluidos emuladores atípicos de dispositivos Samsung, existen navegadores de escritorio para varios sistemas operativos, incluido Linux. Automatización en Appium / Selenium y frameworks nativos. La principal ventaja del servicio es la presencia de una amplia colección de configuraciones, incluidos sistemas operativos antiguos, navegadores y dispositivos. SauceLabs también tiene un límite en el número de sesiones simultáneas, pero aquí la opción más barata incluye no una, sino dos sesiones simultáneas. Lo que es inusual: los planes de tarifas en dispositivos reales y en emuladores son diferentes. Por lo tanto, las opciones más baratas, que incluyen dos sesiones con 2000 minutos de prueba por mes en emuladores, costarán $ 149 y en dispositivos reales ya $ 349. Hay integración con CI / CD, Slack. Desafortunadamente, no pude probar SauceLabs en vivo, porque lamentablemente, el registro falla, posiblemente debido a la región, pero no puedo decirlo con certeza.
Perfecto
Enlace
El último proveedor de pruebas en la nube es visualmente más similar a Experitest, pero sin funcionalidad avanzada. Hay un lenguaje de script simple. Es muy extraño, pero en el servicio de tarifas no corporativas (Enterprise) no hay una propuesta para probar en navegadores de escritorio, también es imposible monitorear la ejecución de las pruebas en tiempo real (solo si esto no es una prueba manual). Cerca de cien dispositivos diferentes están disponibles para pruebas. Existe integración con Jenkins y, curiosamente, con herramientas de administración de pruebas como HP ALM, IBM Rational, TFS. También están disponibles planes de tarifas muy extraños, como 5 horas de prueba por mes (en términos de minutos hasta $ 0.33 (este es el servicio más caro)), aunque con la capacidad de comprar un paquete con horas adicionales, pero de nuevo, es extraño que no haya por minuto o al menos facturación por hora después del hecho. En cuanto a la facilidad de uso, durante el período de prueba solo están disponibles las pruebas manuales, así como un laboratorio común, para que todos los lanzamientos de diferentes usuarios caigan en un montón. Por lo tanto, es imposible juzgar exactamente la conveniencia y la velocidad del servicio. Se puede ver que el servicio se centra principalmente en grandes clientes corporativos, mientras que, al menos según la información disponible, las capacidades de este proveedor son las más modestas que he probado.

Resultados resumidos
Según todos los criterios de selección, los servicios son muy similares, la diferencia entre los servicios en su rendimiento y precio (si no hay características, por ejemplo, como en el caso de AWS). Por lo tanto, resumiremos los datos de la investigación en una tabla, veremos la velocidad de los servicios (teniendo en cuenta la conexión a través de la VPN de EE. UU.), Así como el precio, por conveniencia, comparando el tiempo promedio de prueba mensual en dispositivos (5 lanzamientos por mes, 2 horas de prueba en dispositivos Android e iOS = 20 horas). Como valores de referencia, uso datos de mi computadora local con un emulador, de nuevo conectándome para la pureza del experimento a través de una VPN en los EE. UU.).
Conclusiones
Fue bastante interesante para mí investigar y elegir el servicio adecuado para nuestro equipo. En general, existen soluciones para todos los gustos y para cualquier tarea, y los servicios resultaron ser muy similares en términos de características e implementación. Como resultado, dependiendo de sus tareas, recomendaría la siguiente opción:
Opción A : si la velocidad de verificación es importante para usted y necesita verificar docenas de dispositivos diferentes a la vez, su elección es Bitbar .
Opción B : si tiene prioridad en los resultados de los dispositivos de referencia y las pruebas de configuración son secundarias (pero necesarias), su elección es BrowserStack . Este es solo nuestro caso, ya que estadísticamente, el 90% de todos los errores son errores de plataformas y dispositivos de referencia (la mayoría de las veces los errores son comunes para todas las plataformas de referencia a la vez). El 8% restante son errores de MS IE, con la negativa del soporte de IE: 2% de errores de MS Edge y 0.5% de errores en configuraciones específicas.
Opción B : si está interesado en verificar condiciones especiales, como comunicaciones de baja calidad, geolocalización o Touch / FaceID, su elección es Experitest .
Pero a largo plazo, si su empresa ocupa una oficina grande, su trabajo es a tiempo completo, entonces, como regla, organizar sus propios, incluso mini laboratorios con un servidor para emuladores con 2-3 dispositivos conectados, costará menos y más conveniente que usar servicios