Test automatizzato dei videogiochi senza SDK: Unity, Unreal, Godot

Il test automatizzato dei videogiochi senza SDK nella build: testate menu, HUD e livelli di un gioco Unity, Unreal o Godot con tastiera, mouse e gamepad veri.

11 min di letturaDal team di GUI Test Studio

Che cos'è il test automatizzato dei videogiochi?

Il test automatizzato dei videogiochi consiste nel lasciare che un software giochi parti del vostro gioco e controlli ciò che accade, così ogni nuova build viene verificata senza che una persona ripeta a mano gli stessi passi.Copre la parte ripetibile del QA di un gioco: avviare la build, scorrere i menu, caricare un livello, mettere in pausa, finire il livello, controllare il punteggio.

Automatizzare i test di un gioco è più difficile che testare un sito web o un'applicazione aziendale.Un gioco disegna tutto da solo.Le azioni del giocatore cambiano ciò che accade dopo.Due partite sono raramente identiche, fotogramma per fotogramma.

Questa guida spiega perché gli strumenti di test abituali non vedono nulla dentro un gioco, che cosa usano invece i team dei videogiochi e come un approccio visivo, a scatola nera, testa un gioco Unity, Unreal, Godot o con un motore proprietario senza aggiungere nulla alla sua build.

Perché gli strumenti di test non vedono nulla dentro un gioco

Gli strumenti di test per desktop e web trovano gli elementi grazie alla descrizione che un'applicazione dà di sé.Una pagina web ha il suo documento, i suoi elementi e i loro id.Un programma Windows descrive al sistema i suoi pulsanti, campi ed elenchi: è l'albero di accessibilità che usano i lettori di schermo.Selenium e Playwright trovano gli elementi nella struttura della pagina web.WinAppDriver e Appium li trovano in ciò che un'app comunica al sistema sui suoi controlli, come un id di automazione.

Un gioco non fornisce nulla di tutto ciò.Il motore apre un'unica finestra e disegna ogni fotogramma su un'unica superficie, di solito con la scheda grafica.Il menu principale, l'inventario, l'HUD e le finestre di dialogo sono pixel, non controlli.Chiedete a Windows che cosa c'è nella finestra, e la risposta è un unico riquadro senza nome.

Se state scegliendo uno strumento end-to-end per le vostre altre applicazioni, consultate lo studio comparativo.

Come i team dei videogiochi automatizzano i test oggi

La maggior parte degli studi si affida prima di tutto alle persone.Tester e playtester percorrono ogni build, seguono piani di test e scrivono segnalazioni di bug.Il playtesting resta essenziale: solo una persona può dire se un salto risulta giusto o se una battaglia contro un boss è equa.Eppure buona parte della giornata di un tester se ne va a controllare, di nuovo, che ciò che funzionava ieri funzioni ancora oggi.

Per automatizzare quella parte, l'automazione del QA dei videogiochi di solito strumenta il gioco: il team aggiunge codice o un plugin alla build, così un test può raggiungere gli oggetti del motore dall'interno.

Automazione dei test con Unity

Lo Unity Test Framework permette a un team di scrivere test in C#, con NUnit, in Edit Mode e in Play Mode.I test vengono eseguiti nell'editor o su piattaforme di destinazione come Standalone, Android e iOS.

Test automatizzati con Unreal Engine

Unreal Engine ha un framework di test automatizzati scritto in C++, con test unitari, di funzionalità, smoke, di stress dei contenuti e di confronto di screenshot.Gauntlet, il framework di automazione di Unreal, esegue sessioni di un progetto che svolgono test e ne convalidano i risultati.

Test con Godot

I team Godot aggiungono spesso un componente aggiuntivo di test.GUT è un framework di test unitari per il motore Godot.GdUnit4 testa GDScript, C# e scene nell'editor di Godot, e il suo esecutore di scene può simulare l'input.

Strumenti che si inseriscono nel gioco

AltTester offre automazione dei test per Unity e Unreal Engine.Il suo SDK è un plugin che strumenta il gioco per esporre gli oggetti della sua gerarchia.I test si scrivono in C#, Python, Java o Robot Framework.

GameDriver funziona con giochi creati con Unity, Unreal Engine e Godot.Si inserisce il suo agente nel progetto, e i test trovano gli oggetti con HierarchyPath, un linguaggio di interrogazione simile a XPath.

Airtest è un framework open source per giochi e app che individua gli elementi tramite riconoscimento di immagini, da script Python.Il suo compagno, Poco, legge la gerarchia di oggetti del gioco una volta installato lo SDK di Poco nel gioco.

Questi strumenti sono forti quando un test ha bisogno dello stato interno del gioco: una proprietà, una posizione, un valore che nessuno vede.Hanno però anche costi facili da sottovalutare.

