如何自动化游戏测试?


13

我是这个测试领域的新手。我刚刚使用统一引擎开发了一款基本游戏,但我想对其进行测试。

我已经检查过硒,但是我不知道如何获取返回的值,该值包含游戏中正在执行的动作的信息。如果我能够获得价值,那么我将能够相应地采取必要的行动。


4
这是一个非常有趣的问题。我个人认为,单元测试在游戏开发中没有得到足够的重视。但是,听起来您对自动集成测试更感兴趣,这在游戏开发中通常很难实现。尤其是当游戏使用随机性时。
菲利普

认真对待测试并为该工作寻找工具的道具。您可能想问一下SO-他们对硒有很多问答。正如@Philipp所提到的,某些类型的游戏测试通常很难自动化。即我还没有看到检查视觉效果的无人值守测试。
皮卡列克

1
尚不清楚您要测试什么,但似乎您正在寻找一个可以独立于游戏进行测试的值-函数返回的值。如果是这样,您可以对该功能进行单元测试,无论是否在游戏中使用它都无关紧要。如果您不清楚该怎么做,请告诉我们,我将尝试写一个涉及单元测试的答案。
MVCDS

Answers:


1

有多种测试游戏的方法,最常用的两种是:单元测试和集成测试。

用于单元测试您正在测试游戏的内部运作方式,而没有实际运行它。您可以对已提取依赖关系的特定模块执行此操作(例如,基于给定的一组因素来计算获得的Quest XP的逻辑;是否播放给定的声音)。根据抽象逻辑的多少,您可以进行更多测试,但是特别是为了统一起见,考虑到完成游戏体系结构的方式(例如,从单行为继承),可能会更加困难。不过,应用诸如组合的OOP模式,您可以提取可以以确定性方式(例如物理)测试的逻辑位,即使有时可以将其视为有点极端。这完全取决于您有多少时间,是否从头开始进行该项目,您有多少经验,等等。总的来说,我还没有 与其他非游戏软件项目相比,游戏中的单元测试很多。当您提供模拟行为时,这种测试非常容易自动化。

对于集成测试,当所有部分都在运行时,您可以在给定的时间与“整个”游戏进行交互。根据您要测试的事物的深度,我发现完全不可能完全容易。

一种想法是建立一个“集成测试”构建,该构建记录它所做的每个(大多数)动作(即,产生怪物,播放声音,开始效果,产生粒子)。在运行了给定的时间后,您可以检查日志以查看它是否与给定的模式匹配(这也取决于游戏基于输入的随机性)。现在,这听起来很简单,但问题是:您如何告诉游戏进行所需的动作?这使我想到了第二个想法。

同样,另一个想法是在游戏中拥有一种用于测试目的的服务器,该服务器能够处理请求(例如,通过REST API),并且对实体起作用。这些请求可能是诸如:向左移动,跳转,旋转X度,更改视口等。使用这种方法,您还可以通过直接检查状态或验证虚拟状态来“检查”游戏是否按预期运行发生事件的日志。其他移动设备的UI测试工具(例如Xamarin Test Cloud)也使用了这种方法

对于控制部分,如果您的游戏是基于触摸/浏览器的,则可以改为通过虚拟触摸/输入设备来模拟操作,但这要困难一些,具体取决于操作的复杂性。

关于视觉方面,另一个想法是在初始阶段获取一些参考屏幕截图,图像,并在更新的版本中发生相同的动作序列后将它们进行比较。比较可以具有特定的偏差余量,以防止微小的变化。在测试期间,您可以记录不匹配的屏幕并查看差异。由于不同的更改,可能需要更新参考屏幕。在这种情况下,可以使用预设动作再次运行游戏,并更新参考图像。除非您使用先前的想法来设置用于生成粒子的某种种子,否则这可能不适用于粒子系统或随机生成的场景。

对于声音而言,它可能会更难一点,因为它将涉及“监听” OUT设备(IIRC并不总是可能的,因为它取决于系统的硬件)。但是,如果可能的话,您可以进行与图像相同的基于参考的比较。

我希望这为您如何实现游戏测试自动化提供了一些启示。

以后的编辑:我只是看到还有一个相关的问题,可能会给您一些有关如何做某些事情的指示:自动测试游戏

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.