======自动化测试====== --- //[[shenmo@riceman.com.cn|沈默]] 2016/12/25 22:32// [[自动化测试手册]] =====用途===== 自动化测试的功能把所有反复执行的功能测试/量化测试/美术测试工作全部交给机器执行,极大提高测试的效率和准确性。 - 测试用例自动化,每个模块按照测试用例编写测试方法,一旦完成极大提高测试效率 - 协议冒烟测试(Smoke test),可以快速测试完所有的协议是否通畅。尤其是做一些服务器底层改动是,可以对上线安全做第一道保护 - 数值测试模拟,模拟玩家的游戏行为,制定一定的练级策略,检验一段时间之后的数值瓶颈和升级效果。还可以进行玩法模式分析,类似文字冒险游戏(MUD)的Trigger编写。 - 方便的测试指令和属性修改。不在需要记住繁多的测试指令,只需要通过列表进行选择,就可以完成道具添加,数值修改等GM功能,不再因为测试环境不完备而卡住。(在涂色方面已有类似经验) - 美术资源量化测试,通过一个简单的脚本,可以遍历测试所有的场景,角色,技能 在各种情况的表现。无需人肉打怪,只需观察记录即可。(FF项目已有类似经验) - LOG追踪和分析,脚本执行后会把执行结果汇总到服务器备案,做进一步分析。 =====基本原理===== 自动测试主要由**测试任务**和**测试指令**构成 ====测试任务==== 测试任务是一个树形结构,由 **任务目录** 和 **子任务** 组成 每个 任务目录 下面都可以有若干 子目录 或 子任务 非常类似于Windows的资源管理器 {{:pasted:20161225-225642.png}} 子任务则是测试条目的容器,每个子任务里包含至少一个测试条目 //但值得注意的是,子任务/子目录的存在并不是 windows文件夹那种存在于某个目录下,他们是独立存在的,和上层目录的关系是被引用。// - 子任务可以不被任何目录包含 - 子任务可以被多个目录同时包含 ====测试指令==== 测试指令是具体执行的某一项测试工作 测试指令可以: 1、 执行一条协议 2、 点击一个页面按钮 3、 基本的条件判断 4、 嵌套另外一个测试任务 5、 给出提示和选择 6、 执行完等待若干时间 7、 打印我们需要的LOG 8、 执行Console指令 ... **指令执行**: 指令的执行有可能同步结束(界面点击),也可能异步结束(网络请求)。甚至可能发生失败(网络错误/条件不满足) 需要关心每个指令的执行结果,保证他们在正确完成之后再进行下面一条指令 如果指令失败,会进入中断状态,根据表格配置的中断处理方式进行选择 忽略 或 停止 测试。[[generated:INTERRPUT_MODE]] 所以这个自动化测试系统希望运行在大流程比较通顺的情况下 =====UI界面===== ====主界面==== {{:pasted:20161226-000454.png}} ** 第一排 ** * 左上按钮 打开任务选择界面 * 中上标题,当前所在目录,多级显示,若过长则滚动/缩放显示 * 右上 按钮1: 最小化/完整模式/精简模式 三种姿态循环切换 - 最小化只保留一个icon,但需要显示出是否在运行的状态 - 还原为标准状态 - 精简模式,只显示这个按钮和当前执行的任务内容 {{:pasted:20161226-114230.png}} * 右上 按钮2(待定): 退出 结束当前正在执行的条目,并退出 ** 第二排 ** * 当前任务,若过长则滚动/缩放显示 , * 任务进度,当前进度和总数 ** 第三排 ** 播放器按钮 * 回到起点:需要暂停状态,回到第一步开始执行(限定在当前的子任务当中,如果嵌套的子任务,只会回到当前这组的第一个) * 回退:回退一步,需要暂停状态,回到上一步,可长按快进 * 开始/暂停: 执行/暂停任务 * 单步:只执行当前一个条目,如果是嵌套任务,仍然会全部执行 * 前进:到下一个条目,可长按快进 * 结束:暂停,并结束整组操作,会回到从列表选择的任务的第一步。在没有嵌套的情况下,约等于回到起点 ** 第四排 ** * 条目名字,ID * 条目执行状态,倒计时等 执行状态包含 ^ 状态 ^ 说明 ^ | 未开始 | 选中此条目还未执行/或暂停时 | | 进行中 | 正在执行 后面显示执行时间(秒为单位,3位小数) | | 完成 | 成功 (开始显示DelayTime 倒计时 秒为单位,3位小数) | | 失败 | 执行失败 如果忽略显示DelayTime 倒计时 秒为单位,3位小数\\\ 如果可以显示失败原因 | ====任务选择==== **主列表:** 全屏界面 {{:pasted:20161225-232811.png}} **子目录列表:** {{:pasted:20161225-233252.png}} **设计规格** * 目录/返回/子任务 需要用不同的配色/式样以做区分 * 在子目录在底部显示路径 =====数据表===== ====原型表==== **自动化测试任务表** [[generated:automation_task_config]] **自动化测试指令表** [[generated:automation_command_config]] ====枚举==== 指令类型 [[generated:AUTOMATION_COMMAND]] 中断模式 [[generated:INTERRPUT_MODE]] =====其他===== ====输入模式变量==== ===输入=== 可以输入的类型包含 1、是/否,使用确认框 {{:pasted:20161226-141149.png}} 2、(n~m)的数值,使用滑动条 {{:pasted:20161226-141334.png}} 3、1~n的枚举,使用列表选择 {{:pasted:20161226-163927.png}} 4、自由输入,使用输入框 ===自定义变量=== 我们可以通过输入模式,或者指令制定,对某个变量进行复制,从而控制测试的分支和参数 变量为单次测试任务全局生效,进入离开 嵌套任务不会改变变量状态 变量可以作用到条件或指令中,原理就是 直接替换 ===预设变量=== 一些特定的自定义变量为系统保留, 比如%time% %my_character_id% ^ 变量 ^ 效果 ^ | %time% | int形式的时间 | | %time_str% | string形式的时间 | | %my_character_id% | 我的角色ID | | %my_guild_id% | 我的公会ID | | %command_speed% | 播放速度,可以修改之后控制DelayTime的时间 | | %rand[1-10]% | 随机数 | | %rand_float[0-1]% | 随机浮点数 | ====实现思路==== 这个功能较为庞大,但我们可以把它简化为填表和枚举(指令)对应的工作,最大程度做到复用 这个表格理论上人人可以填写,但对于策划来说可能有一些困难。 所以表格填写分配来说 程序40%,策划30%, 测试20%,美术10% ====安全性==== * 此功能必须由服务器验证为GM才可以下放测试脚本 * GM限制为公司IP,不用担心密码泄露等问题