Testes automatizados de jogos sem SDK: Unity, Unreal, Godot

Testes automatizados de jogos sem SDK no build: teste os menus, o HUD e as fases de um jogo Unity, Unreal ou Godot com entrada real de teclado, mouse e gamepad.

11 min de leituraPela equipe do GUI Test Studio

O que são testes automatizados de jogos?

Definição

Testes automatizados de jogos significam deixar um software jogar partes do seu jogo e verificar o que acontece, para que cada novo build seja verificado sem que uma pessoa repita as mesmas etapas manualmente.

  • Eles cobrem a parte repetível do QA de jogos: iniciar o build, percorrer os menus, carregar uma fase, pausar, terminar a fase, conferir a pontuação.

A automação de testes de jogos é mais difícil do que testar um site ou um aplicativo comercial.

  • Um jogo desenha tudo sozinho.
  • A entrada do jogador muda o que acontece em seguida.
  • Duas execuções raramente são idênticas, quadro a quadro.

Este guia explica por que as ferramentas de teste habituais não enxergam nada dentro de um jogo, o que as equipes de jogos usam no lugar delas, e como uma abordagem visual, de caixa-preta, testa um jogo feito em Unity, Unreal, Godot ou em uma engine própria sem acrescentar nada ao build.

Por que as ferramentas de teste não enxergam nada dentro de um jogo

As ferramentas de teste de desktop e web encontram os elementos pela descrição que um aplicativo dá de si mesmo.Uma página web tem o seu documento, os seus elementos e os ids deles.Um programa do Windows descreve os botões, campos e listas ao sistema: é a árvore de acessibilidade que os leitores de tela usam.O Selenium e o Playwright encontram os elementos na estrutura da página web.O WinAppDriver e o Appium os encontram no que um aplicativo informa ao sistema sobre os seus controles, como um automation id.

Um aplicativo comercial
Salvar

O que o Windows recebe

Campo: Nome
Lista: Pedidos
Botão: Salvar
Um jogo

O que o Windows recebe

Um painel, sem nome
Um aplicativo comercial descreve cada um dos seus controles ao sistema.Um jogo desenha os menus e o HUD como pixels, então o sistema vê um único painel.

Se você está escolhendo uma ferramenta de ponta a ponta para os seus outros aplicativos, veja o estudo comparativo.

Como as equipes de jogos automatizam os testes hoje

A maioria dos estúdios conta primeiro com pessoas.Testadores e playtesters percorrem cada build, seguem planos de teste e escrevem relatórios de bug.O playtest continua essencial: só uma pessoa sabe dizer se um pulo parece certo ou se uma luta contra um chefe é justa.Mesmo assim, boa parte do dia de um testador vai para conferir, de novo, que o que funcionava ontem ainda funciona hoje.

Para automatizar essa parte, a automação de QA de videogames costuma instrumentar o jogo: a equipe acrescenta código ou um plugin ao build, para que um teste consiga alcançar os objetos da engine por dentro.

Automação de testes no Unity

O Unity Test Framework permite que uma equipe escreva testes em C#, com NUnit, no Edit Mode e no Play Mode.Os testes rodam no editor ou em plataformas de destino como Standalone, Android e iOS.

Testes automatizados no Unreal Engine

O Unreal Engine tem um framework de testes de automação embutido, em C++, com testes unitários, de funcionalidade, de fumaça, de estresse de conteúdo e de comparação de capturas de tela.O Gauntlet, o framework de automação do Unreal, executa sessões de um projeto que realizam testes e validam os resultados.

Testes no Godot

As equipes de Godot muitas vezes acrescentam um complemento de testes.O GUT é um framework de testes unitários para a Godot Engine.O GdUnit4 testa GDScript, C# e cenas no editor do Godot, e o executor de cenas dele consegue simular entradas.

Ferramentas que se conectam ao jogo

AltTester

O AltTester oferece automação de testes para Unity e Unreal Engine.O SDK dele é um plugin que instrumenta o jogo para expor os objetos da hierarquia.Os testes são escritos em C#, Python, Java ou Robot Framework.

GameDriver

O GameDriver funciona com jogos feitos em Unity, Unreal Engine e Godot.Você coloca o agente dele no projeto, e os testes encontram os objetos com o HierarchyPath, uma linguagem de consulta parecida com o XPath.

Airtest + Poco

O Airtest é um framework de código aberto para jogos e aplicativos que localiza elementos por reconhecimento de imagem, a partir de scripts Python.O complemento dele, o Poco, lê a hierarquia de objetos do jogo depois que o SDK do Poco é instalado no jogo.

