Testen der Spielautomatisierung

EinfĂŒhrung


Automatisierte Tests werden von vielen Unternehmen voll ausgeschöpft. Unit-Tests, Integrationstests, UI-Tests, manuelle Tests und andere Methoden. Aus irgendeinem Grund ist die Testautomatisierung in einem so großen Bereich wie GameDev darauf zurĂŒckzufĂŒhren, dass Builds zum manuellen Testen an die QS-Abteilung ĂŒbertragen werden. Ich werde versuchen zu erzĂ€hlen, wie ich Spiele entwickle und wie ich Tests fĂŒr sie schreibe.



NatĂŒrlich gibt es immer Ausnahmen, und in vielen Unternehmen hoffe ich, dass jeder Build die meisten PrĂŒfungen durchlĂ€uft, bevor er in die QualitĂ€tssicherung eintritt, insbesondere bei den Spielern. Leider konnte ich in solchen Unternehmen nicht arbeiten, obwohl die Auswahl gering ist - nur 3 Unternehmen wurden wĂ€hrend meiner Karriere ersetzt. Und in jedem von ihnen wurde der Test nur manuell durchgefĂŒhrt (und im ersten Fall gab es nicht einmal Tester, tun Sie dies mit Gewalt - "wer auch immer die Funktion durchgefĂŒhrt hat, ĂŒberprĂŒft sie")



Über das Spiel


Ein paar Worte zum Spiel - das Handyspiel Dungeon. Helden wandern durch die Kerker, sammeln verschiedene nĂŒtzliche Dinge, erledigen Aufgaben und pumpen dieselben Helden. Die Beschreibung besagt nicht, dass das Spiel komplex ist und viele verschiedene Funktionen hat. Aber im Inneren ist, wie es normalerweise passiert, alles viel komplizierter.


Ebenfalls im Inneren des Spiels befindet sich die cocos2d-x-3.17-Engine, die Entwicklungssprache ist C ++. Die meisten Tests sind Python. Zu den verwendeten Tools von Drittanbietern gehören TexturePacker (Atlas-Assembly), Spine (2D-Skelettanimation) und Tiled (Kachelebenen-Editor). Dies schließt auch Google Spreadsheets ein (die meisten Spieldaten werden in Tabellen gespeichert). Zielplattformen - Android, iOS. Die Entwicklung unter OS X / Windows ist im Gange.


Das Team ist klein - 2 Personen. Als KĂŒnstler ist er Animator und ich bin Programmierer. Es gibt keinen Spieledesigner, keine Tester. Zum grĂ¶ĂŸten Teil wurde ihre Arbeit durch Generierung, Tests und andere Skripte ersetzt, die uns im Entwicklungsprozess helfen. Das Spiel befindet sich noch in der Entwicklung, bereits 1,5 Jahre. Es wird in der Freizeit entwickelt und diese Zeit ist begrenzt. Daher wird viel zusĂ€tzlicher Code geschrieben, um Routinearbeiten zu minimieren.


Liste der Tests mit dem Spiel



, , :




(, , )


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



, , , . , , , .


Ich freue mich zu lesen, wie Spiele in Unternehmen getestet werden, in denen sie diese Praxis noch praktizieren.

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


All Articles