录制回放自动化测试

收藏
我的收藏

简介

录制回放能力是小程序提供的一种自动化测试工具,开发者可以将测试操作提前录制好,然后通过回放脚本的方式实现测试目的。

版本支持

抖音开发者工具 4.2.7 及之后版本支持该功能,下载地址:开发者工具正式版下载

使用流程

开启「录制回放能力」

目前【录制回放能力】仍处于「实验阶段」,所以需要用户主动开启。
    开启入口:「目录」-> 「工具」-> 「【实验】开启录制回放」。
    开启能力后,有两个入口进入「录制回放」面板。
    「目录」-> 「工具」-> 「自动化测试」。
    调试器活动栏点击「实验室」按钮。

录制过程

    1.进入「录制回放」面板后,点击创建测试文件,可以直接创建(初始化 case)或先创建 case 管理文件夹后结构化创建,下面以直接创建为例介绍。
    2.用例初始化完成后,可以修改用例的基础配置信息:
    最长等待时间:录制步骤的最大间隔,用于统一处理录制周期过长导致回放缓慢的问题。
    清除缓存:在录制用例前清除指定类型的缓存,以保证初始化环境一致,一般建议选择全部清除。
确认用例信息无误后,可点击 录制 按钮触发录制行为,此时模拟器将以 用例初始化时正在渲染的页面 为录制的首屏页面重新加载。
    3.录制启动后,模拟器上方将提示进入录制模式,此时非预期的操作行为(主动点击编译、刷新、切换基础库等)均会导致录制停止,在录制完成后开发者可手动点击停止结束录制。也可在中断后点击 重新录制 按钮再次录制。
    4.在录制过程中,可录制的行为(可录制行为的集合,请参考下面 “支持的能力列表”)将被记录在 用例详情 栏目中,点击这些录制的事件,可以看到事件的详细信息。部分事件属性是可修改的,如事件的描述、等待时间等(根据事件类型修改的属性不同)。
等待时间的含义:在执行这一个录制事件前,需要等待多久,用于控制回放的节奏保证稳定性。
    5.在录制过程中,除了正常在页面中的交互可以触发事件录制,也可以主动插入测试断言,点击模拟器右上角按钮可以选择断言的类型:
其中 Data 快照 为页面的 data 数据的断言,ttml 快照 为页面整体结构的断言。检查元素 为页面某个元素可见性及其内容的断言,这也是目前最常用的断言方式。以点击 检查元素 为例,页面将开启审查元素模式:
选中需要断言的元素后,用例详情 栏目中会增加录制到的断言事件。
对于元素断言事件,除了可以只断言元素是否存在,也可以在详情中切换断言类型为 assertText,可以同时开启对元素内容的检查(在回放中)。
    6.录制过程中可选择对页面进行截图操作,但回放时并不会比对截图的一致性,可以人工判断截图的效果。
    7.当完成录制后,IDE 将会生成录制结果的配置文件,请不用删除或人工修改内容,以确保用例的准确性。

回放流程

    1.在运行环境中选择要回放的端类型(模拟器/真机),然后点击回放按钮启动回放。建议模拟器中回放结果稳定后再启动真机回放。
    2.若选择模拟器回放,模拟器将重新启动,用例详情 栏目中会实时展示回放状态,若录制事件回放失败则会中止当前 case 的回放。回放完成后,结果记录在右侧面板中的 回放记录 中,点击 “详情” 按钮可以看到详细的回放结果。
    3.若选择真机回放,则会调起真机调试二维码,扫码后可进入真机回放流程。在回放过程中同样会将结果显示在 用例详情 栏目中。回放完成后,真机调试链路将断开。
    4.在不考虑链路异常情况下(如系统 Bug、真机连接异常),指令回放失败主要分为两种情况:
    录制的断言行为,与回放时不一致(如录制时选中了某一个元素,但回放的时候该元素不存在)。
    录制的事件行为,与回放时所处的页面不一致(如录制的时候记录在 A 页面点击元素,但回放的时候点击元素发生在了 B 页面)。
    5.如果以文件夹方式管理用例,支持基于文件夹的批量回放,此时文件夹内的用例将依次回放。

支持的能力列表

能力列表

能力类型
能力
子能力
解释
基础配置
清除缓存
全部清除
清除所有缓存,保证回放环境与录制环境的初始化状态一致
指定清除,可选类型:
    数据缓存
    授权缓存
    文件缓存
    登录缓存
    webview 缓存
    cookie 缓存
指定清除某一类缓存
最长等待时间
-
设置录制步骤间隔的最长等待时间(可以统一处理录制过程中操作过慢的场景)
可录制的行为
页面事件(前端)
    点击事件(touchstart、touchmove、touchend)
    长按事件(longpress)
    滚动事件(scroll)
录制时收集在小程序页面中触发的基础用户事件,在回放时进行触发
页面事件(客户端)
路由事件(UI 触发):
    返回上一页
    返回首页
    点击 tabbar
录制时收集在 Native UI 上操作的路由事件,在回放时进行触发
页面操作(客户端)
小程序页面内操作:
    普通弹窗确定/取消(showModal)
    授权弹窗确定/取消
录制时收集在 Native UI 上操作的点击行为,在回放时进行触发
截图行为
-
可以录制时触发截图操作,截取当前页面图片
可断言的场景
data 快照断言
全量比对
对 Page 中的 data 数据进行全量对比,判断是否与录制时相同。
TTML 结构断言
全量比对
对页面结构的 TTML 字符串进行全量比对
元素断言
存在性断言
检查录制时选中的元素是否存在
存在性断言 + 文本内容断言
检查录制时选中的元素是否存在 + 该元素的文本内容是否匹配
非主动断言 - 页面路径
-
在进行回放步骤执行时,会判断页面路径是否符合预期,不符合预期则回放失败(忽略频繁触发的 scroll 事件)
用例二次修改
等待时间
-
用例间的等待时间可以在 UI 二次修改
元素断言场景下的文本内容
-
元素断言场景下,可修改断言的文本内容
目标对象(选择器)
固定选择模式
提供基于元素层级位置的固定选择方式
用例描述、指令描述
-
支持二次修改用例描述,而不是使用默认生成的描述

真机回放限制

真机回放目前的限制,后续可能会进行优化。
授权弹窗处理
由于授权弹窗包括宿主层弹窗及小程序 SDK 层弹窗。
目前客户端仅支持操作 SDK 层面的 UI。因此如果要稳定测试的话,需要首次先同意下宿主的授权,然后通过清缓存的方式,后续每次可以自动操作 sdk 的弹窗(宿主就不会再弹了)。
TTML 结构断言
由于原生组件在 IDE 中的实现和真机上不一致(同层),因此在 IDE 端实现的录制结果,在真机场景回放的时候会判断失败。
逻辑分支依赖指定平台
如果在小程序代码中,存在判断宿主环境而发生逻辑变更的行为(如使用 tt.getSystemInfo 判断返回的 appName),在真机回放过程中可能失败。因为录制在通过 IDE 完成的。

Q & A

如何让录制的测试用例更稳定?

由于页面主体元素的渲染通常和网络请求的响应存在关联,因此需要合理使用录制事件中 “等待时间” 的能力,在总测试时间可接受范围内,合理的预留后足够的指令回放前等待时间。
同时,尽量基于结构稳定的元素进行录制,避免渲染时存在不同渲染结果的可能性。