Essas ferramentas são fortes quando um teste precisa do estado interno do jogo: uma propriedade, uma posição, um valor que ninguém vê.Elas também têm custos que é fácil subestimar.

O que é precisoO que isso significa para a equipe
Código ou um plugin no buildUm build de teste para produzir e manter em sincronia com o que você publica.
Testes escritos em códigoUm desenvolvedor escreve e mantém cada teste.
Nomes e caminhos de objetosUm objeto renomeado ou uma cena reorganizada quebra os testes que se referem a eles.
Uma integração para a sua engineUma engine própria, ou uma engine que a ferramenta não cobre, não tem onde se conectar.
Uma visão de dentroUma checagem do estado de um objeto diz o que o código guarda, que nem sempre é o que o jogador vê.

O que uma abordagem visual, de caixa-preta, acrescenta

Um teste de caixa-preta vê o jogo apenas por fora, como um jogador: a imagem na tela e os comandos nas mãos.Ele não precisa de acesso ao código, então funciona do mesmo jeito em qualquer engine.

Gravar

Jogue o caminho uma vez

Verificar

O HUD, os menus, as telas finais

Reproduzir

Teclado, mouse e gamepad

Relatar

O que era esperado, o que foi desenhado

O que você ganhaPor que isso importa para os jogos
Nada no buildVocê testa o build publicado, o mesmo que os jogadores baixam.
Qualquer engineUnity, Unreal Engine, Godot, GameMaker, Construct, Defold, Phaser, MonoGame, RPG Maker ou uma engine própria.
Entrada realEntrada de teclado, mouse e gamepad, dada do jeito que um jogador a dá.
Asserções sobre o que é desenhadoUm ícone errado, um coração faltando ou um rótulo cortado reprova o teste, mesmo quando o estado do jogo está certo.
Testes sem códigoUm testador de QA grava o teste jogando, sem nenhum script para escrever.
Cada buildO mesmo teste roda em cada novo build, manualmente ou no seu pipeline de CI.

O que automatizar em um jogo, e o que deixar para as pessoas

Parte do jogoBoa candidata à automação?
Inicialização, tela de título e menu principalSim.São iguais em todas as execuções.
Opções: gráficos, áudio, controles, idiomaSim.Cada alteração aparece como um valor ou um rótulo na tela.
Telas de pausa, inventário, loja, diálogo e tutorialSim.
O HUD: pontuação, vidas, moedas, cronômetroSim, nos momentos que o jogo torna repetíveis.
Salvar e carregar, seleção de fase, fase concluídaSim.
Uma fase com semente fixa ou um caminho roteirizadoSim, quando o jogo se comporta do mesmo jeito todas as vezes.
Jogabilidade de reflexo, quebra-cabeças de física, inimigos que reagem ao jogadorRaramente.Os resultados variam de uma execução para outra.
Diversão, sensação, dificuldade e equilíbrioNão.Isso exige o julgamento de uma pessoa.

Como testar o HUD, os menus e as telas finais de um jogo?

Uma asserção olha uma parte da tela e diz se ela está certa.Veja onde as asserções ficam em um jogo 2D de exemplo, desenhado para este artigo.

Um jogo 2D de exemplo.Os corações são contados, a pontuação é lida, e o cronômetro é verificado pelo formato.
  • Conte as vidas com uma asserção visual de contagem: exatamente três corações.
  • Leia um rótulo fixo, ou um valor que a fase sempre alcança, com uma asserção textual.
  • Verifique um valor que muda com uma asserção textual dinâmica: o cronômetro precisa ter o formato de um tempo, qualquer que seja o tempo mostrado.
Um jogo 2D de exemplo: o menu de pausa.O título é lido, e o item selecionado é comparado com a imagem dele.
  • Em um menu, uma asserção textual lê o título.
  • Uma asserção visual compara o item selecionado com a imagem dele, então um destaque desenhado na cor errada reprova.
  • As dicas de botões na parte de baixo também são uma imagem, e o ícone errado para um gamepad é um bug real.
Um jogo 2D de exemplo: a tela de fase concluída, com quatro asserções.
  • No fim de uma fase, uma asserção textual espera as palavras “LEVEL COMPLETE”.
  • Uma asserção visual de contagem conta as estrelas.
  • Uma asserção textual dinâmica verifica que a pontuação final é um número, e uma asserção visual encontra o botão Next Level.

