游戏自动化测试框架设计
前言
笔者作为游戏项目组QA,平时负责组内的打包工作,经常出现打包过程正确但实际无法登录进入游戏的情况。这类问题不仅影响正常组内的开发和测试工作,还需要花费大量时间排查SVN提交记录。笔者曾在网易设计过一套自动化框架,使用Jenkins管理任务队列,面向过程的控制结构,表驱动方式控制每次任务执行,并开发了许多辅助测试工具。尽管取得了一些成绩,但也存在插入新任务模块复杂、任务执行状态控制不足等缺陷。
为改善这些问题,笔者希望全新设计的自动化框架能提高任务管理和执行效率。
目标
实现一个多平台的游戏自动化框架,解决之前存在的问题。整体采用如下思路设计开发:
1. 整体思路设计
1.1 混合编程思路
- 主程序入口保持过程化结构,通过调用框架的方法控制测试流程。
- 核心结构采用面向对象设计,便于管理和维护代码。
- 测试方法内部采用过程化编程风格,组织具体执行步骤。
这种混合方法既能保持代码结构清晰,也能利用面向对象和面向过程编程的优势。
1.2 整体结构划分
核心框架
负责接收配置、调动测试和实现插件系统:
- 配置能力:接收测试参数定制,影响框架运行行为。
- 表驱动能力:根据配置选择跑测插件,控制测试内容。
- 插件接口能力:实现插件系统基础。
基础模块
负责通用基础能力模块:
- 数据库模块:数据库操作基础模块。
- 日志模块:记录和管理日志。
插件
- 工具类插件:如截图工具插件。
- 测试类插件:各个测试模块。
2. 模块设计
2.1 核心框架
2.1.1 配置实现
配置文件使用json或YAML文件存储配置参数,配置中主要提供给如下几类信息:
- 配置文件结构
测试环境配置:
- 平台:PC, Android, iOS;
- 分支:trunk_cn, trunk_na;
- 包名:head或者指定;
- 测试优先级:高中低三个队列,一般配置为中;
测试用例配置:
- 用例描述:测试内容和目的简要描述;
- 用例配置:配置测试插件的名称和执行顺序;
执行配置:
- 超时时间:
- 重试次数:
- 重试间隔:
通知配置:
- 结果通知到人:
- 结果通知到群:
- 结果通知到邮箱:
配置管理类
提供加载用户配置信息与访问配置参数方法。
2.1.2 表驱动实现
实现测试用例配置中的测试用例插件的有序加载、调用和卸载。
- 测试插件信息数据结构
2.1.3 插件接口实现
2.2 基础模块
数据库模块的设计细节
2.3 插件系统
加载、管理和调用插件,确保系统的扩展性和灵活性。
生成唯一task_id。task_id会根据跑测平台,分支等再次细分原子任务id:atom_task_id,该id将作为Jenkins执行任务的最小id存在,并与Jenkins任务一一对应。
本文由作者按照 CC BY 4.0 进行授权