oyun testi nasıl otomatikleştirilir?


13

Bu test alanında yeniyim. Birlik motoru kullanarak basit bir oyun geliştirdim ama test etmek istiyorum.

Selenyum ile kontrol ettim ama oyunda gerçekleştirilen eylemin bilgisine sahip olan iade edilen değeri nasıl elde edeceğimi bilmiyorum. Eğer değeri elde edebiliyorsam, buna göre gerekli eylemi yapabiliyorum.


4
Bu oldukça ilginç bir soru. Şahsen, oyun geliştirmede birim testinin oldukça az takdir edildiğini düşünüyorum. Bununla birlikte, oyun geliştirmede uygulanması gerçekten zor olan otomatik entegrasyon testine daha çok ilgi duyuyorsunuz. Özellikle oyun rastgele kullanılırken.
Philipp

Testi ciddiye almak ve o iş için araçlara bakmak için aksesuarlar. Bunun yerine SO'ya sormak isteyebilirsiniz - selenyumda çok fazla Soru-Cevap var. @Philipp'in belirttiği gibi, bazı oyun testlerinin otomatikleştirilmesi oldukça zordur; yani görsel efektleri kontrol etmek için henüz gözetimsiz bir test görmedim.
Pikalek

1
Neyi test etmek istediğiniz açık değil, ancak oyundan bağımsız olarak test edilebilecek bir değer arıyorsunuz - bir işlev tarafından döndürülen bir değer. Ve eğer öyleyse, bu işlevi birim olarak test edebilirsiniz ve oyunda kullanılıp kullanılmadığı önemli değildir. Bunun nasıl yapılacağı sizin için net değilse, bize bildirin ve birim testini içeren bir cevap yazmaya çalışacağım.
MVCDS

Yanıtlar:


1

Bir oyunu test etmenin birden çok yolu vardır, en çok kullanılan iki yöntemdir: birim ve entegrasyon testi.

İçin birim testOyunun iç işleyişini, aslında çalıştırmadan test ediyorsunuz. Bağımlılıkları soyutlanmış belirli modüller için bunu yapabilirsiniz (örneğin, belirli bir dizi faktöre dayanarak elde ettiğiniz Quest XP'yi hesaplayan mantık; belirli bir sesin çalınıp çalınmadığı). Mantığınızı ne kadar soyutladığınıza bağlı olarak, daha fazlasını test edebilirsiniz, ancak özellikle birlik için, oyun mimarisinin yapılış şekli göz önüne alındığında daha zor olabilir (örneğin, tek davranıştan miras). Bununla birlikte, kompozisyon gibi OOP desenleri uygulayarak, bazen biraz aşırı görünse bile, belirli bir şekilde (örneğin fizik) test edilebilen mantık parçalarını çıkarabilirsiniz. Her şey, ne kadar zamanınız olduğuna, projeyle sıfırdan başlayıp başlamamanıza, ne kadar deneyime sahip olduğunuza vb. Bağlıdır. Genel olarak, Oyunlarda diğer oyun dışı yazılım projelerine kıyasla çok fazla birim testi görülmedi. Bu tür testlerin, taklit ettiğiniz sahte davranışları sağladığınız için otomatikleştirilmesi oldukça kolaydır.

İçin entegrasyon testi , sen etkileşim, belirli bir zamanda "tüm" oyun ile tüm parçaların çalışırken. Test etmek istediğiniz şeylerin derinliğine bağlı olarak, açıkça imkansız olmanın çok kolay olabileceğini görüyorum.

Bir fikir, yaptığı her (en) eylemi kaydeden (yani, canavarı yumuşatma, ses çalma, başlangıç ​​efekti, yumurtlama parçacığı) kaydeden bir "entegrasyon testi" yapısına sahip olmak olacaktır . Belirli bir süre çalıştıktan sonra, belirli bir desenle eşleşip eşleşmediğini görmek için günlükleri kontrol edebilirsiniz (bu aynı zamanda oyunun girdilere bağlı olarak ne kadar rasgele olduğuna da bağlıdır). Şimdi, bu kulağa basit geliyor, ama soru şu: Oyuna istenen eylemleri yapmasını nasıl söylersiniz? Bu da beni ikinci fikre getiriyor.

Başka bir fikir de, test amacıyla, istekleri işleyebilen (örn., Bir REST API aracılığıyla) ve varlıklar üzerinde etkili olan bir çeşit sunucuya sahip olmak olacaktır. İstekler şu gibi şeyler olabilir: sola hareket etme, atlama, X derece döndürme, görünüm penceresini değiştirme vb. Bu yaklaşımla, doğrudan durumu kontrol ederek veya sanal bir doğrulama yaparak oyunun beklendiği gibi hareket ettiği "kontrolleri" de yapabilirsiniz. gerçekleşen olayların günlüğü. Bu yaklaşım, cep telefonları için diğer UI test araçları tarafından kullanılır (örn. Xamarin Test Cloud)

Kontrol kısmı için, oyununuz dokunmatik / tarayıcı tabanlıysa, bunun yerine eylemleri sanal bir dokunmatik / giriş cihazı üzerinden simüle edebilirsiniz, ancak bu, eylem karmaşıklığına bağlı olarak biraz daha zordur.

Görsel yönüyle ilgili başka bir fikir, başlangıç ​​aşamasında bazı referans ekran görüntüleri, görüntüler almak ve daha yeni bir yapıda aynı eylem dizisi gerçekleştikten sonra bunları karşılaştırmaktır. Karşılaştırma, küçük değişikliklere karşı korunmak için belirli bir sapma payına sahip olabilir. Testler sırasında, uymayan ekranları günlüğe kaydedebilir ve farkı görebilirsiniz. Farklı değişikliklerden dolayı referans ekranlarının güncellenmesi gerekebilir. Bu durumda, oyun önceden ayarlanmış eylemlerle tekrar çalıştırılabilir ve referans görüntüler güncellenebilir. Parçacıklar oluşturmak için kullanılan bir çeşit tohum ayarlamak için önceki fikri kullanmazsanız, bu muhtemelen parçacık sistemleri veya rastgele oluşturulmuş sahnelerle çok iyi çalışmaz.

Sesler için, biraz daha zor olabilir, çünkü OUT cihazını "dinlemeyi" içerecektir (bu her zaman mümkün değildir IIRC, sistemin donanımına bağlıdır). Ancak, mümkünse resimlerle aynı referans tabanlı karşılaştırmayı yapabilirsiniz.

Umarım bu, oyun testini nasıl otomatik hale getirebileceğinize ışık tutar.

Daha Sonra Düzenleme: Sadece belirli bitleri nasıl yapacağınıza dair bazı işaretler verebilecek başka bir ilgili soru olduğunu görüyorum: Oyunların otomatik testi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.