Test automatisé de jeux vidéo sans SDK : Unity, Unreal, Godot
Test automatisé de jeux vidéo sans SDK dans le build : testez menus, HUD et niveaux d'un jeu Unity, Unreal ou Godot au clavier, à la souris et à la manette.
11 min de lecturePar l'équipe de GUI Test Studio
Qu'est-ce que le test automatisé de jeux vidéo ?
Le test automatisé de jeux vidéo consiste à laisser un logiciel jouer des parties de votre jeu et contrôler ce qui se passe, pour que chaque nouveau build soit vérifié sans qu'une personne répète les mêmes gestes à la main.Il couvre la part répétitive de la QA d'un jeu : lancer le build, parcourir les menus, charger un niveau, mettre en pause, finir le niveau, contrôler le score.
Automatiser les tests d'un jeu est plus difficile que tester un site web ou une application métier.Un jeu dessine tout lui-même.Ce que fait le joueur change ce qui se passe ensuite.Deux parties sont rarement identiques, image par image.
Ce guide explique pourquoi les outils de test habituels ne voient rien dans un jeu, ce que les équipes de jeu utilisent à la place, et comment une approche visuelle, en boîte noire, teste un jeu Unity, Unreal, Godot ou d'un moteur maison sans rien ajouter à son build.
Pourquoi les outils de test ne voient rien dans un jeu
Les outils de test pour le bureau et le web trouvent les éléments grâce à la description qu'une application donne d'elle-même.Une page web a son document, ses éléments et leurs identifiants.Un programme Windows décrit ses boutons, ses champs et ses listes au système : c'est l'arbre d'accessibilité qu'utilisent les lecteurs d'écran.Selenium et Playwright trouvent les éléments dans la structure de la page web.WinAppDriver et Appium les trouvent dans ce qu'une application dit au système de ses contrôles, comme un identifiant d'automatisation.
Un jeu ne donne rien de tout cela.Le moteur ouvre une seule fenêtre et dessine chaque image sur une seule surface, le plus souvent avec la carte graphique.Le menu principal, l'inventaire, le HUD et les boîtes de dialogue sont des pixels, pas des contrôles.Demandez à Windows ce que contient la fenêtre, et la réponse est un seul panneau sans nom.
Si vous choisissez un outil de bout en bout pour vos autres applications, consultez l'étude comparative.
Comment les équipes de jeu automatisent leurs tests aujourd'hui
La plupart des studios comptent d'abord sur des personnes.Testeurs et testeurs de jeu parcourent chaque build, suivent des plans de test et rédigent des rapports de bogue.Le playtest reste essentiel : seule une personne peut dire si un saut est agréable ou si un combat de boss est juste.Pourtant, une bonne part de la journée d'un testeur sert à vérifier, encore une fois, que ce qui marchait hier marche toujours aujourd'hui.
Pour automatiser cette part, l'automatisation de la QA de jeux vidéo instrumente en général le jeu : l'équipe ajoute du code ou un plugin au build, pour qu'un test atteigne les objets du moteur de l'intérieur.
L'automatisation des tests Unity
Le Unity Test Framework permet à une équipe d'écrire des tests en C#, avec NUnit, en Edit Mode et en Play Mode.Les tests s'exécutent dans l'éditeur ou sur des plateformes cibles comme Standalone, Android et iOS.
Les tests automatisés dans Unreal Engine
Unreal Engine dispose d'un framework de tests automatisés écrit en C++, avec des tests unitaires, de fonctionnalité, de fumée, de charge du contenu et de comparaison de captures d'écran.Gauntlet, le framework d'automatisation d'Unreal, exécute des sessions d'un projet qui effectuent des tests et en valident les résultats.
Les tests dans Godot
Les équipes Godot ajoutent souvent un module de test.GUT est un framework de tests unitaires pour le moteur Godot.GdUnit4 teste du GDScript, du C# et des scènes dans l'éditeur Godot, et son exécuteur de scènes peut simuler des entrées.
Les outils qui se branchent dans le jeu
AltTester propose l'automatisation des tests pour Unity et Unreal Engine.Son SDK est un plugin qui instrumente le jeu pour exposer les objets de sa hiérarchie.Les tests s'écrivent en C#, Python, Java ou Robot Framework.
GameDriver fonctionne avec les jeux créés avec Unity, Unreal Engine et Godot.Vous déposez son agent dans le projet, et les tests trouvent les objets avec HierarchyPath, un langage de requête proche de XPath.
Airtest est un framework open source pour les jeux et les applications qui localise les éléments par reconnaissance d'image, depuis des scripts Python.Son compagnon, Poco, lit la hiérarchie d'objets du jeu une fois le SDK Poco installé dans le jeu.
Ces outils sont forts quand un test a besoin de l'état interne du jeu : une propriété, une position, une valeur que personne ne voit.Ils ont aussi des coûts faciles à sous-estimer.
| Ce que cela demande | Ce que cela signifie pour l'équipe |
|---|---|
| Du code ou un plugin dans le build | Un build de test à produire et à garder au même niveau que celui que vous livrez. |
| Des tests écrits en code | Un développeur écrit et maintient chaque test. |
| Des noms et des chemins d'objets | Un objet renommé ou une scène réorganisée casse les tests qui le nomment. |
| Une intégration pour votre moteur | Un moteur maison, ou un moteur que l'outil ne couvre pas, n'offre rien où se brancher. |
| Une vue de l'intérieur | Un contrôle de l'état d'un objet dit ce que contient le code, qui n'est pas toujours ce que voit le joueur. |
Ce qu'apporte une approche visuelle, en boîte noire
Un test en boîte noire ne voit le jeu que de l'extérieur, comme un joueur : l'image à l'écran et les commandes en main.Il n'a pas besoin d'accéder au code, si bien qu'il fonctionne de la même façon avec tous les moteurs.
Enregistrer
Jouer le parcours une fois
Vérifier
Le HUD, les menus, les écrans de fin
Rejouer
Clavier, souris et manette
Rapport
Ce qui était attendu, ce qui a été dessiné
| Ce que vous obtenez | Pourquoi c'est important pour les jeux |
|---|---|
| Rien dans le build | Vous testez le build livré, celui que vos joueurs téléchargent. |
| N'importe quel moteur | Unity, Unreal Engine, Godot, GameMaker, Construct, Defold, Phaser, MonoGame, RPG Maker ou votre propre moteur. |
| De vraies entrées | Clavier, souris et manette, utilisés comme un joueur les utilise. |
| Des assertions sur ce qui est dessiné | Une mauvaise icône, un cœur manquant ou un libellé coupé fait échouer le test, même quand l'état du jeu est correct. |
| Des tests sans code | Un testeur QA enregistre le test en jouant, sans script à écrire. |
| Chaque build | Le même test s'exécute sur chaque nouveau build, à la main ou dans votre pipeline CI. |
Les deux approches ne sont pas rivales.Un test instrumenté est le bon outil pour préparer une sauvegarde ou lire une valeur que personne ne voit.Un test en boîte noire est le bon outil pour vérifier que ce qui arrive au joueur est correct.
Ce qu'il faut automatiser dans un jeu, et ce qu'il faut laisser aux personnes
Soyez honnête sur ce qu'un rejeu fait bien.Il appuie sur les mêmes touches aux mêmes moments.Un jeu dont le résultat dépend de la physique, du hasard ou d'un timing précis ne répond pas toujours de la même façon, si bien qu'un test enregistré d'un passage de plateforme difficile peut échouer sans vraie raison.
| Partie du jeu | Faut-il l'automatiser ? |
|---|---|
| Démarrage, écran titre et menu principal | Oui.Ils sont identiques à chaque partie. |
| Options : graphismes, son, commandes, langue | Oui.Chaque changement se voit comme une valeur ou un libellé à l'écran. |
| Écrans de pause, d'inventaire, de boutique, de dialogue et de tutoriel | Oui. |
| Le HUD : score, vies, pièces, chronomètre | Oui, aux moments que le jeu rend reproductibles. |
| Sauvegarde et chargement, choix du niveau, niveau terminé | Oui. |
| Un niveau à graine fixe ou à parcours scripté | Oui, quand le jeu se déroule à chaque fois de la même façon. |
| Gameplay de réflexe, énigmes physiques, ennemis qui réagissent au joueur | Rarement.Les résultats varient d'une partie à l'autre. |
| Plaisir, sensations, difficulté et équilibrage | Non.Cela demande le jugement d'une personne. |
Comment tester le HUD, les menus et les écrans de fin d'un jeu ?
Une assertion regarde une partie de l'écran et dit si elle est correcte.Voici où placer les assertions sur un exemple de jeu 2D, dessiné pour cet article.
Comptez les vies avec une assertion de comptage visuel : exactement trois cœurs.Lisez un libellé fixe, ou une valeur que le niveau atteint toujours, avec une assertion de texte.Vérifiez une valeur qui change avec une assertion de texte dynamique : le chronomètre doit avoir la forme d'une heure, quelle que soit l'heure affichée.
Sur un menu, une assertion de texte lit le titre.Une assertion visuelle compare l'élément sélectionné à son image, si bien qu'une surbrillance de la mauvaise couleur échoue.Les aides des boutons en bas sont aussi une image, et la mauvaise icône pour une manette est un vrai bogue.
À la fin d'un niveau, une assertion de texte attend les mots « LEVEL COMPLETE ».Une assertion de comptage visuel compte les étoiles.Une assertion de texte dynamique vérifie que le score final est un nombre, et une assertion visuelle trouve le bouton Next Level.
Chaque assertion attend ce qu'elle cherche jusqu'à son délai d'attente, si bien qu'un menu qui apparaît en fondu n'est pas un échec.Une assertion d'absence visuelle attend qu'un écran de chargement ait disparu, si bien que le test continue dès que le niveau est prêt.
Chaque type d'assertion est expliqué dans Assertions visuelles et Assertions de texte.Le jeu est trouvé à vue, parce qu'il n'a pas d'informations d'accessibilité : comment GUI Test Studio trouve les éléments explique pourquoi cela rend un test robuste.
Clavier, souris et manette
Un test de jeu ne vaut que par ses entrées.GUI Test Studio enregistre et rejoue le clavier, la souris et les manettes de type Xbox, celles que Windows voit comme des manettes XInput, jusqu'à quatre à la fois.
Chaque appui sur un bouton et chaque mouvement de stick sont enregistrés avec leur timing.Sur la timeline, un appui et son relâchement deviennent un seul bloc Appui manette, et une suite de mouvements de stick un seul bloc Mouvement de stick.Pendant que vous éditez, l'aperçu dessine la manette et ce qu'elle tient à chaque instant.
Quand le test s'exécute, GUI Test Runner-Recorder pilote une manette virtuelle, si bien que le jeu reçoit les appuis d'une manette.Cela demande un pilote installé une fois sur l'ordinateur qui exécute les tests.L'application le signale avant l'exécution et ouvre la page de téléchargement du pilote.
Chaque appui enregistré reçoit aussi une assertion de l'écran entier, prise juste avant.Dans une scène qui bouge beaucoup, passez ces assertions en Souple, ou remplacez-en une par une assertion de la partie qui compte.
| Événement | Dans un jeu |
|---|---|
| Maintien de touche | Maintenir la flèche droite deux secondes pour courir jusqu'à la plateforme suivante. |
| Frappe répétée | Taper deux fois la touche de saut pour un double saut. |
| Raccourci clavier | Ouvrir la carte, faire une sauvegarde rapide, prendre une capture d'écran. |
| Saisie de texte | Taper un nom de joueur ou un code de triche sur un build de débogage. |
| Trajet souris | Viser, tracer un chemin, faire glisser une unité sur la carte. |
| Appui manette et Mouvement de stick | Valider dans un menu, sauter, marcher ou tourner la caméra. |
Pour un jeu qui vise ou regarde autour de lui avec la souris, activez Enregistrer le mouvement continu de la souris dans les Préférences de GUI Test Runner-Recorder, sous Enregistrement par défaut, Avancé.Chaque mouvement est alors enregistré et rejoué, bouton enfoncé ou non.Tous les événements sont décrits dans Événements.
L'automatisation des tests de jeux avec GUI Test Studio, pas à pas
GUI Test Studio automatise les tests de bout en bout sous Windows : applications de bureau, applications web, téléphones et jeux.Voici comment se construit un premier test de jeu.
- 1
L'installer et choisir votre profil
Installez GUI Test Studio sur l'ordinateur Windows qui exécute votre jeu.Au premier démarrage, il vous demande sur quoi vous travaillez : choisissez Développeur de jeux vidéo.La manette est alors enregistrée et rejouée dès le départ, et les réglages recommandés conviennent aux écrans qui bougent.
- 2
Enregistrer votre jeu
Dans GUI Test Runner-Recorder, cliquez sur Enregistrer et choisissez Une application.Cliquez sur Parcourir... pour choisir le programme de votre jeu, et cochez la case qui lance l'application au début du test et la ferme à la fin.Chaque exécution part alors d'un jeu tout juste lancé.
Pour ne surveiller qu'une partie de l'écran, comme la vue du jeu dans un éditeur, choisissez plutôt une zone de l'écran.
- 3
Jouer le parcours à vérifier
Parcourez les menus, lancez le niveau, faites ce dont parle le test, puis appuyez sur la touche Arrêter.L'enregistrement ajoute une assertion avant chaque clic, et des assertions pour ce qui apparaît à l'écran.
- 4
Ajouter les assertions qui comptent
Ouvrez le test dans GUI Test Studio.Faites glisser une assertion de comptage visuel, une assertion de texte ou une assertion de texte dynamique depuis la palette Assertions jusqu'au moment voulu, et dessinez l'endroit où elle regarde.
- 5
L'exécuter et lire le rapport
Cliquez sur Exécuter le test.Le rapport de confiance montre chaque assertion avec l'image attendue et l'image trouvée, et dit en mots simples ce qui a échoué.
Les jeux font partie des cas de notre page cas d'usage, à côté des applications web, de bureau et mobiles.
Rendre les tests de jeux reproductibles
Un test de jeu réussit à chaque fois quand le jeu démarre de la même façon et que les assertions cherchent les bonnes choses.Ces habitudes y aident.
| Habitude | Pourquoi |
|---|---|
| Démarrer le build dans un état connu | Une étape Lancer une application peut passer des arguments au jeu, comme une option de débogage qui charge un niveau ou fixe la graine aléatoire, si votre jeu en a une. |
| La même résolution et le même mode de fenêtre à chaque exécution | Les assertions comparent les images à la taille où elles ont été enregistrées.Une étape Lancer une application peut ouvrir le jeu agrandi ou en plein écran. |
| Attendre ce que le jeu attend | Une assertion d'absence visuelle sur l'écran de chargement vaut mieux qu'une Attente fixe. |
| Chercher sur tout l'écran ce qui bouge | Rechercher sur tout l'écran trouve un élément où qu'il soit dessiné. |
| La rigueur Souple pour les scènes chargées | Elle tolère les petites différences de rendu entre deux exécutions, et échoue toujours sur un vrai changement comme un élément manquant. |
| Un profil de référence par réglage graphique | Les qualités Basse et Ultra dessinent le même menu différemment, et chaque profil garde ses propres images attendues. |
Les détails sont dans Web, téléphones, machines virtuelles et jeux vidéo.
Les tests de régression de jeux à chaque build
Les tests de régression de jeux consistent à exécuter les mêmes assertions sur chaque nouveau build, pour qu'un menu cassé ou un élément manquant du HUD soit trouvé le jour où il apparaît. gtr-cli, l'exécuteur en ligne de commande, exécute un test exactement comme le bouton Exécuter le test.Il renvoie un code de sortie que votre outil de CI comprend, écrit des résultats JUnit et rassemble les images de chaque échec dans un seul dossier.
gtr-cli run tests --countdown 0 --junit results\junit.xml --artifacts results\artifactsL'agent de build a besoin d'une session de bureau Windows ouverte et déverrouillée, parce que le jeu dessine sur un vrai écran et que le test y joue.
Un exemple complet de pipeline, avec TeamCity : exécutez vos tests de bout en bout à chaque build.
Questions
Peut-on automatiser les tests d'un jeu sans ajouter de SDK au jeu ?
Oui.Un test en boîte noire voit le jeu comme un joueur : l'image à l'écran et les commandes.GUI Test Studio joue au build livré avec un vrai clavier, une vraie souris et une vraie manette, et vérifie ce qui est dessiné, si bien que rien n'est ajouté au jeu.
Quels moteurs de jeu un outil de test visuel peut-il tester ?
N'importe quel moteur, car le test part de ce que montre l'écran.Unity, Unreal Engine, Godot, GameMaker, Construct, Defold, Phaser, MonoGame, RPG Maker et les moteurs maison se testent tous de la même façon, en build Windows, en build pour navigateur ou en build Android sur un téléphone.
Un test automatisé peut-il appuyer sur les boutons d'une manette ?
Oui.GUI Test Studio enregistre les manettes de type Xbox, jusqu'à quatre à la fois, et rejoue chaque appui et chaque mouvement de stick par une manette virtuelle.Le rejeu demande un pilote installé une fois sur l'ordinateur qui exécute les tests.
Quelles parties d'un jeu faut-il automatiser ?
Automatisez ce qui est identique à chaque partie : les menus, les options, le HUD à des moments connus, les écrans de pause et d'inventaire, la sauvegarde et le chargement, les écrans de niveau terminé et les niveaux à graine fixe.Laissez le gameplay de réflexe, la physique, le hasard et les sensations de jeu aux testeurs de jeu.
Comment tester automatiquement le HUD d'un jeu ?
Donnez à chaque partie du HUD l'assertion qui lui convient.Une assertion de comptage visuel compte des cœurs ou des étoiles, une assertion de texte lit un libellé fixe, et une assertion de texte dynamique vérifie qu'un chronomètre ou un score a la bonne forme, quelle que soit sa valeur.
Quand un outil instrumenté comme AltTester ou GameDriver est-il le meilleur choix ?
Quand un test doit lire ou modifier l'état interne du jeu : la propriété d'un objet, une position, une valeur que personne ne voit à l'écran.Un test visuel vérifie ce qui arrive au joueur, si bien que beaucoup d'équipes utilisent les deux.
Unity, Unreal Engine, Godot, GameMaker, Construct, Defold, Phaser, MonoGame, RPG Maker, AltTester, GameDriver, Airtest, Selenium, Playwright, Appium, WinAppDriver, Xbox, Windows et TeamCity sont des marques de leurs propriétaires respectifs.
Prêt à enregistrer votre premier test ?
Toutes les fonctionnalités, pendant 15 jours.
Vous préférez le voir sur le type d'application que vous testez ?Réservez un appel gratuit de 30 minutes avec notre équipe.