jak zautomatyzować testowanie gier?


13

Jestem nowy w tej dziedzinie testowania. Właśnie opracowałem podstawową grę z silnikiem Unity, ale chcę ją przetestować.

Sprawdziłem za pomocą selenu, ale nie wiem, jak uzyskać zwracaną wartość, która zawiera informacje o akcji wykonywanej w grze. Jeśli uda mi się uzyskać wartość, będę mógł odpowiednio podjąć niezbędne działania.


4
To dość interesujące pytanie. Osobiście uważam, że testowanie jednostek jest niedoceniane w tworzeniu gier. Wygląda jednak na to, że jesteś bardziej zainteresowany automatycznymi testami integracji, które często są naprawdę trudne do wdrożenia przy tworzeniu gier. Zwłaszcza, gdy gra używa losowości.
Philipp

Rekwizyty do poważnego traktowania testów i szukania narzędzi do tego zadania. Zamiast tego możesz poprosić o SO - mają dużo pytań i odpowiedzi na temat selenu. Jak wspomniano w @Philipp, niektóre typy testów gier są po prostu trudne do zautomatyzowania; tzn. jeszcze nie widziałem bezobsługowego testu sprawdzającego efekty wizualne.
Pikalek

1
Nie jest jasne, co chcesz przetestować, ale wydaje się, że szukasz wartości, która może być testowana niezależnie od gry - wartości zwracanej przez funkcję. A jeśli tak, możesz przetestować tę funkcję w jednostce i nie będzie miało znaczenia, czy jest używana w grze, czy nie. Jeśli nie jest dla ciebie jasne, jak to zrobić, daj nam znać, a ja postaram się napisać odpowiedź dotyczącą testu jednostkowego.
MVCDS

Odpowiedzi:


1

Istnieje wiele sposobów testowania gry, dwa najczęściej używane to: testy jednostkowe i integracyjne.

Do testów jednostkowychtestujesz wewnętrzne działanie gry, nie uruchamiając jej. Możesz to zrobić dla określonych modułów, które mają wyodrębnione zależności (np. Logikę, która oblicza otrzymane XP zadania, na podstawie danego zestawu czynników; czy dany dźwięk jest odtwarzany). W zależności od tego, jak bardzo abstrakcjonujesz swoją logikę, możesz przetestować więcej, ale dla jedności może być trudniej, biorąc pod uwagę sposób, w jaki robi się architekturę gry (np. Dziedziczenie po monobehaviour). Niemniej jednak, stosując wzorce OOP, takie jak kompozycja, możesz wyodrębnić fragmenty logiki, które można przetestować w sposób deterministyczny (np. Fizykę), nawet jeśli czasami można to uznać za nieco ekstremalne. Wszystko zależy od tego, ile masz czasu, od tego, czy zacząłeś od zera, czy nie, od tego, ile masz doświadczenia itp. Ogólnie nie mam. widziałem wiele testów jednostkowych w grach w porównaniu do innych projektów oprogramowania nie będącego grą. Ten rodzaj testowania jest dość łatwy do zautomatyzowania, ponieważ zapewniasz wyśmiewane zachowania, które symulujesz.

W przypadku testów integracyjnych wchodzisz w interakcję z „całą” grą w danym momencie, gdy wszystkie części są uruchomione. W zależności od głębokości rzeczy, które chcesz przetestować, widzę, że może być bardzo łatwo całkowicie niemożliwe.

Jednym z pomysłów może być kompilacja „testu integracji”, która rejestruje wszystkie (większość) czynności, które wykonuje (tj. Spawnowanie potwora, odtwarzanie dźwięku, efekt początkowy, spawnowanie cząstki). Po uruchomieniu przez określony czas możesz sprawdzić dzienniki, aby sprawdzić, czy pasuje ono do określonego wzorca (zależy to również od losowości gry, na podstawie danych wejściowych). Teraz brzmi to prosto, ale pytanie brzmi: jak powiedzieć grze, aby wykonała pożądane działania? Co prowadzi mnie do drugiego pomysłu.

Innym pomysłem byłoby posiadanie pewnego rodzaju serwera w grze, do celów testowych, który jest w stanie przetwarzać żądania (np. Za pośrednictwem interfejsu API REST) ​​i który działa na podmioty. Prośby mogą wyglądać następująco: przesuń w lewo, skocz, obróć o X stopni, zmień rzutnię itp. Dzięki takiemu podejściu możesz także wykonać „sprawdzenie”, czy gra działa zgodnie z oczekiwaniami, albo bezpośrednio sprawdzając stan, albo weryfikując wirtualny dziennik zdarzeń, które miały miejsce. Tego podejścia używają inne narzędzia do testowania interfejsu użytkownika dla telefonów komórkowych (np. Xamarin Test Cloud)

Jeśli chodzi o część kontrolną, jeśli gra jest oparta na dotyku / przeglądarce, możesz zamiast tego symulować działania za pomocą wirtualnego urządzenia dotykowego / wejściowego, ale jest to nieco trudniejsze, w zależności od złożoności działań.

Innym pomysłem, jeśli chodzi o aspekt wizualny, jest zrobienie zrzutów ekranu referencyjnych, zdjęć w początkowej fazie i porównanie ich po tym, jak ta sama sekwencja akcji miała miejsce w nowszej wersji. Porównanie może mieć określony limit odchyleń, aby uchronić się przed drobnymi zmianami. Podczas testów możesz zalogować ekrany, które nie pasują i zobaczyć różnicę. Może się zdarzyć, że ekrany referencyjne wymagają aktualizacji z powodu różnych zmian. W takim przypadku gra może zostać uruchomiona ponownie ze wstępnie ustawionymi akcjami, a obrazy referencyjne zostaną zaktualizowane. Prawdopodobnie nie zadziała to zbyt dobrze z układami cząstek lub losowo generowanymi scenami, chyba że użyjesz poprzedniego pomysłu do ustawienia jakiegoś ziarna, które jest używane do generowania cząstek.

W przypadku dźwięków może to być nieco trudniejsze, ponieważ będzie wymagało „odsłuchu” urządzenia OUT (co nie zawsze jest możliwe IIRC, ponieważ zależy to od sprzętu systemu). Ale jeśli to możliwe, możesz zrobić to samo porównanie oparte na referencjach, jak w przypadku obrazów.

Mam nadzieję, że to rzuci nieco światła na to, jak można zautomatyzować testowanie gry.

Późniejsza edycja: Widzę tylko, że istniało inne powiązane pytanie, które może dać ci wskazówki na temat tego, jak robisz pewne bity: zautomatyzowane testowanie gier

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.