Teste de automação de jogos

Introdução


O teste automatizado é usado em todo o seu potencial por muitas empresas. Testes de unidade, testes de integração, testes de interface do usuário, testes manuais e outros métodos. Mas, por alguma razão, em uma área tão grande como a GameDev, a automação de teste se resume ao fato de que as compilações são transferidas para o departamento de controle de qualidade para testes manuais. Vou tentar contar como desenvolvo jogos e como escrevo testes para eles.



Obviamente, sempre há exceções e, em muitas empresas, espero que todas as compilações passem pela maioria das verificações antes de entrar no controle de qualidade, especialmente para os jogadores. Infelizmente, não pude trabalhar nessas empresas, embora a seleção seja pequena - apenas três empresas foram substituídas durante minha carreira. E em cada um deles o teste foi realizado apenas manualmente (e no primeiro não havia testadores, faça-o à força - "quem fez o recurso o verifica")



Sobre o jogo


Algumas palavras sobre o jogo - o jogo para celular Dungeon. Heróis vagando pelas masmorras, coletando várias coisas úteis, completando tarefas e bombeando esses mesmos heróis. A descrição não diz que o jogo é complexo e tem muitos recursos diferentes. Mas por dentro, como geralmente acontece, tudo é muito mais complicado.


Também sobre o interior do jogo está o mecanismo cocos2d-x-3.17, a linguagem de desenvolvimento é C ++. A maioria dos testes é Python. Das ferramentas de terceiros usadas são TexturePacker (montagem de atlas), Spine (animação esquelética 2D), lado a lado (editor de nível de bloco). Isso também inclui as planilhas do Google (a maioria dos dados do jogo é armazenada em tabelas). Plataformas alvo - Android, iOS. O desenvolvimento está em andamento no OS X / Windows.


A equipe é pequena - 2 pessoas. Um artista, ele é um animador e eu sou um programador. Não há designer de jogos, nem testadores. O trabalho deles foi substituído, em grande parte, por geração, testes e outros scripts que nos ajudam no processo de desenvolvimento. O jogo ainda está em desenvolvimento, já 1,5 anos. É desenvolvido em tempo livre e esse tempo é limitado. Portanto, muitos códigos adicionais são gravados para minimizar qualquer trabalho de rotina.


Lista de testes usando o jogo



, , :




(, , )


, cocos2d-x, , (Cocos, CocosStudio, CocosBuilder ). , .


— xml. — xml. . , . , , , — .


, . xml-. , . , . , , / . , Python. , , .



, . , . , . , .


:


  • id
  • , . , . , .

: — ID , ; , — , .




. , — . , . , . , .



, , . , — . , — .




, , . ( , 80/20 ). — , . — , . ? — , . , , , , , . . , . , .



. Tower Defense, . 100 , 2 , 3 . 10 . , 1-2 . , , . — , , .


- , :


  • ( «» //)
  • , —
  • , .

, . , . — . , .


/ Google-


. , . .


Google- ( )


export_{table}.py . . , . , .


core-


— , . , ECS . , , — , . , . — , (, ).


— . 0 — . — . — , . TDD , .



- level- . , . . , , — . , , , . . . , , . — , . .



— , . , . , ( ECS). .


, — 5*5 ( , ) . — , .





— , , , .



UI


, , — UI . . , . — — . — - ()/ .


:
<client_testing_commands name="window_settings_and_credits" text="Window settings, credits">
    <sequence repeat_forever="no">
        <commands>
            <CTCommandWaitNode path="/content/title_layer"/>

            <!--   -->
            <CTCommandAudioEnable enabled="yes"/>

            <CTCommandPressButton node_name="bt_settings" />

            <!--    -->
            <CTCommandPressButton window_name="window_settings" name="disable_audio" />
            <CTCommandCheckNode window_name="window_settings" name="enable_audio" visible="yes"/>
            <CTCommandCheckNode window_name="window_settings" name="disable_audio" visible="no"/>
            <CTCommandCheckAudio enabled="no"/>

            <!--    -->
            <CTCommandPressButton window_name="window_settings" name="enable_audio" />
            <CTCommandCheckNode window_name="window_settings" name="enable_audio" visible="no"/>
            <CTCommandCheckNode window_name="window_settings" name="disable_audio" visible="yes"/>
            <CTCommandCheckAudio enabled="yes"/>

            <!--      -->
            <CTCommandPressButton window_name="window_settings" name="credits" />
            <CTCommandPressButton window_name="window_credits" name="close" />

            <!-- ,       -->
            <CTCommandPressButton window_name="window_settings" name="restore_inapps" />
            <CTCommandCheckNode name="spinner" visible="yes"/>

            <!--  -->
            <CTCommandExit />
        </commands>
    </sequence>
</client_testing_commands>

, , , .


:


  • ,
  • , , .
  • CI , .

— . . , , . , , . . ( , ) , , , . — , . 10-15 .


Git-


. , . , . 5-10 , . , .


include


, include , . , , , include . , , . , . .


code-style


. , , IDE . .



. — . (2048 )- . , . — , .


Spine


.spine , . cocos2d-x json, . json , . , , . . , .


Firebase TestLab


, apk Firebase TestLab . , OS. Robo-tests , . , . , . — .



, , , .. . . . . , .


CI


git-hooks , CI. bitbucket-pipelines. , TeamCity . unit, integration . . , , .



, , , . , , , .


Tenho o prazer de ler como os jogos são testados em empresas onde eles ainda praticam essa prática.

Source: https://habr.com/ru/post/undefined/


All Articles