录制回放自动化测试

更新时间 2024-07-24 02:58:49
收藏
我的收藏

简介​

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

版本支持​

抖音开发者工具 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​

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

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