Visual Regression Bajo el Capó

Rate this content
Bookmark

La regresión visual es una de las partes más difíciles en las pruebas de interfaz de usuario. Y seguramente estarás de acuerdo en que es extremadamente poderosa. Pero, ¿cómo funciona? ¿Cuál es el problema que resuelve bajo el capó? ¿Por qué la gente elige servicios de regresión visual y cómo construimos la herramienta de regresión visual más rápida del mundo :)

This talk has been presented at TestJS Summit - January, 2021, check out the latest edition of this JavaScript Conference.

FAQ

La regresión visual es una técnica utilizada en las pruebas de interfaz de usuario que implica comparar visualmente las capturas de pantalla de la interfaz de usuario para detectar cambios. Proporciona un gran valor al asegurar que los cambios en la interfaz de usuario sean intencionales y no afecten negativamente la experiencia del usuario.

Los pasos básicos en la regresión visual incluyen cargar una página, tomar una captura de pantalla, compararla con una versión aprobada anteriormente y analizar las diferencias para detectar cambios no deseados o errores.

La regresión visual puede ser inestable debido al ruido visual en las capturas de pantalla, como animaciones, cambios en el contenido dinámico o diferencias en la renderización entre diferentes navegadores o sistemas operativos. Esto puede llevar a falsos positivos en las pruebas, reduciendo su efectividad.

Mejorar la estabilidad en las pruebas de regresión visual puede lograrse mediante la estandarización del entorno de prueba, como ejecutar pruebas en Docker, y asegurando que la interfaz de usuario esté en un estado predecible durante las pruebas.

Es crucial probar la interfaz de usuario en las resoluciones que realmente utilizan los usuarios finales, lo cual puede determinarse mediante herramientas de análisis. Esto asegura que la interfaz de usuario funcione adecuadamente en los dispositivos y configuraciones más comunes entre el público objetivo.

Odiff es una biblioteca desarrollada para mejorar el rendimiento en las pruebas de regresión visual al permitir comparaciones de imágenes no en JavaScript, sino en un lenguaje nativo más eficiente. Esto agiliza el proceso de pruebas y reduce el tiempo necesario para obtener resultados.

Dmitry Kovalenko
Dmitry Kovalenko
9 min
15 Jun, 2021

Comments

Sign in or register to post your comment.
Video Summary and Transcription
La charla de hoy discute el valor y los desafíos de la regresión visual en las pruebas de interfaz de usuario. Destaca la importancia de la previsibilidad en la carga de páginas y la elección de la resolución correcta de capturas de pantalla. También menciona el uso de servicios de regresión visual, Docker y la biblioteca Odiff como soluciones para mejorar la estabilidad y eficiencia en las pruebas de regresión visual.
Available in English: Visual Regression Under the Hood

1. Introducción a la Regresión Visual

Short description:

Hola a todos. Hoy hablaré sobre la regresión visual y su valor en las pruebas de interfaz de usuario. Vamos a ver un ejemplo sencillo y ver cómo la regresión visual puede detectar automáticamente cambios en las capturas de pantalla de la interfaz de usuario, ayudándonos a construir un sistema estable y confiable.

Hola a todos. Estoy emocionado de estar aquí hoy y hablar sobre la regresión visual. Mi nombre es Dmitry. Soy de Ucrania. Trabajo a tiempo completo en Cypress.io y también colaboro en la comunidad de código abierto. Comencemos. Hoy hemos estado hablando mucho sobre las pruebas de interfaz de usuario, pero probablemente estarán de acuerdo en que la parte más difícil de las pruebas de interfaz de usuario es probar cómo se ve la interfaz de usuario para los usuarios, ¿verdad? Porque las computadoras no saben nada sobre la interfaz de usuario. Y ahí es donde la regresión visual nos brinda mucho valor. Veamos un ejemplo sencillo de regresión visual y luego profundicemos en el proceso. Aquí hay un ejemplo. Una captura de pantalla sencilla de la página de inicio de Cypress.io. Y aquí está la siguiente captura de pantalla. Probablemente noten la diferencia, ¿verdad? Porque están cambiando muy rápido. Pero la regresión visual puede hacer esto automáticamente. Pueden ver que hay dos cambios entre estas capturas de pantalla. Y esto es extremadamente útil cuando queremos construir un sistema estable y confiable. Sí, lo hace

2. Desafíos y Soluciones en la Regresión Visual

Short description:

