วิธีการทดสอบเกมอัตโนมัติ


13

ฉันยังใหม่กับการทดสอบนี้ ฉันเพิ่งพัฒนาเกมพื้นฐานโดยใช้เอ็นจิ้น Unity แต่ฉันต้องการทดสอบ

ฉันได้ตรวจสอบกับซีลีเนียม แต่ฉันไม่รู้วิธีรับค่าที่ส่งคืนซึ่งมีข้อมูลของการกระทำที่กำลังดำเนินการในเกม หากฉันสามารถรับค่าได้ฉันจะสามารถดำเนินการที่จำเป็นตามนั้นได้


4
นี่เป็นคำถามที่น่าสนใจทีเดียว โดยส่วนตัวฉันคิดว่าการทดสอบหน่วยค่อนข้างไม่ค่อยนิยมในการพัฒนาเกม อย่างไรก็ตามดูเหมือนว่าคุณสนใจการทดสอบการรวมอัตโนมัติมากขึ้นซึ่งมักจะยากที่จะนำไปใช้ในการพัฒนาเกม โดยเฉพาะอย่างยิ่งเมื่อเกมใช้การสุ่ม
Philipp

อุปกรณ์ประกอบฉากสำหรับการทดสอบอย่างจริงจังและค้นหาเครื่องมือสำหรับงานนั้น คุณอาจต้องการถามเกี่ยวกับ SO แทน - มีคำถามและคำตอบมากมายเกี่ยวกับซีลีเนียม ดังที่ @Philipp กล่าวถึงการทดสอบเกมบางประเภทนั้นเป็นเรื่องยากที่จะทำให้เป็นแบบอัตโนมัติ เช่นฉันยังไม่ได้เห็นการทดสอบแบบไม่มีผู้ดูแลสำหรับการตรวจสอบเอฟเฟ็กต์ภาพ
Pikalek

1
ยังไม่ชัดเจนว่าคุณต้องการทดสอบอะไร แต่ดูเหมือนว่าคุณกำลังมองหาค่าที่อาจทดสอบได้อย่างอิสระจากเกม - ค่าที่ส่งคืนโดยฟังก์ชัน และถ้าเป็นเช่นนั้นคุณสามารถทดสอบฟังก์ชั่นนี้และไม่สำคัญว่ามันจะถูกใช้ในเกมหรือไม่ หากยังไม่ชัดเจนสำหรับคุณเกี่ยวกับวิธีการทำโปรดแจ้งให้เราทราบและฉันจะพยายามเขียนคำตอบที่เกี่ยวข้องกับการทดสอบหน่วย
MVCDS

คำตอบ:


1

มีหลายวิธีในการทดสอบเกมส่วนใหญ่ใช้สองวิธีคือ: การทดสอบหน่วยและการรวม

