录制回放自动化测试
收藏
我的收藏简介
录制回放能力是小程序提供的一种自动化测试工具,开发者可以将测试操作提前录制好,然后通过回放脚本的方式实现测试目的。
版本支持
使用流程
开启「录制回放能力」
目前【录制回放能力】仍处于「实验阶段」,所以需要用户主动开启。
- •开启入口:「目录」-> 「工具」-> 「【实验】开启录制回放」。
- •开启能力后,有两个入口进入「录制回放」面板。
- ◦「目录」-> 「工具」-> 「自动化测试」。
- ◦调试器活动栏点击「实验室」按钮。
录制过程
- 1.进入「录制回放」面板后,点击创建测试文件,可以直接创建(初始化 case)或先创建 case 管理文件夹后结构化创建,下面以直接创建为例介绍。
- 2.用例初始化完成后,可以修改用例的基础配置信息:
- •最长等待时间:录制步骤的最大间隔,用于统一处理录制周期过长导致回放缓慢的问题。
- •清除缓存:在录制用例前清除指定类型的缓存,以保证初始化环境一致,一般建议选择全部清除。
确认用例信息无误后,可点击
录制
按钮触发录制行为,此时模拟器将以 用例初始化时正在渲染的页面
为录制的首屏页面重新加载。
- 3.录制启动后,模拟器上方将提示进入录制模式,此时非预期的操作行为(主动点击编译、刷新、切换基础库等)均会导致录制停止,在录制完成后开发者可手动点击停止结束录制。也可在中断后点击
重新录制
按钮再次录制。
- 4.在录制过程中,可录制的行为(可录制行为的集合,请参考下面 “支持的能力列表”)将被记录在
用例详情
栏目中,点击这些录制的事件,可以看到事件的详细信息。部分事件属性是可修改的,如事件的描述、等待时间等(根据事件类型修改的属性不同)。等待时间的含义:在执行这一个录制事件前,需要等待多久,用于控制回放的节奏保证稳定性。
- 5.在录制过程中,除了正常在页面中的交互可以触发事件录制,也可以主动插入测试断言,点击模拟器右上角按钮可以选择断言的类型:
其中
Data 快照
为页面的 data 数据的断言,ttml 快照
为页面整体结构的断言。检查元素
为页面某个元素可见性及其内容的断言,这也是目前最常用的断言方式。以点击 检查元素
为例,页面将开启审查元素模式:选中需要断言的元素后,
用例详情
栏目中会增加录制到的断言事件。对于元素断言事件,除了可以只断言元素是否存在,也可以在详情中切换断言类型为
assertText
,可以同时开启对元素内容的检查(在回放中)。
- 6.录制过程中可选择对页面进行截图操作,但回放时并不会比对截图的一致性,可以人工判断截图的效果。
- 7.当完成录制后,IDE 将会生成录制结果的配置文件,请不用删除或人工修改内容,以确保用例的准确性。
回放流程
- 1.在运行环境中选择要回放的端类型(模拟器/真机),然后点击回放按钮启动回放。建议模拟器中回放结果稳定后再启动真机回放。
- 2.若选择模拟器回放,模拟器将重新启动,
用例详情
栏目中会实时展示回放状态,若录制事件回放失败则会中止当前 case 的回放。回放完成后,结果记录在右侧面板中的 回放记录
中,点击 “详情” 按钮可以看到详细的回放结果。
- 3.若选择真机回放,则会调起真机调试二维码,扫码后可进入真机回放流程。在回放过程中同样会将结果显示在
用例详情
栏目中。回放完成后,真机调试链路将断开。
- 4.在不考虑链路异常情况下(如系统 Bug、真机连接异常),指令回放失败主要分为两种情况:
- •录制的断言行为,与回放时不一致(如录制时选中了某一个元素,但回放的时候该元素不存在)。
- •录制的事件行为,与回放时所处的页面不一致(如录制的时候记录在 A 页面点击元素,但回放的时候点击元素发生在了 B 页面)。
- 5.如果以文件夹方式管理用例,支持基于文件夹的批量回放,此时文件夹内的用例将依次回放。
支持的能力列表
能力列表
能力类型 | 能力 | 子能力 | 解释 |
基础配置 | 清除缓存 | 全部清除 | 清除所有缓存,保证回放环境与录制环境的初始化状态一致 |
指定清除,可选类型:
| 指定清除某一类缓存 | ||
最长等待时间 | - | 设置录制步骤间隔的最长等待时间(可以统一处理录制过程中操作过慢的场景) | |
可录制的行为 | 页面事件(前端) |
| 录制时收集在小程序页面中触发的基础用户事件,在回放时进行触发 |
页面事件(客户端) | 路由事件(UI 触发):
| 录制时收集在 Native UI 上操作的路由事件,在回放时进行触发 | |
页面操作(客户端) | 小程序页面内操作:
| 录制时收集在 Native UI 上操作的点击行为,在回放时进行触发 | |
截图行为 | - | 可以录制时触发截图操作,截取当前页面图片 | |
可断言的场景 | data 快照断言 | 全量比对 | 对 Page 中的 data 数据进行全量对比,判断是否与录制时相同。 |
TTML 结构断言 | 全量比对 | 对页面结构的 TTML 字符串进行全量比对 | |
元素断言 | 存在性断言 | 检查录制时选中的元素是否存在 | |
存在性断言 + 文本内容断言 | 检查录制时选中的元素是否存在 + 该元素的文本内容是否匹配 | ||
非主动断言 - 页面路径 | - | 在进行回放步骤执行时,会判断页面路径是否符合预期,不符合预期则回放失败(忽略频繁触发的 scroll 事件) | |
用例二次修改 | 等待时间 | - | 用例间的等待时间可以在 UI 二次修改 |
元素断言场景下的文本内容 | - | 元素断言场景下,可修改断言的文本内容 | |
目标对象(选择器) | 固定选择模式 | 提供基于元素层级位置的固定选择方式 | |
用例描述、指令描述 | - | 支持二次修改用例描述,而不是使用默认生成的描述 |
真机回放限制
真机回放目前的限制,后续可能会进行优化。
授权弹窗处理 | 由于授权弹窗包括宿主层弹窗及小程序 SDK 层弹窗。 目前客户端仅支持操作 SDK 层面的 UI。因此如果要稳定测试的话,需要首次先同意下宿主的授权,然后通过清缓存的方式,后续每次可以自动操作 sdk 的弹窗(宿主就不会再弹了)。 |
TTML 结构断言 | |
逻辑分支依赖指定平台 | 如果在小程序代码中,存在判断宿主环境而发生逻辑变更的行为(如使用 tt.getSystemInfo 判断返回的 appName),在真机回放过程中可能失败。因为录制在通过 IDE 完成的。 |
Q & A
如何让录制的测试用例更稳定?
由于页面主体元素的渲染通常和网络请求的响应存在关联,因此需要合理使用录制事件中 “等待时间” 的能力,在总测试时间可接受范围内,合理的预留后足够的指令回放前等待时间。
同时,尽量基于结构稳定的元素进行录制,避免渲染时存在不同渲染结果的可能性。