Pruebas automatizadas de videojuegos sin SDK: Unity, Unreal, Godot
Pruebas automatizadas de videojuegos sin SDK en el build: pruebe menús, HUD y niveles de un juego de Unity, Unreal o Godot con teclado, ratón y mando reales.
11 min de lecturaPor el equipo de GUI Test Studio
¿Qué son las pruebas automatizadas de videojuegos?
Las pruebas automatizadas de videojuegos consisten en dejar que un programa juegue partes de su juego y compruebe lo que ocurre, para que cada build nuevo se verifique sin que una persona repita los mismos pasos a mano.Cubren la parte repetible del QA de un juego: iniciar el build, recorrer los menús, cargar un nivel, pausar, terminar el nivel, comprobar la puntuación.
Automatizar las pruebas de un juego es más difícil que probar un sitio web o una aplicación de negocio.Un juego lo dibuja todo él mismo.Lo que hace el jugador cambia lo que ocurre después.Dos partidas rara vez son idénticas, fotograma a fotograma.
Esta guía explica por qué las herramientas de prueba habituales no ven nada dentro de un juego, qué usan en su lugar los equipos de videojuegos y cómo un enfoque visual, de caja negra, prueba un juego de Unity, Unreal, Godot o de un motor propio sin añadir nada a su build.
Por qué las herramientas de prueba no ven nada dentro de un juego
Las herramientas de prueba de escritorio y web encuentran los elementos a través de la descripción que una aplicación da de sí misma.Una página web tiene su documento, sus elementos y sus identificadores.Un programa de Windows describe sus botones, campos y listas al sistema: es el árbol de accesibilidad que usan los lectores de pantalla.Selenium y Playwright encuentran los elementos en la estructura de la página web.WinAppDriver y Appium los encuentran en lo que una aplicación le dice al sistema sobre sus controles, como un identificador de automatización.
Un juego no da nada de eso.El motor abre una sola ventana y dibuja cada fotograma en una sola superficie, normalmente con la tarjeta gráfica.El menú principal, el inventario, el HUD y los cuadros de diálogo son píxeles, no controles.Pregunte a Windows qué hay dentro de la ventana, y la respuesta es un solo panel sin nombre.
Si está eligiendo una herramienta end-to-end para sus otras aplicaciones, consulte el estudio comparativo.
Cómo automatizan hoy las pruebas los equipos de videojuegos
La mayoría de los estudios confían primero en las personas.Testers y playtesters recorren cada build, siguen planes de prueba y redactan informes de errores.El playtesting sigue siendo esencial: solo una persona puede decir si un salto se siente bien o si un combate contra un jefe es justo.Aun así, buena parte de la jornada de un tester se va en comprobar, otra vez, que lo que funcionaba ayer sigue funcionando hoy.
Para automatizar esa parte, la automatización del QA de videojuegos suele instrumentar el juego: el equipo añade código o un plugin al build, para que una prueba alcance los objetos del motor desde dentro.
Automatización de pruebas en Unity
El Unity Test Framework permite a un equipo escribir pruebas en C#, con NUnit, en Edit Mode y en Play Mode.Las pruebas se ejecutan en el editor o en plataformas de destino como Standalone, Android e iOS.
Pruebas automatizadas en Unreal Engine
Unreal Engine tiene un framework de pruebas automatizadas escrito en C++, con pruebas unitarias, de funcionalidad, de humo, de estrés del contenido y de comparación de capturas de pantalla.Gauntlet, el framework de automatización de Unreal, ejecuta sesiones de un proyecto que realizan pruebas y validan los resultados.
Pruebas en Godot
Los equipos de Godot suelen añadir un complemento de pruebas.GUT es un framework de pruebas unitarias para el motor Godot.GdUnit4 prueba GDScript, C# y escenas en el editor de Godot, y su ejecutor de escenas puede simular entradas.
Herramientas que se conectan dentro del juego
AltTester ofrece automatización de pruebas para Unity y Unreal Engine.Su SDK es un plugin que instrumenta el juego para exponer los objetos de su jerarquía.Las pruebas se escriben en C#, Python, Java o Robot Framework.
GameDriver funciona con juegos creados con Unity, Unreal Engine y Godot.Se coloca su agente en el proyecto, y las pruebas encuentran los objetos con HierarchyPath, un lenguaje de consulta parecido a XPath.
Airtest es un framework de código abierto para juegos y aplicaciones que localiza los elementos por reconocimiento de imagen, desde scripts de Python.Su complemento, Poco, lee la jerarquía de objetos del juego una vez instalado el SDK de Poco en el juego.
Estas herramientas destacan cuando una prueba necesita el estado interno del juego: una propiedad, una posición, un valor que nadie ve.También tienen costes fáciles de subestimar.
| Lo que exige | Lo que supone para el equipo |
|---|---|
| Código o un plugin en el build | Un build de prueba que producir y mantener al día con el que se publica. |
| Pruebas escritas en código | Un desarrollador escribe y mantiene cada prueba. |
| Nombres y rutas de objetos | Un objeto renombrado o una escena reorganizada rompe las pruebas que lo nombran. |
| Una integración para su motor | Un motor propio, o un motor que la herramienta no cubre, no ofrece nada donde conectarse. |
| Una vista desde dentro | Una comprobación del estado de un objeto dice lo que contiene el código, que no siempre es lo que ve el jugador. |
Lo que aporta un enfoque visual, de caja negra
Una prueba de caja negra solo ve el juego desde fuera, como un jugador: la imagen en la pantalla y los controles en la mano.No necesita acceso al código, así que funciona igual con cualquier motor.
Grabar
Jugar el recorrido una vez
Comprobar
El HUD, los menús, las pantallas finales
Reproducir
Teclado, ratón y mando
Informe
Lo esperado, lo dibujado
| Lo que obtiene | Por qué importa en los videojuegos |
|---|---|
| Nada en el build | Se prueba el build publicado, el que descargan sus jugadores. |
| Cualquier motor | Unity, Unreal Engine, Godot, GameMaker, Construct, Defold, Phaser, MonoGame, RPG Maker o un motor propio. |
| Entradas reales | Teclado, ratón y mando, usados como los usa un jugador. |
| Comprobaciones de lo que se dibuja | Un icono incorrecto, un corazón que falta o una etiqueta cortada hacen fallar la prueba, aunque el estado del juego sea correcto. |
| Pruebas sin código | Un tester de QA graba la prueba jugando, sin script que escribir. |
| Cada build | La misma prueba se ejecuta en cada build nuevo, a mano o en su pipeline de CI. |
Los dos enfoques no son rivales.Una prueba instrumentada es la herramienta adecuada para preparar una partida guardada o leer un valor que nadie ve.Una prueba de caja negra es la herramienta adecuada para comprobar que lo que llega al jugador es correcto.
Qué automatizar en un juego y qué dejar a las personas
Sea honesto sobre lo que una reproducción hace bien.Pulsa las mismas teclas en los mismos momentos.Un juego cuyo resultado depende de la física, del azar o de una sincronización exacta no siempre responde igual, así que una prueba grabada de un tramo de plataformas difícil puede fallar sin una razón real.
| Parte del juego | ¿Conviene automatizarla? |
|---|---|
| Arranque, pantalla de título y menú principal | Sí.Son iguales en cada partida. |
| Opciones: gráficos, sonido, controles, idioma | Sí.Cada cambio se ve como un valor o una etiqueta en la pantalla. |
| Pantallas de pausa, inventario, tienda, diálogo y tutorial | Sí. |
| El HUD: puntuación, vidas, monedas, temporizador | Sí, en los momentos que el juego hace repetibles. |
| Guardar y cargar, selección de nivel, nivel completado | Sí. |
| Un nivel con semilla fija o un recorrido guionizado | Sí, cuando el juego se desarrolla igual cada vez. |
| Juego de reflejos, puzles de física, enemigos que reaccionan al jugador | Pocas veces.Los resultados varían de una partida a otra. |
| Diversión, sensaciones, dificultad y equilibrio | No.Eso exige el criterio de una persona. |
¿Cómo se prueban el HUD, los menús y las pantallas finales de un juego?
Una comprobación mira una parte de la pantalla y dice si es correcta.Así se colocan las comprobaciones en un juego 2D de ejemplo, dibujado para este artículo.
Cuente las vidas con una aserción de recuento visual: exactamente tres corazones.Lea una etiqueta fija, o un valor que el nivel siempre alcanza, con una aserción de texto.Compruebe un valor que cambia con una aserción de texto dinámico: el temporizador debe tener forma de hora, sea cual sea la hora que muestre.
En un menú, una aserción de texto lee el título.Una aserción visual compara el elemento seleccionado con su imagen, así que un resaltado del color incorrecto falla.Las indicaciones de botones de abajo también son una imagen, y el icono incorrecto para un mando es un error real.
Al final de un nivel, una aserción de texto espera las palabras «LEVEL COMPLETE».Una aserción de recuento visual cuenta las estrellas.Una aserción de texto dinámico comprueba que la puntuación final es un número, y una aserción visual encuentra el botón Next Level.
Cada comprobación espera lo que busca hasta su tiempo de espera, así que un menú que aparece con un fundido no es un fallo.Una aserción de ausencia visual espera a que desaparezca una pantalla de carga, así que la prueba continúa en cuanto el nivel está listo.
Cada tipo de comprobación se explica en Comprobaciones visuales y Comprobaciones de texto.El juego se encuentra a la vista, porque no tiene información de accesibilidad: cómo encuentra GUI Test Studio los elementos explica por qué eso hace robusta una prueba.
Teclado, ratón y mando
Una prueba de videojuego vale lo que valen sus entradas.GUI Test Studio graba y reproduce el teclado, el ratón y los mandos de tipo Xbox, los que Windows ve como mandos XInput, hasta cuatro a la vez.
Cada pulsación de botón y cada movimiento de palanca se graban con su sincronización.En la línea de tiempo, una pulsación y su liberación se convierten en un bloque Pulsación del mando, y una serie de movimientos de palanca en un bloque Mover palanca.Mientras edita, la vista previa dibuja el mando y lo que tiene pulsado en cada momento.
Cuando se ejecuta la prueba, GUI Test Runner-Recorder maneja un mando virtual, así que el juego recibe las pulsaciones de un mando.Eso requiere un controlador instalado una vez en el equipo que ejecuta las pruebas.La aplicación lo avisa antes de la ejecución y abre la página de descarga del controlador.
Cada pulsación grabada recibe además una comprobación de toda la pantalla, tomada justo antes.En una escena que se mueve mucho, ponga esas comprobaciones en Flexible, o sustituya una por una comprobación de la parte que importa.
| Evento | En un juego |
|---|---|
| Mantener tecla | Mantener la flecha derecha dos segundos para correr hasta la siguiente plataforma. |
| Pulsación repetida | Pulsar dos veces la tecla de salto para un doble salto. |
| Atajo de teclado | Abrir el mapa, hacer un guardado rápido, tomar una captura de pantalla. |
| Escribir texto | Escribir un nombre de jugador o un código de trucos en un build de depuración. |
| Trazado del ratón | Apuntar, dibujar un camino, arrastrar una unidad por el mapa. |
| Pulsación del mando y Mover palanca | Confirmar en un menú, saltar, caminar o girar la cámara. |
Para un juego que apunta o mira alrededor con el ratón, active Grabar el movimiento continuo del ratón en las Preferencias de GUI Test Runner-Recorder, en Grabación predeterminada, Avanzado.Así se graba y reproduce cada movimiento, con un botón pulsado o sin él.Todos los eventos se describen en Eventos.
Automatización de pruebas de videojuegos con GUI Test Studio, paso a paso
GUI Test Studio automatiza pruebas end-to-end en Windows: aplicaciones de escritorio, aplicaciones web, teléfonos y videojuegos.Así se monta una primera prueba de un juego.
- 1
Instalarlo y elegir su perfil
Instale GUI Test Studio en el equipo Windows que ejecuta su juego.La primera vez que se inicia, pregunta en qué trabaja: elija Desarrollador de videojuegos.Así el mando se graba y se reproduce desde el principio, y la configuración recomendada se adapta a pantallas que se mueven.
- 2
Grabar su juego
En GUI Test Runner-Recorder, haga clic en Grabar y elija Una aplicación.Haga clic en Examinar... para elegir el programa de su juego, y marque la casilla que inicia la aplicación al principio de la prueba y la cierra al final.Así cada ejecución parte de un juego recién iniciado.
Para vigilar solo una parte de la pantalla, como la vista del juego dentro de un editor, elija en su lugar un área de la pantalla.
- 3
Jugar el recorrido que quiere comprobar
Recorra los menús, inicie el nivel, haga aquello de lo que trata la prueba y pulse la tecla de detener.La grabación añade una comprobación antes de cada clic, y comprobaciones de lo que aparece en la pantalla.
- 4
Añadir las comprobaciones que importan
Abra la prueba en GUI Test Studio.Arrastre una aserción de recuento visual, una aserción de texto o una aserción de texto dinámico desde la paleta Aserciones hasta el momento que quiera, y dibuje dónde mira.
- 5
Ejecutarla y leer el informe
Haga clic en Ejecutar prueba.El informe de confianza muestra cada comprobación con la imagen esperada y la imagen encontrada, y dice con palabras sencillas qué falló.
Los videojuegos son uno de los casos de nuestra página de casos de uso, junto a las aplicaciones web, de escritorio y móviles.
Hacer que las pruebas de videojuegos sean repetibles
Una prueba de videojuego pasa siempre cuando el juego se inicia de la misma forma y las comprobaciones buscan lo correcto.Estos hábitos ayudan.
| Hábito | Por qué |
|---|---|
| Iniciar el build en un estado conocido | Un paso Ejecutar aplicación puede pasar argumentos al juego, como una opción de depuración que carga un nivel o fija la semilla aleatoria, si su juego tiene una. |
| La misma resolución y el mismo modo de ventana en cada ejecución | Las comprobaciones comparan imágenes al tamaño con que se grabaron.Un paso Ejecutar aplicación puede abrir el juego maximizado o a pantalla completa. |
| Esperar lo que espera el juego | Una aserción de ausencia visual sobre la pantalla de carga es mejor que una Espera fija. |
| Buscar en toda la pantalla lo que se mueve | Buscar en toda la pantalla encuentra un elemento dondequiera que se dibuje. |
| La exigencia Flexible para las escenas cargadas | Tolera las pequeñas diferencias de renderizado entre dos ejecuciones, y aun así falla ante un cambio real, como un elemento que falta. |
| Un perfil de línea base por ajuste gráfico | Las calidades Baja y Ultra dibujan el mismo menú de forma distinta, y cada perfil guarda sus propias imágenes esperadas. |
Los detalles están en Web, teléfonos, máquinas virtuales y videojuegos.
Pruebas de regresión de videojuegos en cada build
Las pruebas de regresión de videojuegos consisten en ejecutar las mismas comprobaciones en cada build nuevo, para que un menú roto o un elemento del HUD que falta se detecte el día en que aparece. gtr-cli, el ejecutor de línea de comandos, ejecuta una prueba exactamente como el botón Ejecutar prueba.Devuelve un código de salida que su herramienta de CI entiende, escribe resultados JUnit y reúne las imágenes de cada fallo en una sola carpeta.
gtr-cli run tests --countdown 0 --junit results\junit.xml --artifacts results\artifactsEl agente de build necesita una sesión de escritorio de Windows abierta y desbloqueada, porque el juego dibuja en una pantalla real y la prueba juega allí.
Un ejemplo completo de pipeline, con TeamCity: ejecute sus pruebas end-to-end en cada build.
Preguntas
¿Se pueden automatizar las pruebas de un juego sin añadirle un SDK?
Sí.Una prueba de caja negra ve el juego como un jugador: la imagen en la pantalla y los controles.GUI Test Studio juega al build publicado con teclado, ratón y mando reales y comprueba lo que se dibuja, así que no se añade nada al juego.
¿Qué motores de juego puede probar una herramienta de prueba visual?
Cualquier motor, porque la prueba parte de lo que muestra la pantalla.Unity, Unreal Engine, Godot, GameMaker, Construct, Defold, Phaser, MonoGame, RPG Maker y los motores propios se prueban todos igual, como build de Windows, build para navegador o build de Android en un teléfono.
¿Puede una prueba automatizada pulsar los botones de un mando?
Sí.GUI Test Studio graba mandos de tipo Xbox, hasta cuatro a la vez, y reproduce cada pulsación y cada movimiento de palanca a través de un mando virtual.Reproducir requiere un controlador instalado una vez en el equipo que ejecuta las pruebas.
¿Qué partes de un juego conviene automatizar?
Automatice lo que es igual en cada partida: menús, opciones, el HUD en momentos conocidos, pantallas de pausa e inventario, guardar y cargar, pantallas de nivel completado y niveles con semilla fija.Deje el juego de reflejos, la física, el azar y las sensaciones del juego a los playtesters.
¿Cómo se prueba automáticamente el HUD de un juego?
Dé a cada parte del HUD la comprobación que le corresponde.Una aserción de recuento visual cuenta corazones o estrellas, una aserción de texto lee una etiqueta fija, y una aserción de texto dinámico comprueba que un temporizador o una puntuación tienen la forma correcta, sea cual sea su valor.
¿Cuándo es mejor opción una herramienta instrumentada como AltTester o GameDriver?
Cuando una prueba debe leer o fijar el estado interno del juego: la propiedad de un objeto, una posición, un valor que nadie ve en la pantalla.Una prueba visual comprueba lo que llega al jugador, así que muchos equipos usan ambas.
Unity, Unreal Engine, Godot, GameMaker, Construct, Defold, Phaser, MonoGame, RPG Maker, AltTester, GameDriver, Airtest, Selenium, Playwright, Appium, WinAppDriver, Xbox, Windows y TeamCity son marcas comerciales de sus respectivos propietarios.
¿Listo para grabar su primera prueba?
Todas las funciones, durante 15 días.
¿Prefiere verlo con el tipo de aplicación que prueba?Reserve una llamada gratuita de 30 minutos con nuestro equipo.