Che cosa richiedeChe cosa significa per il team
Codice o un plugin nella buildUna build di test da produrre e mantenere allineata a quella che distribuite.
Test scritti in codiceUno sviluppatore scrive e mantiene ogni test.
Nomi e percorsi degli oggettiUn oggetto rinominato o una scena riorganizzata rompe i test che lo nominano.
Un'integrazione per il vostro motoreUn motore proprietario, o un motore che lo strumento non copre, non offre nulla in cui inserirsi.
Una vista dall'internoUn controllo dello stato di un oggetto dice ciò che contiene il codice, che non sempre è ciò che vede il giocatore.

Che cosa aggiunge un approccio visivo, a scatola nera

Un test a scatola nera vede il gioco solo dall'esterno, come un giocatore: l'immagine sullo schermo e i comandi in mano.Non ha bisogno di accedere al codice, quindi funziona allo stesso modo con ogni motore.

Registrare

Giocare il percorso una volta

Controllare

L'HUD, i menu, le schermate finali

Riprodurre

Tastiera, mouse e controller

Report

Ciò che era atteso, ciò che è stato disegnato

Che cosa ottenetePerché conta per i giochi
Niente nella buildTestate la build distribuita, quella che scaricano i vostri giocatori.
Qualsiasi motoreUnity, Unreal Engine, Godot, GameMaker, Construct, Defold, Phaser, MonoGame, RPG Maker o un vostro motore.
Input realiTastiera, mouse e gamepad, usati come li usa un giocatore.
Controlli di ciò che viene disegnatoUn'icona sbagliata, un cuore mancante o un'etichetta tagliata fanno fallire il test, anche quando lo stato del gioco è corretto.
Test senza codiceUn tester QA registra il test giocando, senza script da scrivere.
Ogni buildLo stesso test viene eseguito su ogni nuova build, a mano o nella vostra pipeline di CI.

I due approcci non sono rivali.Un test strumentato è lo strumento giusto per preparare un salvataggio o leggere un valore che nessuno vede.Un test a scatola nera è lo strumento giusto per controllare che ciò che arriva al giocatore sia corretto.

Che cosa automatizzare in un gioco e che cosa lasciare alle persone

Siate onesti su ciò che una riproduzione fa bene.Preme gli stessi tasti negli stessi momenti.Un gioco il cui esito dipende dalla fisica, dal caso o da un tempismo esatto non risponde sempre allo stesso modo, quindi un test registrato di un tratto difficile di piattaforme può fallire senza una vera ragione.

Parte del giocoConviene automatizzarla?
Avvio, schermata del titolo e menu principaleSì.Sono uguali a ogni partita.
Opzioni: grafica, audio, comandi, linguaSì.Ogni modifica si vede come un valore o un'etichetta sullo schermo.
Schermate di pausa, inventario, negozio, dialogo e tutorialSì.
L'HUD: punteggio, vite, monete, timerSì, nei momenti che il gioco rende ripetibili.
Salvataggio e caricamento, selezione del livello, livello completatoSì.
Un livello con seed fisso o un percorso scriptatoSì, quando il gioco si svolge ogni volta allo stesso modo.
Gameplay di riflessi, enigmi fisici, nemici che reagiscono al giocatoreRaramente.I risultati variano da una partita all'altra.
Divertimento, sensazioni, difficoltà e bilanciamentoNo.Serve il giudizio di una persona.

Come si testano l'HUD, i menu e le schermate finali di un gioco?

Un controllo guarda una parte dello schermo e dice se è corretta.Ecco dove vanno i controlli in un gioco 2D di esempio, disegnato per questo articolo.

Un gioco 2D di esempio.I cuori vengono contati, il punteggio viene letto e il timer viene controllato dalla sua forma.

Contate le vite con un'asserzione visiva di conteggio: esattamente tre cuori.Leggete un'etichetta fissa, o un valore che il livello raggiunge sempre, con un'asserzione testuale.Controllate un valore che cambia con un'asserzione testuale dinamica: il timer deve avere la forma di un orario, qualunque orario mostri.

Un gioco 2D di esempio: il menu di pausa.Il titolo viene letto e la voce selezionata viene confrontata con la sua immagine.

In un menu, un'asserzione testuale legge il titolo.Un'asserzione visiva confronta la voce selezionata con la sua immagine, quindi un'evidenziazione del colore sbagliato fallisce.Anche le indicazioni dei pulsanti in basso sono un'immagine, e l'icona sbagliata per un controller è un vero bug.

Un gioco 2D di esempio: la schermata di livello completato, con quattro controlli.