Pero en mi experiencia, la regresión visual también es una categoría de prueba extremadamente inestable. Hoy, me gustaría adentrarme en la regresión visual y discutir los problemas ocultos en cada paso. Cargar la página no es suficiente; debe ser predecible. Diferentes interfaces de usuario pueden aparecer en diferentes sistemas operativos o navegadores. Los servicios de regresión visual y Docker pueden ayudar a lograr la predecibilidad. Elegir la resolución correcta de captura de pantalla es crucial, ya que debe coincidir con las resoluciones utilizadas por los usuarios. La comparación de capturas de pantalla puede ser lenta, pero la biblioteca Odiff ofrece una solución más rápida. En conclusión, asegúrese de tener entornos consistentes, evite contenido inestable y pruebe la interfaz de usuario en las resoluciones utilizadas por los usuarios.

nos da confianza sobre cómo cambia nuestra interfaz de usuario para los usuarios reales. Pero en mi experiencia, la regresión visual también es una categoría de prueba extremadamente inestable. Probablemente conozcan esta razón cuando cada literalmente cada segundo captura de pantalla, cada segundo commit, tiene algún ruido de regresión visual y como todos somos humanos y nos estamos acostumbrando a esto, comenzamos a ignorarlo, aprobarlo automáticamente y así sucesivamente. Y esto es un problema porque una vez que se vuelve inestable, pierde el valor. Así que hoy, me gustaría abordar este problema adentrándome en la regresión visual, los problemas ocultos y tratar de obtener este conocimiento y utilizarlo para construir una regresión visual más confiable. Así que bajo la superficie de la regresión visual siempre hay cuatro pasos simples. En primer lugar, debes cargar una página, luego debes tomar una captura de pantalla, compararla con la versión aprobada anterior y ver la diferencia. Parece bastante fácil, pero cada uno de estos pasos tiene sus propios problemas ocultos y me gustaría discutirlos. Así que primero, debes cargar la página, pero no es suficiente cargar la página usando tu ejecutor de pruebas basado en navegador favorito como Cypress, ¿verdad? Necesitas hacer que esta página sea predecible, y esto es un problema especialmente cuando no estás utilizando servicios de regresión visual, porque cuando tu página no está en un estado estable puedes obtener fácilmente mucho ruido, como por ejemplo, aquí. La mayoría de las capturas de pantalla tienen secciones que cambian de vez en cuando, como los videos incrustados o el carrusel que cambia por tiempo, y todo esto puede romper fácilmente el proceso de regresión visual. Además, las animaciones, los tiempos, los valores aleatorios pueden romper esto fácilmente, así que debemos tener cuidado con esto, pero eso no es todo de lo que debemos preocuparnos. También es posible que haya diferentes interfaces de usuario incluso cuando estás ejecutando el mismo código, pero en diferentes sistemas operativos o navegadores. Simplemente porque los diferentes sistemas de diseño o el propio sistema operativo pueden producir cambios en el diseño o una vista predeterminada diferente, por lo que esto romperá nuestro código. Y este es un problema real, que se resuelve perfectamente con los servicios de regresión visual, pero presenta muchos problemas para las personas que intentan hacer la regresión visual por sí mismas. Los servicios de regresión visual resuelven esto cargando tu HTML, y no la captura de pantalla, sino el HTML, ejecutando este HTML con todos los estilos en el navegador especificado, y solo allí tomando una captura de pantalla y comparándola. Pero puedes obtener el mismo nivel de predecibilidad ejecutando todas tus tareas y solo ejecutando tus tareas de regresión visual en Docker. Incluso puede ser razonable hacer una cantidad específica de tareas separadas solo para la regresión visual y ejecutarlas solo en Docker, incluso aprobarlas en Docker. Y esto te dará confianza de que tus tareas se están ejecutando en el mismo entorno y no generan mucho ruido y cambios en el diseño entre las máquinas locales de los desarrolladores. Pero también hay un enfoque interesante entre estas dos opciones. Existe un proyecto llamado Visual Regression Tracker que te permite ejecutar estas tareas dentro de Docker en un servicio autohospedado, te brinda una interfaz que te permite aprobar la captura de pantalla y te brinda el mismo nivel de predecibilidad que los servicios de regresión visual, pero autohospedado. Estoy seguro de que este proyecto será el futuro de la regresión visual. Pero luego necesitas tomar una captura de pantalla, ¿verdad? Pero ¿cuál? Y aquí está el problema, porque constantemente veo, especialmente en la comunidad de Cypress, que la gente está usando la resolución predeterminada de Cypress, o alguna resolución pequeña que honestamente no usa nadie en el mundo, ¿verdad? Necesitamos asegurarnos de que estamos probando nuestra interfaz de usuario en las resoluciones que utilizan nuestros usuarios. Puedes obtener fácilmente esta información de cualquier herramienta de análisis. Por ejemplo, aquí están las estadísticas de mi sitio web personal, y puedes ver que la mayoría de mis usuarios están utilizando esta extraña resolución de algunas tabletas, y honestamente, no estoy probando mi sitio web en esta resolución, y probablemente sabes lo fácil que es perder algunos efectos visuales cuando esta resolución no es ampliamente popular o es demasiado grande, por ejemplo, y necesitas asegurarte de que estás probando en esta resolución que utilizan tus usuarios, y en realidad es extraño que por defecto, las herramientas y servicios de aplicaciones visuales no utilicen las resoluciones más populares, como por ejemplo, Full HD. Y la razón de esto es que la comparación de capturas de pantalla es realmente lenta. Para comparar dos imágenes con una resolución Full HD, necesitas iterar sobre 2 millones de píxeles, calcular la diferencia entre cada uno utilizando una fórmula especializada y luego guardar la diferencia. Es una tarea bastante difícil y que no es amigable con el rendimiento para las computadoras, especialmente cuando intentas hacer esto en JavaScript. Y por eso creé y actualmente estoy trabajando en la biblioteca llamada Odiff que te permite hacer la comparación de imágenes no en JavaScript, sino en un lenguaje nativo más eficiente en términos de rendimiento y te ahorra mucho tiempo y te permite probar las capturas de pantalla que deseas y hacerlo rápidamente. Así que probablemente se nos acabe el tiempo. Así que discutamos una conclusión y la clave para una regresión visual sin problemas. Necesitas asegurarte de que tus tareas se ejecuten en el mismo entorno y debes asegurarte de que no haya contenido inestable en tu página, incluso si estás utilizando servicios de regresión visual. Y también debes probar tu interfaz de usuario en la resolución que utilizan tus usuarios y no solo en una resolución rápida o amigable para algún servicio. Y eso es todo. Estoy feliz de estar aquí. ¡Gracias y adiós!

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Solicitudes de Red con Cypress
TestJS Summit 2021TestJS Summit 2021
33 min
Solicitudes de Red con Cypress
Top Content
Cecilia Martinez, a technical account manager at Cypress, discusses network requests in Cypress and demonstrates commands like cydot request and SCI.INTERCEPT. She also explains dynamic matching and aliasing, network stubbing, and the pros and cons of using real server responses versus stubbing. The talk covers logging request responses, testing front-end and backend API, handling list length and DOM traversal, lazy loading, and provides resources for beginners to learn Cypress.
Pruebas de ciclo completo con Cypress
TestJS Summit 2022TestJS Summit 2022
27 min
Pruebas de ciclo completo con Cypress
Top Content
Cypress is a powerful tool for end-to-end testing and API testing. It provides instant feedback on test errors and allows tests to be run inside the browser. Cypress enables testing at both the application and network layers, making it easier to reach different edge cases. With features like AppActions and component testing, Cypress allows for comprehensive testing of individual components and the entire application. Join the workshops to learn more about full circle testing with Cypress.
Desarrollo Efectivo de Pruebas
TestJS Summit 2021TestJS Summit 2021
31 min
Desarrollo Efectivo de Pruebas
Top Content
This Talk introduces Test Effective Development, a new approach to testing that aims to make companies more cost-effective. The speaker shares their personal journey of improving code quality and reducing bugs through smarter testing strategies. They discuss the importance of finding a balance between testing confidence and efficiency and introduce the concepts of isolated and integrated testing. The speaker also suggests different testing strategies based on the size of the application and emphasizes the need to choose cost-effective testing approaches based on the specific project requirements.
Playwright Test Runner
TestJS Summit 2021TestJS Summit 2021
25 min
Playwright Test Runner
Top Content
The Playwright Test Runner is a cross-browser web testing framework that allows you to write tests using just a few lines of code. It supports features like parallel test execution, device emulation, and different reporters for customized output. Code-Gen is a new feature that generates code to interact with web pages. Playwright Tracing provides a powerful tool for debugging and analyzing test actions, with the ability to explore trace files using TraceViewer. Overall, Playwright Test offers installation, test authoring, debugging, and post-mortem debugging capabilities.
Todos pueden escribir pruebas fácilmente
TestJS Summit 2023TestJS Summit 2023
21 min
Todos pueden escribir pruebas fácilmente
Playwright is a reliable end-to-end testing tool for modern web apps that provides one API, full isolation, fast execution, and supports multiple languages. It offers features like auto-weighting, retrying assertions, seamless testing of iframes and shadow DOM, test isolation, parallelism, and scalability. Playwright provides tools like VS Code extension, UiMode, and Trace Viewer for writing, debugging, and running tests. Effective tests prioritize user-facing attributes, use playwright locators and assertions, and avoid testing third-party dependencies. Playwright simplifies testing by generating tests, providing code generation and UI mode, and allows for easy running and debugging of tests. It helps in fixing failed tests and analyzing DOM changes, fixing locator mismatches, and scaling tests. Playwright is open source, free, and continuously growing.