Cada asserção aguarda até o tempo limite pelo que ela busca, então um menu que surge aos poucos não é uma falha.Uma asserção visual de ausência espera até que uma tela de carregamento suma, então o teste continua no momento em que a fase está pronta.

Cada tipo de asserção é explicado em Asserções visuais e Asserções textuais.O jogo é encontrado pela visão, porque não tem informações de acessibilidade: como o GUI Test Studio encontra os elementos explica por que isso torna um teste robusto.

Entrada de teclado, mouse e gamepad

Um teste de jogo só é tão bom quanto as suas entradas.O GUI Test Studio grava e reproduz o teclado, o mouse e os gamepads no estilo Xbox, aqueles que o Windows vê como dispositivos XInput, até quatro ao mesmo tempo.

Cada pressionamento de botão e cada movimento do analógico é gravado com o seu timing.Na linha do tempo, um pressionamento e a liberação dele viram um bloco Toque no gamepad, e uma sequência de movimentos do analógico um bloco Movimento do analógico.Enquanto você edita, a visualização desenha o gamepad e o que ele mantém pressionado em cada momento.

Asserções
Asserção visualAsserção visual
Eventos do gamepad
Pressionar AAnalógico esquerdo X · 12 amostrasPressionar B
Um pressionamento e a liberação dele formam um bloco, uma sequência de movimentos do analógico forma outro, e cada pressionamento tem a sua asserção da tela inteira logo antes dele.

Quando o teste é executado, o GUI Test Runner-Recorder conduz um gamepad virtual, então o jogo recebe os pressionamentos de um gamepad.Isso exige um driver instalado uma vez no computador que executa os testes.O aplicativo avisa antes da execução e abre a página de download do driver.

EventoEm um jogo
Tecla mantida pressionadaManter a seta para a direita pressionada por dois segundos para correr até a próxima plataforma.
Toques repetidosTocar duas vezes a tecla de pulo para um pulo duplo.
AtalhoAbrir o mapa, fazer um salvamento rápido, tirar uma captura de tela.
Texto digitadoDigitar um nome de jogador ou um código de trapaça em um build de depuração.
Trajeto do mouseMirar, desenhar um caminho, arrastar uma unidade pelo mapa.
Toque no gamepad e Movimento do analógicoConfirmar em um menu, pular, andar ou girar a câmera.

Para um jogo que mira ou olha em volta com o mouse, ative Gravar o movimento contínuo do mouse nas Preferências do GUI Test Runner-Recorder, em Padrões de gravação, Avançado.Todo movimento passa então a ser gravado e reproduzido, com ou sem botão pressionado.Todos os eventos estão descritos em Eventos.

Automação de testes de jogos com o GUI Test Studio, etapa por etapa

O GUI Test Studio automatiza testes de ponta a ponta no Windows: aplicativos desktop, aplicativos web, celulares e jogos.Veja como um primeiro teste de jogo é montado.

  1. 1

    Instale e escolha o seu perfil

    Instale o GUI Test Studio no computador Windows que roda o seu jogo.Na primeira vez que ele inicia, ele pergunta no que você trabalha: escolha Desenvolvedor de jogos.O gamepad passa a ser gravado e reproduzido desde o início, e as configurações recomendadas servem para telas que se mexem.

  2. 2

    Grave o seu jogo

    No GUI Test Runner-Recorder, clique em Gravar e escolha Um aplicativo.Clique em Procurar... para escolher o programa do jogo, e marque a caixa que inicia o aplicativo no começo do teste e o fecha no final.Assim, toda execução começa com um jogo novo.

    Para observar só uma parte da tela, como a visão do jogo dentro de um editor, escolha uma área da tela em vez disso.

  3. 3

    Jogue o caminho que você quer verificar

    Percorra os menus, comece a fase, faça o que o teste deve cobrir e pressione a tecla Encerrar.A gravação acrescenta uma asserção antes de cada clique, e asserções para o que aparece na tela.

  4. 4

    Adicione as asserções que importam

    Abra o teste no GUI Test Studio.Arraste uma asserção visual de contagem, uma asserção textual ou uma asserção textual dinâmica da paleta Asserções até o momento desejado, e desenhe onde ela deve olhar.

  5. 5

    Execute e leia o relatório

    Clique em Executar teste.O Relatório de confiança mostra cada asserção com a imagem esperada e a imagem encontrada, e diz em palavras simples o que falhou.

Os jogos são um dos casos da nossa página de casos de uso, ao lado de aplicativos web, desktop e móveis.

Torne os testes de jogos repetíveis