สำหรับการทดสอบหน่วยคุณกำลังทดสอบการทำงานภายในของเกมโดยไม่ต้องเรียกใช้งานจริง คุณสามารถทำสิ่งนี้สำหรับโมดูลเฉพาะที่มีการพึ่งพาแยกออกไป (เช่นตรรกะที่คำนวณ Quest XP ที่คุณได้รับโดยพิจารณาจากปัจจัยที่กำหนด; คุณสามารถทดสอบได้มากขึ้น แต่เพื่อความเป็นเอกภาพโดยเฉพาะมันอาจจะยากขึ้นเมื่อวิธีที่สถาปัตยกรรมเกมนั้นเสร็จสิ้น (เช่นสืบทอดจาก monobehaviour) อย่างไรก็ตามการใช้รูปแบบ OOP เช่นองค์ประกอบคุณสามารถแยกบิตของตรรกะที่สามารถทดสอบในลักษณะที่กำหนดขึ้นมา (เช่นฟิสิกส์) แม้ว่าบางครั้งมันจะถูกมองว่ารุนแรงมาก ทุกอย่างขึ้นอยู่กับว่าคุณมีเวลามากแค่ไหนไม่ว่าคุณจะเริ่มต้นจากโครงการหรือไม่ประสบการณ์ที่คุณมี ฯลฯ โดยทั่วไปแล้ว ไม่เห็นการทดสอบหน่วยในเกมมากเมื่อเทียบกับโครงการซอฟต์แวร์อื่นที่ไม่ใช่เกม การทดสอบประเภทนี้ค่อนข้างง่ายที่จะทำให้เป็นอัตโนมัติเมื่อคุณแสดงพฤติกรรมที่เย้ยหยันที่คุณจำลอง

สำหรับการทดสอบบูรณาการคุณโต้ตอบกับเกม "ทั้ง" ในเวลาที่กำหนดเมื่อทุกส่วนทำงาน ขึ้นอยู่กับความลึกของสิ่งที่คุณต้องการทดสอบฉันเห็นว่ามันอาจเป็นไปไม่ได้เลย

หนึ่งความคิดที่จะให้มีการทดสอบ "บูรณาการ" สร้างซึ่งบันทึกทุก (ส่วนใหญ่) การกระทำมันไม่ (เช่นพล่านมอนสเตอร์เล่นเสียงเริ่มต้นผลพล่านอนุภาค) หลังจากรันตามเวลาที่กำหนดคุณสามารถตรวจสอบบันทึกเพื่อดูว่าตรงกับรูปแบบที่กำหนดหรือไม่ (ขึ้นอยู่กับว่าเกมนั้นสุ่มขึ้นอยู่กับอินพุต) ตอนนี้ฟังดูง่าย แต่คำถามคือคุณบอกให้เกมทำสิ่งที่ต้องการได้อย่างไร ซึ่งนำฉันไปสู่ความคิดที่สอง

ความคิดอื่น ๆ ก็คือจะมีเซิร์ฟเวอร์ในเกมอีกครั้งเพื่อวัตถุประสงค์ในการทดสอบซึ่งสามารถประมวลผลคำขอ (เช่นผ่าน REST API) และดำเนินการตามเอนทิตี การร้องขออาจเป็นสิ่งที่ต้องการ: เลื่อนไปทางซ้าย, กระโดด, หมุน X องศา, เปลี่ยนวิวพอร์ต, ฯลฯ ด้วยวิธีนี้คุณยังสามารถทำการ "ตรวจสอบ" ว่าเกมทำหน้าที่ได้ตามที่คาดหวังโดยตรวจสอบสถานะโดยตรงหรือตรวจสอบสถานะเสมือน บันทึกเหตุการณ์ที่เกิดขึ้น วิธีการนี้ใช้โดยเครื่องมือทดสอบ UI อื่น ๆ สำหรับโทรศัพท์มือถือ (เช่น Xamarin Test Cloud)

ในส่วนของการควบคุมหากเกมของคุณใช้ระบบสัมผัส / เบราว์เซอร์คุณสามารถจำลองการกระทำผ่านอุปกรณ์สัมผัส / อินพุตเสมือนได้ แต่สิ่งนี้จะยากขึ้นอยู่กับความซับซ้อนของการกระทำ

อีกแนวคิดหนึ่งที่เกี่ยวกับมุมมองของภาพคือการจับภาพหน้าจออ้างอิงภาพในช่วงเริ่มต้นและเปรียบเทียบมันหลังจากลำดับการกระทำเดียวกันที่เกิดขึ้นในงานสร้างใหม่ การเปรียบเทียบสามารถมีค่าเผื่อเบี่ยงเบนเฉพาะเพื่อป้องกันการเปลี่ยนแปลงเล็กน้อย ในระหว่างการทดสอบคุณสามารถบันทึกหน้าจอที่ไม่ตรงกันและเห็นความแตกต่าง อาจเป็นกรณีที่หน้าจอการอ้างอิงจำเป็นต้องได้รับการปรับปรุงเนื่องจากการเปลี่ยนแปลงที่แตกต่างกัน ในกรณีดังกล่าวเกมสามารถทำงานได้อีกครั้งพร้อมการกระทำที่กำหนดไว้ล่วงหน้าและภาพอ้างอิงจะได้รับการปรับปรุง สิ่งนี้อาจทำงานได้ไม่ดีนักกับระบบอนุภาคหรือฉากที่สร้างแบบสุ่มเว้นแต่คุณจะใช้ความคิดก่อนหน้านี้เพื่อตั้งค่าเมล็ดพันธุ์บางชนิดที่ใช้ในการสร้างอนุภาค

สำหรับเสียงมันอาจจะยากขึ้นเล็กน้อยเพราะมันจะเกี่ยวข้องกับ "การฟัง" กับอุปกรณ์ OUT (ซึ่งไม่ได้เป็น IIRC ที่เป็นไปได้เสมอไปเพราะขึ้นอยู่กับฮาร์ดแวร์ของระบบ) แต่ถ้าเป็นไปได้คุณสามารถทำการเปรียบเทียบแบบอ้างอิงเช่นเดียวกับภาพ

ฉันหวังว่าสิ่งนี้จะให้ความกระจ่างเกี่ยวกับวิธีการทดสอบเกมโดยอัตโนมัติ

แก้ไขภายหลัง: ฉันเพิ่งเห็นว่ามีคำถามอื่นที่เกี่ยวข้องซึ่งอาจให้คำแนะนำคุณเกี่ยวกับวิธีที่คุณทำบิตบางอย่าง: การทดสอบอัตโนมัติของเกม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.