Alla fine di un livello, un'asserzione testuale attende le parole «LEVEL COMPLETE».Un'asserzione visiva di conteggio conta le stelle.Un'asserzione testuale dinamica controlla che il punteggio finale sia un numero, e un'asserzione visiva trova il pulsante Next Level.

Ogni controllo attende ciò che cerca fino al suo timeout, quindi un menu che compare in dissolvenza non è un errore.Un'asserzione visiva di assenza attende che una schermata di caricamento sia sparita, quindi il test prosegue non appena il livello è pronto.

Ogni tipo di controllo è spiegato in Asserzioni visive e Asserzioni testuali.Il gioco viene trovato a vista, perché non ha informazioni di accessibilità: come GUI Test Studio trova gli elementi spiega perché questo rende robusto un test.

Tastiera, mouse e gamepad

Un test di un gioco vale quanto i suoi input.GUI Test Studio registra e riproduce la tastiera, il mouse e i controller in stile Xbox, quelli che Windows vede come controller XInput, fino a quattro alla volta.

Ogni pressione di pulsante e ogni movimento di levetta vengono registrati con i loro tempi.Sulla timeline, una pressione e il suo rilascio diventano un blocco Pressione pad, e una serie di movimenti di levetta un blocco Movimento levetta.Mentre modificate, l'anteprima disegna il controller e ciò che tiene premuto in ogni momento.

Quando il test viene eseguito, GUI Test Runner-Recorder pilota un controller virtuale, quindi il gioco riceve le pressioni da un controller.Serve un driver installato una volta sul computer che esegue i test.L'app lo segnala prima dell'esecuzione e apre la pagina di download del driver.

Ogni pressione registrata riceve anche un controllo dell'intero schermo, preso subito prima.In una scena che si muove molto, impostate quei controlli su Permissiva, oppure sostituitene uno con un controllo della parte che conta.

EventoIn un gioco
Tasto tenuto premutoTenere premuta la freccia destra per due secondi per correre fino alla piattaforma successiva.
Pressioni ripetutePremere due volte il tasto di salto per un doppio salto.
ScorciatoiaAprire la mappa, fare un salvataggio rapido, catturare uno screenshot.
Testo digitatoDigitare il nome di un giocatore o un codice trucco su una build di debug.
Percorso del mouseMirare, tracciare un percorso, trascinare un'unità sulla mappa.
Pressione pad e Movimento levettaConfermare in un menu, saltare, camminare o ruotare la telecamera.

Per un gioco che mira o si guarda intorno con il mouse, attivate Registra il movimento continuo del mouse nelle Preferenze di GUI Test Runner-Recorder, in Registrazione predefinita, Avanzate.Ogni movimento viene allora registrato e riprodotto, con o senza un pulsante premuto.Tutti gli eventi sono descritti in Eventi.

Automazione dei test dei videogiochi con GUI Test Studio, passo dopo passo

GUI Test Studio automatizza i test end-to-end su Windows: applicazioni desktop, applicazioni web, telefoni e giochi.Ecco come prende forma un primo test di un gioco.

  1. 1

    Installarlo e scegliere il profilo

    Installate GUI Test Studio sul computer Windows che esegue il vostro gioco.Al primo avvio vi chiede di che cosa vi occupate: scegliete Sviluppatore di videogiochi.Il controller viene allora registrato e riprodotto fin dall'inizio, e le impostazioni consigliate si adattano agli schermi che si muovono.

  2. 2

    Registrare il gioco

    In GUI Test Runner-Recorder, fate clic su Registra e scegliete Un'app.Fate clic su Sfoglia... per scegliere il programma del vostro gioco, e spuntate la casella che avvia l'app all'inizio del test e la chiude alla fine.Ogni esecuzione parte allora da un gioco appena avviato.

    Per osservare solo una parte dello schermo, come la vista del gioco dentro un editor, scegliete invece un'area dello schermo.

  3. 3

    Giocare il percorso da controllare

    Scorrete i menu, avviate il livello, fate ciò di cui tratta il test, poi premete il tasto di arresto.La registrazione aggiunge un controllo prima di ogni clic, e controlli per ciò che compare sullo schermo.

  4. 4

    Aggiungere i controlli che contano

    Aprite il test in GUI Test Studio.Trascinate un'asserzione visiva di conteggio, un'asserzione testuale o un'asserzione testuale dinamica dalla tavolozza Asserzioni al momento che volete, e disegnate dove deve guardare.

  5. 5

    Eseguirlo e leggere il report

    Fate clic su Esegui test.Il report di affidabilità mostra ogni controllo con l'immagine attesa e l'immagine trovata, e dice in parole semplici che cosa è fallito.

I giochi sono uno dei casi della nostra pagina dei casi d'uso, accanto alle app web, desktop e mobili.

Rendere ripetibili i test dei videogiochi

