代码之家  ›  专栏  ›  技术社区  ›  MrValdez

自动测试游戏

  •  29
  • MrValdez  · 技术社区  · 16 年前

    问题

    我相信你可以单元测试游戏引擎的很多功能(联网、对象创建、内存管理等),但是有可能自动测试实际的游戏本身吗?

    介绍

    在游戏开发中,引擎只是游戏的一个平台。你可以把游戏引擎想象成操作系统,把游戏想象成操作系统运行的软件。游戏可以是脚本的集合,也可以是游戏引擎中的实际子例程。

    可能的答案

    我的想法是:

    然后,创建一个裸骨层,其中包含一对化身/用户可以与之交互的对象。从小处开始,然后随着更多交互的发展,将对象添加到级别中。

    10 回复  |  直到 14 年前
        1
  •  8
  •   Anthony Cramp    15 年前
        2
  •  4
  •   MrValdez    8 年前

    暴动游戏有一个 article 使用自动测试的传奇联盟(LoL),一个多人在线RTS游戏。

    据开发者介绍,游戏代码和游戏平衡每天都有很多变化。他们构建了一个Python测试框架,基本上是一个简单的游戏客户端,它向运行LoL游戏服务器实例的持续集成服务器发送命令。然后服务器向测试框架发送命令的效果,允许测试响应。

    该框架提供了一个事件队列,用于记录特定时间点的事件、数据和效果。文章称之为“快照”。


    安装程序
    1赋予角色能力。

    三。在中间车道上制造一个怪物。(在LoL的上下文中,爬行动物是弱的、不可控的角色,是每个团队军队的一部分。它们基本上是佳能的素材,是敌军经验和黄金的来源。但如果不加以控制,他们可以压倒对方。) 4将角色传送到中线。


    1拍摄所有变量的快照(例如玩家、敌人和普通角色的当前生命)。
    2施咒。
    三。激活对敌人角色的法术效果(例如,有一些法术会在命中时触发)。
    4重置该法术的冷却时间,以便可以立即再次施放。
    5施咒。
    6激活法术对怪物的效果(在LoL的上下文中,大多数法术在怪物身上有不同的计算)。 7再拍一张快照。

    验证


    本文展示了从普通游戏客户端查看测试服务器时,可以提取测试的视频。

        3
  •  2
  •   MrValdez    16 年前

    在开发的游戏性方面,值是如此随机,所以测试绝对值是一个牵强的想法

    但我们可以测试确定性值。例如,一个单元测试可能让Guybrush Threepwood向一扇门移动(寻路),打开门(使用命令),失败因为他在他的库存中没有钥匙(反馈),选择门钥匙(寻路+库存管理),然后最后打开门。

    这只是游戏中单元测试的一个想法。我想知道其他的想法,因此,这个职位的动机。

        4
  •  2
  •   David Sykes    16 年前

    我曾经做过类似于你的想法的事情,它非常成功,尽管我怀疑它实际上更像是一个系统测试而不是一个单元测试。正如您所建议的,随机数生成器必须以相同的值作为种子,并且每次必须生成相同的序列。 最大的问题是游戏设计的改变会使脚本失效。

    如果你的裸体房间包含独立于一般游戏的逻辑,那么它可以很好地工作。引擎可以在没有任何ui的情况下启动,并在初始化完成后立即启动脚本。一路上的碰撞测试会很简单,但是更复杂的测试,比如让角色保持在正确的位置,会更复杂。如果脚本的录制足够简单(它们在我的系统中),那么它们可以非常容易地更新,并且可以非常快速地设置用于测试专门行为的特殊脚本。我的系统还有一个额外的优点,那就是它可以在游戏测试期间使用,而且记录的事件的确切顺序使bug修复更容易。

        5
  •  2
  •   Community Egal    7 年前

    一篇来自 Power of Two Games Games From Within 在另一个答案中已经提到了,但我建议阅读那里的所有内容(或几乎所有内容),因为它们都写得非常好,直接应用于游戏开发。这个 article on Assert 特别好。你也可以访问他们以前的网站 Games From Within Test Driven Development ,这是单元测试的极限。

    Personally, I prefer WinUnit .

        6
  •  1
  •   Anders Sandvig    16 年前

    如果您正在测试渲染引擎,我想您可以渲染特定的测试场景,做一个屏幕截图,并将它们与参考测试渲染进行比较。这样你就可以通过视觉检测引擎的变化是否会破坏任何东西。您可以为声音引擎甚至动画编写类似的测试(通过比较一系列帧)。

        7
  •  1
  •   Joel Martinez    16 年前
        8
  •  1
  •   dash-tom-bang    15 年前

    http://flea.sourceforge.net/gameTestServer.pdf

    术语“单元测试”意味着“单元”正在被测试。这是一回事。如果您正在进行更高级别的测试(例如,同时进行多个系统),通常这称为功能测试。对一个游戏进行单元测试是可能的,但是你不能真正的为了好玩而进行测试。

    决定论是没有必要的,只要你的测试可以是模糊的。例如,“角色受伤了吗”而不是“角色失去14.7点生命值了吗”。

        10
  •  0
  •   lomaxx    16 年前

    这并不能回答你的问题,但我在听一个关于 Pex from microsoft 这和你提出的解决方案有相似之处,当我听的时候,我记得我在想,看看它是否能够测试游戏会非常有趣。我不知道它是否能具体地帮助您,但是您也许可以看看他们使用的一些想法,并将其应用到您的单元测试中。