Workshops on related topic

Diseñando Pruebas Efectivas con la Biblioteca de Pruebas de React
React Summit 2023React Summit 2023
151 min
Diseñando Pruebas Efectivas con la Biblioteca de Pruebas de React
Top Content
Featured Workshop
Josh Justice
Josh Justice
La Biblioteca de Pruebas de React es un gran marco para las pruebas de componentes de React porque responde muchas preguntas por ti, por lo que no necesitas preocuparte por esas preguntas. Pero eso no significa que las pruebas sean fáciles. Todavía hay muchas preguntas que tienes que resolver por ti mismo: ¿Cuántas pruebas de componentes debes escribir vs pruebas de extremo a extremo o pruebas de unidad de nivel inferior? ¿Cómo puedes probar una cierta línea de código que es difícil de probar? ¿Y qué se supone que debes hacer con esa persistente advertencia de act()?
En esta masterclass de tres horas, presentaremos la Biblioteca de Pruebas de React junto con un modelo mental de cómo pensar en el diseño de tus pruebas de componentes. Este modelo mental te ayudará a ver cómo probar cada bit de lógica, si debes o no simular dependencias, y ayudará a mejorar el diseño de tus componentes. Te irás con las herramientas, técnicas y principios que necesitas para implementar pruebas de componentes de bajo costo y alto valor.
Tabla de contenidos- Los diferentes tipos de pruebas de aplicaciones de React, y dónde encajan las pruebas de componentes- Un modelo mental para pensar en las entradas y salidas de los componentes que pruebas- Opciones para seleccionar elementos DOM para verificar e interactuar con ellos- El valor de los mocks y por qué no deben evitarse- Los desafíos con la asincronía en las pruebas de RTL y cómo manejarlos
Requisitos previos- Familiaridad con la construcción de aplicaciones con React- Experiencia básica escribiendo pruebas automatizadas con Jest u otro marco de pruebas unitarias- No necesitas ninguna experiencia con la Biblioteca de Pruebas de React- Configuración de la máquina: Node LTS, Yarn
Cómo empezar con Cypress
TestJS Summit 2022TestJS Summit 2022
146 min
Cómo empezar con Cypress
Featured WorkshopFree
Filip Hric
Filip Hric
La web ha evolucionado. Finalmente, también lo ha hecho el testing. Cypress es una herramienta de testing moderna que responde a las necesidades de testing de las aplicaciones web modernas. Ha ganado mucha popularidad en los últimos años, obteniendo reconocimiento a nivel mundial. Si has estado esperando aprender Cypress, ¡no esperes más! Filip Hric te guiará a través de los primeros pasos sobre cómo empezar a usar Cypress y configurar tu propio proyecto. La buena noticia es que aprender Cypress es increíblemente fácil. Escribirás tu primer test en poco tiempo y luego descubrirás cómo escribir un test de extremo a extremo completo para una aplicación web moderna. Aprenderás conceptos fundamentales como la capacidad de reintentar. Descubre cómo trabajar e interactuar con tu aplicación y aprende cómo combinar pruebas de API y de UI. A lo largo de todo este masterclass, escribiremos código y realizaremos ejercicios prácticos. Saldrás con una experiencia práctica que podrás aplicar a tu propio proyecto.
Cómo Resolver Problemas del Mundo Real con Remix
Remix Conf Europe 2022Remix Conf Europe 2022
195 min
Cómo Resolver Problemas del Mundo Real con Remix
Featured Workshop
Michael Carter
Michael Carter
- ¿Errores? Cómo renderizar y registrar tus errores del servidor y del clientea - Cuándo devolver errores vs lanzar excepcionesb - Configurar servicios de registro como Sentry, LogRocket y Bugsnag- ¿Formularios? Cómo validar y manejar formularios de varias páginasa - Usar zod para validar los datos del formulario en tu acciónb - Pasar por formularios de varias páginas sin perder datos- ¿Atascado? Cómo solucionar errores o funciones faltantes en Remix para que puedas continuara - Usar patch-package para solucionar rápidamente tu instalación de Remixb - Mostrar herramienta para gestionar múltiples parches y seleccionar solicitudes de extracción abiertas- ¿Usuarios? Cómo manejar aplicaciones de varios inquilinos con Prismaa - Determinar el inquilino por el host o por el usuariob - Base de datos múltiples o base de datos única/múltiples esquemasc - Asegura que los datos del inquilino siempre estén separados de los demás
Detox 101: Cómo escribir pruebas de extremo a extremo estables para su aplicación React Native
React Summit 2022React Summit 2022
117 min
Detox 101: Cómo escribir pruebas de extremo a extremo estables para su aplicación React Native
Top Content
WorkshopFree
Yevheniia Hlovatska
Yevheniia Hlovatska
A diferencia de las pruebas unitarias, las pruebas de extremo a extremo buscan interactuar con su aplicación tal como lo haría un usuario real. Y como todos sabemos, puede ser bastante desafiante. Especialmente cuando hablamos de aplicaciones móviles.
Las pruebas dependen de muchas condiciones y se consideran lentas e inestables. Por otro lado, las pruebas de extremo a extremo pueden dar la mayor confianza de que su aplicación está funcionando. Y si se hace correctamente, puede convertirse en una herramienta increíble para aumentar la velocidad del desarrollador.
Detox es un marco de pruebas de extremo a extremo en caja gris para aplicaciones móviles. Desarrollado por Wix para resolver el problema de la lentitud e inestabilidad y utilizado por React Native en sí como su herramienta de pruebas E2E.
Únete a mí en esta masterclass para aprender cómo hacer que tus pruebas de extremo a extremo móviles con Detox sean excelentes.
Prerrequisitos- iOS/Android: MacOS Catalina o más reciente- Solo Android: Linux- Instalar antes de la masterclass
Masterclass de Pruebas de API con Postman
TestJS Summit 2023TestJS Summit 2023
48 min
Masterclass de Pruebas de API con Postman
Top Content
WorkshopFree
Pooja Mistry
Pooja Mistry
En el panorama siempre en evolución del desarrollo de software, garantizar la fiabilidad y funcionalidad de las API se ha vuelto primordial. "Pruebas de API con Postman" es una masterclass completa diseñada para equipar a los participantes con los conocimientos y habilidades necesarios para sobresalir en las pruebas de API utilizando Postman, una herramienta poderosa ampliamente adoptada por profesionales en el campo. Esta masterclass profundiza en los fundamentos de las pruebas de API, avanza a técnicas de prueba avanzadas y explora la automatización, las pruebas de rendimiento y el soporte multiprotocolo, proporcionando a los asistentes una comprensión holística de las pruebas de API con Postman.
Únete a nosotros para esta masterclass para desbloquear todo el potencial de Postman para las pruebas de API, agilizar tus procesos de prueba y mejorar la calidad y fiabilidad de tu software. Ya seas un principiante o un probador experimentado, esta masterclass te equipará con las habilidades necesarias para sobresalir en las pruebas de API con Postman.
Monitoreo 101 para Desarrolladores de React
React Summit US 2023React Summit US 2023
107 min
Monitoreo 101 para Desarrolladores de React
Top Content
WorkshopFree
Lazar Nikolov
Sarah Guthals
2 authors
Si encontrar errores en tu proyecto frontend es como buscar una aguja en un pajar de código, entonces el monitoreo de errores de Sentry puede ser tu detector de metales. Aprende los conceptos básicos del monitoreo de errores con Sentry. Ya sea que estés ejecutando un proyecto de React, Angular, Vue, o simplemente JavaScript “vainilla”, mira cómo Sentry puede ayudarte a encontrar el quién, qué, cuándo y dónde detrás de los errores en tu proyecto frontend.
Nivel de la masterclass: Intermedio