Un test di un gioco passa ogni volta quando il gioco si avvia allo stesso modo e i controlli cercano le cose giuste.Queste abitudini aiutano.

AbitudinePerché
Avviare la build in uno stato notoUn passo Esegui app può passare argomenti al gioco, come un'opzione di debug che carica un livello o fissa il seed casuale, se il vostro gioco ne ha una.
La stessa risoluzione e la stessa modalità finestra a ogni esecuzioneI controlli confrontano le immagini alla dimensione in cui sono state registrate.Un passo Esegui app può aprire il gioco ingrandito o a schermo intero.
Attendere ciò che attende il giocoUn'asserzione visiva di assenza sulla schermata di caricamento è meglio di un'Attesa fissa.
Cercare in tutto lo schermo ciò che si muoveCerca in tutto lo schermo trova un elemento ovunque sia disegnato.
La severità Permissiva per le scene affollateTollera le piccole differenze di rendering tra due esecuzioni, e fallisce comunque davanti a un cambiamento reale come un elemento mancante.
Un profilo di baseline per impostazione graficaLe qualità Bassa e Ultra disegnano lo stesso menu in modo diverso, e ogni profilo conserva le proprie immagini attese.

I dettagli sono in Web, telefoni, macchine virtuali e giochi.

Test di regressione dei videogiochi a ogni build

I test di regressione dei videogiochi consistono nell'eseguire gli stessi controlli su ogni nuova build, così un menu rotto o un elemento dell'HUD mancante viene trovato il giorno in cui compare. gtr-cli, l'esecutore da riga di comando, esegue un test esattamente come il pulsante Esegui test.Restituisce un codice di uscita che il vostro strumento di CI comprende, scrive risultati JUnit e raccoglie le immagini di ogni errore in un'unica cartella.

Sull'agente di build
gtr-cli run tests --countdown 0 --junit results\junit.xml --artifacts results\artifacts

L'agente di build ha bisogno di una sessione desktop di Windows aperta e sbloccata, perché il gioco disegna su uno schermo reale e il test ci gioca lì.

Un esempio completo di pipeline, con TeamCity: eseguite i vostri test end-to-end a ogni build.

Domande

Si può automatizzare il test di un gioco senza aggiungergli uno SDK?

Sì.Un test a scatola nera vede il gioco come un giocatore: l'immagine sullo schermo e i comandi.GUI Test Studio gioca alla build distribuita con tastiera, mouse e controller veri e controlla ciò che viene disegnato, quindi al gioco non si aggiunge nulla.

Quali motori di gioco può testare uno strumento di test visivo?

Qualsiasi motore, perché il test parte da ciò che mostra lo schermo.Unity, Unreal Engine, Godot, GameMaker, Construct, Defold, Phaser, MonoGame, RPG Maker e i motori proprietari si testano tutti allo stesso modo, come build Windows, build per browser o build Android su un telefono.

Un test automatizzato può premere i pulsanti di un gamepad?

Sì.GUI Test Studio registra i controller in stile Xbox, fino a quattro alla volta, e riproduce ogni pressione e ogni movimento di levetta tramite un controller virtuale.La riproduzione richiede un driver installato una volta sul computer che esegue i test.

Quali parti di un gioco conviene automatizzare?

Automatizzate ciò che è uguale a ogni partita: menu, opzioni, l'HUD in momenti noti, schermate di pausa e di inventario, salvataggio e caricamento, schermate di livello completato e livelli con seed fisso.Lasciate il gameplay di riflessi, la fisica, il caso e le sensazioni di gioco ai playtester.

Come si testa automaticamente l'HUD di un gioco?

Date a ogni parte dell'HUD il controllo adatto.Un'asserzione visiva di conteggio conta cuori o stelle, un'asserzione testuale legge un'etichetta fissa, e un'asserzione testuale dinamica controlla che un timer o un punteggio abbiano la forma giusta, qualunque sia il loro valore.

Quando uno strumento che strumenta il gioco, come AltTester o GameDriver, è la scelta migliore?

Quando un test deve leggere o impostare lo stato interno del gioco: la proprietà di un oggetto, una posizione, un valore che nessuno vede sullo schermo.Un test visivo controlla ciò che arriva al giocatore, quindi molti team usano entrambi.

Unity, Unreal Engine, Godot, GameMaker, Construct, Defold, Phaser, MonoGame, RPG Maker, AltTester, GameDriver, Airtest, Selenium, Playwright, Appium, WinAppDriver, Xbox, Windows e TeamCity sono marchi dei rispettivi proprietari.

Pronti a registrare il vostro primo test?

Tutte le funzionalità, per 15 giorni.

Preferite vederlo sul tipo di app che testate?Prenotate una chiamata gratuita di 30 minuti con il nostro team.

Prenota una demo