GodsBattle
← Todas as notícias

Como testamos um cliente de jogo sem tela nenhuma conectada

updateTambém emEnglishEspañol

Você não consegue verificar um jogo lendo o código dele. Precisa jogar. Queríamos poder fazer isso a partir de um script, às três da manhã, sem monitor.

O centro de Sparta com NPCs, renderizado sem janela
Este quadro foi renderizado sem nenhuma janela na tela: um script fez login, caminhou até o Gerente do Armazém e pediu uma foto.

Um cliente que desenha em lugar nenhum

Inicie o cliente no modo headless e ele não abre janela nenhuma. Em vez disso, desenha num buffer fora da tela — o mesmo renderizador, os mesmos shaders, a mesma interface — e grava o resultado num PNG quando pedem. Dá para dizer a uma execução por quanto tempo viver, ou quantos quadros.

Um script no lugar do mouse

Uma execução headless recebe um script: um arquivo de texto simples com ações cronometradas.

  • clique aqui, arraste ali, aperte esta tecla, digite aquela linha;
  • selecione o NPC mais próximo, ou o monstro mais próximo;
  • execute um comando do cliente;
  • tire uma captura de tela.

O cliente também grava um rastro legível por máquina de tudo o que importou — o que foi clicado, o que foi selecionado, o que o servidor respondeu — para que uma verificação possa se apoiar em fatos em vez de apertar os olhos para os pixels.

Falando com o servidor sem cliente nenhum

Uma ferramenta separada, o netprobe, fala o protocolo do jogo diretamente: faz login, lista personagens, entra no mundo, anda, conversa no chat, luta, compra, vende, usa itens, move coisas no armazém, aceita e entrega missões — e imprime como ficam a bolsa, a carteira e o registro de missões depois de cada passo. É assim que uma mudança no servidor é verificada em um segundo, antes de alguém abrir um cliente.

Verificadores para cada parte

  • Uma ferramenta renderiza qualquer modelo numa imagem e consegue ler todos os modelos do jogo para provar que nenhum trava.
  • Outra faz o mesmo com os mapas, lendo cada arquivo de mapa.
  • Outra renderiza as janelas do jogo fora da tela e executa entrada com script nelas.
  • Outra testa o sistema de pacotes de conteúdo, falsificações incluídas: 308 verificações.
  • Outra testa o editor de spawns, incluindo um servidor falso que ela pode machucar de propósito: 637 verificações.
  • O servidor tem seu próprio conjunto de mais de duas mil verificações.

Por que isso importa para você

Muitas das correções desta leva vieram de uma captura que alguém teve que olhar: uma faixa de pixels escuros ao lado da janela de chat, um ícone no lugar errado, uma janela desenhada por baixo da vizinha. Um humano ainda lê a imagem. Mas agora um script consegue caminhar até o lugar, abrir a janela e tirar a captura — sempre no mesmo estado — para que um problema, uma vez encontrado, continue encontrado.

Uma nota de rodapé sobre as compilações

Numa noite, várias compilações completas do cliente rodaram ao mesmo tempo e usaram 16 GB de memória e 24 GB de swap, e o sistema operacional matou o desktop para se salvar. Agora toda compilação entra numa fila por uma vaga em toda a máquina e roda com um teto de memória. Uma compilação que espera está funcionando como deveria.