11 / 05 / 2025
¡Nokorpo estuvo en Guadalindie! Nepo dió una charla sobre cómo aplicar técnicas de QA para mejorar la calidad de nuestros juegos. Este post tiene las slides y una recopilación de código, ejemplos y enlaces de referencia para ayudarte a empezar con el QA de tu juego.
Si necesitas ayuda con QA o automatización en tu equipo, ¡contáctanos!
Haz click en la imagen que ves a continuación para descargar las slides:
Estas son las slides de la charla. Siempre dejo algunas notas en la sección de “speaker notes” para acordarme de que tengo que decir algo. Pero la información importante está visible en la slide.
La estructura típica para escribir un test de integración es:
Un ejemplo de definición de un test podría ser:
Scenario: Player hit by ball
Given the player object
And the ball object
When the ball moves towards the player and hits it
Then the player detects the hit
And the player moves in the opposite direction from where the ball hit it
Y la implementación del mismo en GDScript, usando GUT:
func test_player_hit_by_ball() -> void:
#GIVEN
var test_scene: Node3D = add_child_autofree(_test_scene.instantiate())
var player: Player = test_scene.find_child("Player")
var original_player_position: Vector3 = player.global_position
watch_signals(player)
var ball: Ball = test_scene.find_child("Ball")
#WHEN
ball.velocity = Vector3(0, 0, 4)
await(wait_for_signal(player.player_hit_by_ball, 2, "wait for hit"))
# wait for hit animation to finish
await(wait_for_signal(player.player_hit_ended, 2, "wait for hit"))
#THEN
assert_signal_emitted(player, "player_hit_by_ball", "player didn't receive hit")
assert_almost_eq(player.velocity, Vector3(0, 5, 9), Vector3.ONE, "player was not pushed backwards")
En la charla hablé de los entornos de Integración Continua (CI, por las siglas en inglés). Aunque no pude entrar a explicarla en detalle, compartí la configuración de CI que usamos en jams. Esta hace la build web de un juego de Godot y la publicar directamente a Itch, todo con sólo pulsar un botón.
Puedes encontrar esa configuración en el repositorio de nuestro juego de jam Infinigrass.
Para entender este fichero, preparé unas imágenes que traducen lo que está haciendo:
Si quieres más información sobre cómo configurar Github para usar este script, escribí un post sobre cómo usarlo en mi blog. Es un tutorial para gente que esté usando un CI por primera vez, por lo que puedes usarlo para aprender más sobre cómo funciona un CI.
Si queréis probar la herramienta de Screenshot testing para Godot que hemos creado, lo podéis hacer aquí: GDSnap en Github.
Estamos pendientes de que lo acepten en la Asset Library de Godot. En cuanto lo revisen, añadiremos el enlace en este post.
Tiene licencia MIT, por lo que podéis hacer lo que queráis con el proyecto. Sería bonito ver que se hacen versiones para otros motores :)
Si os interesa informaros más sobre QA y testing, os dejo algunos enlaces que os pueden interesar:
Y si necesitas ayuda configurando esto para tu equipo, ¡ponte en contacto!