Um teste de jogo é aprovado sempre quando o jogo começa do mesmo jeito e as asserções buscam as coisas certas.Estes hábitos ajudam.

HábitoPor quê
Iniciar o build em um estado conhecidoUma etapa Executar aplicativo pode passar argumentos ao jogo, como uma opção de depuração que carrega uma fase ou fixa a semente aleatória, se o jogo tiver uma.
A mesma resolução e o mesmo modo de janela em todas as execuçõesAs asserções comparam imagens no tamanho em que foram gravadas.Uma etapa Executar aplicativo pode abrir o jogo maximizado ou em tela cheia.
Esperar pelo que o jogo esperaUma asserção visual de ausência na tela de carregamento é melhor do que uma espera fixa.
Buscar na tela inteira o que se moveBuscar na tela inteira encontra um elemento onde quer que ele seja desenhado.
Rigor Flexível para cenas movimentadasEle tolera as pequenas diferenças de renderização entre duas execuções, e ainda reprova uma mudança real, como um elemento que falta.
Um perfil de linha de base por configuração gráficaAs qualidades Baixa e Ultra desenham o mesmo menu de formas diferentes, e cada perfil guarda as próprias imagens esperadas.

Os detalhes estão em Web, celulares, máquinas virtuais e jogos.

Testes de regressão para jogos a cada build

Testes de regressão para jogos significam executar as mesmas asserções a cada novo build, para que um menu quebrado ou um elemento do HUD que falta seja descoberto no dia em que aparece.O gtr-cli, o executor de linha de comando, executa um teste exatamente como o botão Executar teste.Ele devolve um código de saída que a ferramenta de CI entende, escreve resultados JUnit e reúne as imagens de cada falha em uma única pasta.

No agente de build
gtr-cli run tests --countdown 0 --junit results\junit.xml --artifacts results\artifacts

Um exemplo completo de pipeline, com o TeamCity: execute seus testes de ponta a ponta a cada build.

Perguntas

É possível automatizar os testes de um jogo sem acrescentar um SDK ao jogo?

Sim.Um teste de caixa-preta vê o jogo como um jogador: a imagem na tela e os comandos.O GUI Test Studio joga o build publicado com entradas reais de teclado, mouse e gamepad e verifica o que é desenhado, então nada é acrescentado ao jogo.

Quais engines de jogo uma ferramenta de teste visual consegue testar?

Qualquer engine, porque o teste trabalha a partir do que a tela mostra.Unity, Unreal Engine, Godot, GameMaker, Construct, Defold, Phaser, MonoGame, RPG Maker e engines próprias são todos testados do mesmo jeito, como um build para Windows, um build para navegador ou um build para Android em um celular.

Um teste automatizado consegue pressionar botões de gamepad?

Sim.O GUI Test Studio grava gamepads no estilo Xbox, até quatro ao mesmo tempo, e reproduz cada pressionamento e cada movimento do analógico por meio de um gamepad virtual.A reprodução exige um driver instalado uma vez no computador que executa os testes.

Quais partes de um jogo você deve automatizar?

Automatize o que é igual em todas as execuções: menus, opções, o HUD em momentos conhecidos, telas de pausa e de inventário, salvar e carregar, telas de fase concluída e fases com semente fixa.Deixe a jogabilidade de reflexo, a física, a aleatoriedade e a sensação do jogo para os playtesters.

Como testar automaticamente o HUD de um jogo?

Dê a cada parte do HUD a asserção que combina com ela.Uma asserção visual de contagem conta corações ou estrelas, uma asserção textual lê um rótulo fixo, e uma asserção textual dinâmica verifica que um cronômetro ou uma pontuação tem o formato certo, qualquer que seja o valor.

Quando uma ferramenta instrumentada como o AltTester ou o GameDriver é a melhor escolha?

Quando um teste precisa ler ou definir o estado interno do jogo: a propriedade de um objeto, uma posição, um valor que ninguém vê na tela.Um teste visual verifica o que chega ao jogador, por isso muitas equipes usam os dois.

Unity, Unreal Engine, Godot, GameMaker, Construct, Defold, Phaser, MonoGame, RPG Maker, AltTester, GameDriver, Airtest, Selenium, Playwright, Appium, WinAppDriver, Xbox, Windows e TeamCity são marcas registradas dos seus respectivos proprietários.

Pronto para gravar o seu primeiro teste?

Todos os recursos, por 15 dias.

Prefere ver no tipo de aplicativo que você testa?Agende uma chamada gratuita de 30 minutos com a nossa equipe.

Agendar uma demonstração