come automatizzare i test di gioco?


13

Sono nuovo in questo campo di prove. Ho appena sviluppato un gioco di base utilizzando il motore di unità, ma voglio provarlo.

Ho controllato con selenio ma non so come ottenere il valore che viene restituito che contiene le informazioni sull'azione che viene eseguita nel gioco. Se sarò in grado di ottenere il valore, allora sarò in grado di prendere le misure necessarie di conseguenza.


4
Questa è una domanda abbastanza interessante. Personalmente penso che i test unitari siano abbastanza sottovalutati nello sviluppo del gioco. Tuttavia, sembra che tu sia più interessato ai test di integrazione automatizzata, che è spesso molto difficile da implementare nello sviluppo del gioco. Soprattutto quando il gioco usa la casualità.
Philipp,

Puntelli per prendere sul serio i test e cercare gli strumenti per quel lavoro. Potresti invece chiedere a SO - hanno un sacco di domande e risposte sul selenio. Come accennato da @Philipp, alcuni tipi di test di gioco sono difficili da automatizzare; cioè devo ancora vedere un test incustodito per controllare gli effetti visivi.
Pikalek,

1
Non è chiaro cosa vuoi testare, ma sembra che tu stia cercando un valore che può essere testato indipendentemente dal gioco: un valore restituito da una funzione. E in tal caso, potresti testare l'unità di questa funzione e non importa se viene utilizzata nel gioco o meno. Se per te non è chiaro come farlo, faccelo sapere e proverò a scrivere una risposta che coinvolge il test unitario.
MVCDS

Risposte:


1

Esistono diversi modi per testare un gioco, due sono i più utilizzati: test di unità e integrazione.

Per test unitaristai testando il funzionamento interno del gioco, senza effettivamente eseguirlo. Puoi farlo per moduli specifici che hanno le dipendenze astratte (ad esempio, la logica che calcola Quest XP che ottieni, in base a un determinato insieme di fattori; se viene riprodotto un determinato suono). A seconda di quanto astraggiate la vostra logica, potreste testarne di più, ma per l'unità in particolare, potrebbe essere più difficile dato il modo in cui l'architettura di gioco viene eseguita (ad esempio, ereditando dal comportamento mono). Tuttavia, applicando modelli OOP come la composizione, è possibile estrarre frammenti di logica che possono essere testati in modo deterministico (ad esempio, la fisica), anche se a volte può essere visto come un po 'estremo. Tutto dipende da quanto tempo hai, se hai iniziato da zero con il progetto o meno, da quanta esperienza hai, ecc. In generale, non ho " Ho visto molti test unitari nei giochi rispetto agli altri progetti software non di gioco. Questo tipo di test è abbastanza facile da automatizzare quando si forniscono comportamenti simulati simulati.

Per i test di integrazione , interagisci con il gioco "intero" in un determinato momento, quando tutte le parti sono in esecuzione. A seconda della profondità delle cose che vuoi testare, vedo che potrebbe essere molto semplice impossibile.

Un'idea sarebbe quella di avere una build di "test di integrazione", che registri ogni (la maggior parte) azioni che compie (ovvero, generazione di mostri, riproduzione di suoni, effetto di partenza, generazione di particelle). Dopo che è stato eseguito per un determinato periodo, puoi controllare i registri per vedere se corrisponde a un determinato modello (questo dipende anche da quanto è casuale il gioco, in base agli input). Ora, questo sembra semplice, ma la domanda è: come si dice al gioco di fare le azioni desiderate? Il che mi porta alla seconda idea.

Un'altra idea sarebbe quella di avere un tipo di server nel gioco, ancora una volta, a scopo di test, che è in grado di elaborare le richieste (ad es. Tramite un'API REST) ​​e che agisce sulle entità. Le richieste potrebbero essere cose come: spostare a sinistra, saltare, ruotare di X gradi, cambiare viewport, ecc. Con questo approccio puoi anche fare i "controlli" che il gioco sta funzionando come previsto, controllando direttamente lo stato o verificando un virtuale registro degli eventi accaduti. Questo approccio viene utilizzato da altri strumenti di test dell'interfaccia utente per dispositivi mobili (ad es. Xamarin Test Cloud)

Per quanto riguarda il controllo, se il tuo gioco è basato su touch / browser, puoi invece simulare le azioni tramite un dispositivo touch / input virtuale, ma questo è un po 'più difficile, a seconda della complessità delle azioni.

Un'altra idea, per quanto riguarda l'aspetto visivo, è quella di acquisire alcuni screenshot di riferimento, immagini durante una fase iniziale e confrontarli dopo che la stessa sequenza di azioni è avvenuta su una nuova build. Il confronto può avere un'indennità di deviazione specifica, per evitare modifiche minori. Durante i test, è possibile registrare le schermate che non corrispondono e vedere la differenza. È possibile che le schermate di riferimento debbano essere aggiornate a causa di diverse modifiche. In tal caso, il gioco potrebbe essere riavviato con le azioni predefinite e le immagini di riferimento potrebbero essere aggiornate. Questo probabilmente non funzionerà molto bene con i sistemi di particelle o scene generate casualmente, a meno che non si usi l'idea precedente per impostare una sorta di seme, che viene utilizzato per generare le particelle.

Per i suoni, potrebbe essere un po 'più difficile, perché coinvolgerà "l'ascolto" del dispositivo OUT (che non è sempre possibile IIRC, poiché dipende dall'hardware del sistema). Ma se è possibile, puoi fare lo stesso confronto basato sui riferimenti delle immagini.

Spero che questo faccia luce su come è possibile automatizzare i test di gioco.

Modifica successiva: vedo solo che c'era un'altra domanda correlata che poteva darti alcuni suggerimenti su come avresti fatto alcuni bit: test automatici dei giochi

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.