Pruebas de automatización de juegos

Introducción


Las pruebas automatizadas son utilizadas en todo su potencial por muchas compañías. Pruebas unitarias, pruebas de integración, pruebas de IU, pruebas manuales y otros métodos. Pero por alguna razón, en un área tan grande como GameDev, la automatización de pruebas se reduce al hecho de que las compilaciones se transfieren al departamento de control de calidad para pruebas manuales. Trataré de decir cómo desarrollo juegos y cómo escribo pruebas para ellos.



Por supuesto, siempre hay excepciones, y en muchas compañías, espero que cada construcción pase por la mayoría de las verificaciones antes de ingresar al control de calidad, y especialmente a los jugadores. Desafortunadamente, no pude trabajar en tales compañías, aunque la selección es pequeña: solo 3 compañías fueron reemplazadas durante mi carrera. Y en cada uno de ellos, la prueba se realizó solo manualmente (y en el primero no había ni probadores, hágalo a la fuerza: "el que hizo la función lo verifica")



Sobre el juego


Algunas palabras sobre el juego: el juego móvil Dungeon. Héroes deambulando por las mazmorras, recolectando varias cosas útiles, completando tareas y bombeando a estos mismos héroes. La descripción no dice que el juego es complejo y tiene muchas características diferentes. Pero por dentro, como suele suceder, todo es mucho más complicado.


También sobre el interior del juego está el motor cocos2d-x-3.17, el lenguaje de desarrollo es C ++. La mayoría de las pruebas son Python. De las herramientas de terceros utilizadas son TexturePacker (ensamblaje de atlas), Spine (animación esquelética 2D), Tiled (editor de nivel de mosaico). Esto también incluye las hojas de cálculo de Google (la mayoría de los datos del juego se almacenan en tablas). Plataformas de destino: Android, iOS. El desarrollo está en marcha en OS X / Windows.


El equipo es pequeño: 2 personas. Artista, es animador y yo soy programador. No hay diseñador de juegos, ni probadores. En su mayor parte, su trabajo ha sido reemplazado por generación, pruebas y otros scripts que nos ayudan en el proceso de desarrollo. El juego todavía está en desarrollo, ya hace 1,5 años. Se desarrolla en el tiempo libre y este tiempo es limitado. Por lo tanto, se escribe una gran cantidad de código adicional para minimizar cualquier trabajo de rutina.


Lista de pruebas usando el juego



, , :




(, , )


, 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 . . , , .



, , , . , , , .


Me complace leer cómo se prueban los juegos en empresas donde todavía practican esta práctica.

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


All Articles