文章

游戏自动化测试框架设计

前言

笔者作为游戏项目组QA,平时负责组内的打包工作,经常出现打包过程正确但实际无法登录进入游戏的情况。这类问题不仅影响正常组内的开发和测试工作,还需要花费大量时间排查SVN提交记录。笔者曾在网易设计过一套自动化框架,使用Jenkins管理任务队列,面向过程的控制结构,表驱动方式控制每次任务执行,并开发了许多辅助测试工具。尽管取得了一些成绩,但也存在插入新任务模块复杂、任务执行状态控制不足等缺陷。

为改善这些问题,笔者希望全新设计的自动化框架能提高任务管理和执行效率。

目标

实现一个多平台的游戏自动化框架,解决之前存在的问题。整体采用如下思路设计开发:

1. 整体思路设计

1.1 混合编程思路

  1. 主程序入口保持过程化结构,通过调用框架的方法控制测试流程。
  2. 核心结构采用面向对象设计,便于管理和维护代码。
  3. 测试方法内部采用过程化编程风格,组织具体执行步骤。

这种混合方法既能保持代码结构清晰,也能利用面向对象和面向过程编程的优势。

1.2 整体结构划分

核心框架

负责接收配置、调动测试和实现插件系统:

  1. 配置能力:接收测试参数定制,影响框架运行行为。
  2. 表驱动能力:根据配置选择跑测插件,控制测试内容。
  3. 插件接口能力:实现插件系统基础。
基础模块

负责通用基础能力模块:

  1. 数据库模块:数据库操作基础模块。
  2. 日志模块:记录和管理日志。
插件
  1. 工具类插件:如截图工具插件。
  2. 测试类插件:各个测试模块。

2. 模块设计

2.1 核心框架

2.1.1 配置实现

配置文件使用json或YAML文件存储配置参数,配置中主要提供给如下几类信息:

  1. 配置文件结构
    1. 测试环境配置:

      1. 平台:PC, Android, iOS;
      2. 分支:trunk_cn, trunk_na;
      3. 包名:head或者指定;
      4. 测试优先级:高中低三个队列,一般配置为中;
    2. 测试用例配置:

      1. 用例描述:测试内容和目的简要描述;
      2. 用例配置:配置测试插件的名称和执行顺序;
    3. 执行配置:

      1. 超时时间:
      2. 重试次数:
      3. 重试间隔:
    4. 通知配置:

      1. 结果通知到人:
      2. 结果通知到群:
      3. 结果通知到邮箱:
  2. 配置管理类

    提供加载用户配置信息与访问配置参数方法。

2.1.2 表驱动实现

实现测试用例配置中的测试用例插件的有序加载、调用和卸载。

  1. 测试插件信息数据结构
2.1.3 插件接口实现

2.2 基础模块

数据库模块的设计细节

2.3 插件系统

加载、管理和调用插件,确保系统的扩展性和灵活性。

生成唯一task_id。task_id会根据跑测平台,分支等再次细分原子任务id:atom_task_id,该id将作为Jenkins执行任务的最小id存在,并与Jenkins任务一一对应。

本文由作者按照 CC BY 4.0 进行授权