游戏项目自动化测试的一些思考和想法

  1. 自动化测试框架需要什么样的前置条件
  2. 对于游戏项目而言,什么样的测试比较合适
  3. 如何构建更健壮、效率更高的自动化测试
    1. Actor Test
    2. 面对与动画、时间相关的行为该如何测试
    3. 该使用什么粒度的测试
  4. 自动化测试作为构建系统的一部分
  5. 参考资料

自动化测试框架需要什么样的前置条件

  • 自动化测试代码需要能够独立地启动游戏,加载所需的资源,并直接跳过不相关的流程,直接步进到需要测试的流程。这个过程越短越好,因此,需要系统在设计上保证不同流程的解耦。例如系统能够在没有登录的状态下直接进入一个游戏场景,并根据配置生成相应的角色和系统。
  • 对于联网游戏,自动化测试代码需要能够独立地生成服务器进程和多个客户端进程,并在客户端进程与服务端进程连接后,分别操纵不同的进程做不同的操作。虚幻引擎的Dedicated Server框架,就保证了这种能力。

对于游戏项目而言,什么样的测试比较合适

  • 一些体验性的、视觉的测试没法做自动化测试,但游戏项目仍然有很多部分可以做自动化测试。
  • 如果一个测试耗时太长,并且涉及进程太多以及易于受到偶然因素影响,那么说明这个测试设计得并不是很好。
  • 如果一个特性还处于prototype阶段,那么没必要为其设计自动化测试代码。因此对于某些新特性而言,先设计测试用例的测试驱动开发方式可能会水土不服,因为有些原型阶段的特性很可能后面都不需要。

如何构建更健壮、效率更高的自动化测试

Actor Test

Sea of Thieves团队的自动化测试实践[1]中提出了一个概念叫Actor Test, 这是一种介于单元测试和集成测试中间的状态。Actor Test破坏了不少集成测试的标准:

  • 例如启动进程、初始化代码、加载基础资源之后,依次创建若干个不同的集成测试场景,而不是每个集成测试都需要重启进程。
  • 让性质接近的行为在同一张集成测试场景中测试,而不是严格地遵守每个测试用例不共用任何资源。
  • 让一些初始化耗时巨大的模块在不同集成测试场景中复用,例如虚幻引擎的角色蓝图。

面对与动画、时间相关的行为该如何测试

  • 一些跟时间有关的测试,使用手动调用引擎的Tick函数以代替真的执行特定时间。
  • 一些行为的检测逻辑,可以使用轮询方式去调用。例如玩家施放了某个技能,判断其是否正确释放,如果检测N秒后行为是否正确释放,那么为行为添加动画、微调行为的释放前摇会不断地破坏这个测试用例。而更健壮的检测逻辑应该是,监听技能释放事件,当技能释放后对行为进行检测。这样可以使得测试代码更加健壮,不容易受到数据迭代的影响。

该使用什么粒度的测试

  • 复杂的集成测试可以少量地用于行为成功的测试用例
  • 边界条件、异常行为通常使用Actor Test和Unit Test去覆盖。

自动化测试作为构建系统的一部分

自动化测试代码集除了可以让开发人员在自己本地调用以外,还可以作为构建系统的一部分。让自动化测试代码每隔一段时间自动执行一遍,捕捉到测试失败后:

  • 阻塞构建,防止构建出带缺陷的版本。
  • 阻塞提交,防止后续新加入的代码引入更多的问题。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值