录制环境
1. 开始录制
点击开始录制
添加用例信息
- 用例名:可以自定义用例名;
- mock:可以提供 request 和云函数的 mock,勾选默认,可以看到所有能 mock 的接口,在 mock 后,回放的时候如果在当前操作前匹配到会使用录制的数据,而且仅匹配一次;
- 最长等待时间:录制时两个步骤之间的最长等待时间;
- 忽略选择器:录制过程会录下来操作元素的所有选择器写法,默认使用 className,但是有一些 className 是随机生成的,可以配置正则表达式忽略这些值是随机的 className,有助于提高稳定性;
- 清除缓存:由于录制和回放的环境会有不一致的情况,比如录制的 case 是在登录的情况下执行的,但是回放的时候没有登录,可能进不到测试页面导致测试失败,建议录制的 case 选择全部清除,可以保持录制和回放的环境一致,提高成功率;
- 聚合 touch:是指聚合 touch 事件为 tap 事件,默认勾选上。
注意: 如果用例回放需要在云测真机上进行,需要选择虚拟帐号进行录制,点击头像进行切换即可,为了确保回放环境和录制环境一致,录制的时候需要勾选清除缓存操作
2. 录制操作
目前普通的操作都支持录制
2.1 tap 事件
比如点击视图容器,记录为 tap 事件,右边的点击事件详情,可以编辑修改
点击事件信息
- 等待时间: 回放会等待指定的时间
- 页面路径: 回放首先判断当前操作的页面路径是否符合预期
- 层级: 表示是 webview 还是原生操作
- 目标对象: 需要操作的元素,这里点击有下拉框可以修改成录制的其他写法,也可以手动修改 target
- text: 记录该元素的 text
- 查找方式: 下拉可以选择其他匹配模式,目前有目标对象/全局文字匹配/全局文字模糊匹配三种方式,如果当前的文案是不会发生变化的,担心因为页面层级发生变化而导致元素查找失败,可以尝试使用按文字来查找
- 操作类型: 记录的操作
- 回放时忽略失败: 勾选上则表示如果这个步骤失败了,不会报出来,会继续执行
注意: 在回放的时候,如果这个操作的下一步发生了页面变化,会等待页面 path 的变化是否符合预期,而且等待新页面在指定时间内没有异步请求了,表示页面加载完成了。
2.2 scroll 事件
1. 目标对象为/,表示在当前 page 下滑动
2.如果有具体的目标对象,则表示在指定的区域内滑动
因为 scroll 事件会录制的比较多,会有一些误操作。比如页面在跳转中,但是多录制了一个 scroll 操作,但是这个 scroll 的下一步操作 path 发生了变化,其实这个变化不是 scroll 带来的,回放的时候会自动忽略这个检查。
2.3 input 事件
input 有两种情况:
- 普通输入
- 输入后带回车键
会触发 confirm 事件,带回车键的情况会自动录制下来,注意新版的工具修复了这个问题,如果没有录到 confirm 事件,可以检查版本
2.4 longpress 事件
长按事件
2.5 trigger 事件
如果没有匹配到以上事件,会统一用 trigger 来触发
2.6 picker 组件事件
会录制到hidepicker的时候触发的 change
事件,记录 change
事件的参数,回放的时候,minitest 用 trigger
事件来触发,传入记录的参数。
如果有不生效的情况,可以先看有没有录制到hiderPicker View事件,其次可以看看 change
的传参是否为录制的数据。
2.6 原生操作
由于工具上能录制的原生操作有限,目前支持的原生操作有:
- 返回主页
- 返回上一页
- 弹框点确定
- 弹框点取消
- 授权弹框确定
- 授权弹框取消
- 支付弹框关闭
- 分享弹框取消
- 分享弹框确定
注意: 真机回放的时候如果跳转到原生页,框架会失败,不建议录制跳转到原生页的操作,比如地址设置/分享出去等操作。
3.断言
目前有 5 种情况
3.1 Data 快照
会记录当前的小程序的 data 值
校验模式分为全匹配和指定 key 校验,如果选择了指定的 key,那么校验的粒度可以细化到指定的 key 值。
3.2 Wxml 快照
会记录当前页面的 wxml,进行完全匹配
3.3 检查页面元素
记录了页面元素的 target 和文本,校验模式有 4 种:
- assertVisible:那么只会校验当前 target 是否存在
- assertText:先校验 target,而且当前 target 的 text 是否匹配
- 全局文字完全匹配:校验回放中否有节点的 text 能完全匹配录制的 text 匹配
- 全局文字模糊匹配:校验回放中否有节点的 text 能包含录制的 text 匹配
3.4 检查页面路径
校验录制的 path,对于 query,有 3 种校验模式:
- 指定 key 校验,需要手动选择要校验的 key
- 不校验
- 全匹配校验
3.5 截屏
截屏会截取当前的屏幕,在真机回放的时候只会截屏,不会对比,因为真机回放,不指定机型,容易对比失败
3.6 修改 target
由于录制的 case,在小程序几轮更新后,页面结构发生变化,如果重新录制,会导致工作繁琐,现在提供编辑功能
如果选择应用到全局用例,那么会遍历全部 case,查找 path 相同,且 target 相同的步骤,同步修改 target 值。也可以应用到当前用例。
target 输入框,可以输入,也可以下拉选择,下拉会选择录制当前 target 的所有查找元素的方式可以选择。
4. 模块化管理
4.1 普通模块插入
对于一些操作,多个 case 都有的部分,可以抽出来做基础模块来管理,可以避免重复的录制操作,比如登录操作,大部分 case 都需要在有登录的情况下进行,那么每个 case 都从头录制,会很繁琐。如果能抽出成公共模块部分,可以方便很多。
入口:点击 用例栏右侧 icon,点击录制基础模块,可以录制你需要的公共部分,录制的所有的 case 都会进入到基础模块目录里。
基础模块的 case,有一个选项为公共变量,这里可以定义要使用的公共变量,类似函数的参数,这里可以对公共变量进行增删改操作,比如这个 case 定义了一个叫 message 的公共变量,那么这个变量怎么使用呢?
对于 case 的 target 和 text,点击输入框,会出现下拉框,可以选择定义的公共变量,用来占位。那怎么使用这个 case,以及这个 case 的公共变量的值怎么填入呢?
可以进入到要使用这个基础模块 case的地方,比如我们想在第一行的位置插入基础模块的 case,点击右侧+ ,会出现一个弹框,可以选择添加位置,在当前操作之前还是之后,以及选择基础模块的 case,如果当前的基础模块的 case 设置了公共变量,这里需要把公共变量的值填进去,就好比实现了一次函数调用,填入了调用值。
插入后,可以设置是否忽略,如果设置为忽略,会批量忽略该基础模块 case 的所有步骤,同时可以修改公共变量的值。
4.2 配置登录模块
由于大部分小程序需要登录才能进入到测试页面,而登录是一个适用于大部分 case 的前置操作,这里提供了一个全局配置登录模块的快捷操作,可以配置当前 case,也可以配置全局的 case,只在 minitest 云测平台的回放中生效,因为工具侧回放,在当前窗口是有缓存的,回放不需要重新登录,而在云测平台回放,需要重新拉起小程序,是全新的环境。
配置操作和插入公共模块的流程一致,只能插入一个公共模块的 case,可以选择应用全局或者当前用例,配置成功后,该公共模块的每个步骤都会设置为可忽略,即使失败不影响后续进行。
配置后,如果不想使用,可以删除,同样可以全局或者当前 case 删除。
5.云测平台真机回放
5.1 同步用例
点击同步用例,可以将工具插件录制的用例导入到云测平台。工具侧录制的 case 会相应地转化为 minium 的 case,右侧可以看到 py 脚本,可以配合 minium 的本地运行环境进行调试。
5.2 minitest 回放逻辑
用例导入到云测平台后,会转化为 minitest 的 py 脚本。
1. 首先进入到测试的起始页面,这里是通过 minium 的 relaunch 接口拉起小程序,因为云测只支持虚拟帐号,这样可以保证录制和回放使用同样的帐号数据,不会因为帐号不同而数据信息不一致而失败。
2. 接着,开始顺序执行录制的操作,对于普通的小程序操作来说,每一步会等待录制的时间间隔,同时会等待页面加载完成(这里通过判断页面的异步请求只有 2 个的情况下判断页面加载完成,默认超时时间为 20s),
3. 然后开始查找元素,如果是通过 target 查找,如果 target 是普通的选择器,会加多层兜底,先查找指定 target,如果找不到,会用 xpath 兜底查一次,如果还是找不到,会用录制的 text(text 不为空,且没有换行符),再进行全局完全匹配查找一次,找到元素后,会执行指定操作。
4. 执行完成后,如果发生了 path 变化,会判断跳页是否成功,完成成功后,才判定这个操作执行成功,才能往下执行,否则会报错退出。如果指定这个操作失败后忽略,那么即使执行失败也不会报出来,会继续执行。
断言操作,会根据录制的断言类型进行,失败则退出。
5.3 真机回放报告
- 真机回放可以看到每一个操作的结果详情
- 每一个步骤有执行前的截图,以及录制的详情
如果执行失败,那么会有执行前后的截图,以及错误详情。如果查找不到元素,可以下载 wxml文件,将其拖动到开发者工具里面,点击右键格式化,检查当前的页面结构是否与录制的时候保持一致,如果不一致,可能小程序版本发生了变化,可以重新录制。
6.常见问题分析
6.1 录制没有清缓存,导致回放时进入到登录页面,不能顺利进入测试页面
比如上面回放的 case,进入测试页面后,点击进入了登录授权界面,导致校验页面跳转和预期不一致而失败
建议: 可以将登陆这种通用模块录制为基础用例,在每一个 case 之前插入登陆,可以避免重复录制带来的繁琐。
6.2 地理位置不一致导致回放和录制页面拉取的内容不一致
上图示例,回放定位的位置拉取的数据只有一条,而录制的数据时点击的是第九条数据,后台返回不一致会导致失败。
建议: 可以通过 mock 后台请求来,确保回放返回的数据和录制的数据保持一致,具体做法是,录制的时候打开 mock 开关。
或者 打开云测--项目管理–虚拟帐号配置
功能,mock 住地理位置,或者其他会影响数据的信息,可以使用这种方式来 mock。
6.3 回放多了弹框
上图在点击过程中多了蓝牙授权弹框,导致页面没有跳转而失败。
对于原生的系统弹框,可以在云测启动回放的时候,配置 Auto Authorize
开关,可以自动点确认,对于一些没有录到的系统弹框可以自动解决掉。
如果是业务的弹框,需要自己处理。
6.4 查找不到元素
这类错误很普遍,即使云测的回放逻辑对查找元素做了多层兜底。这里需要使用者将错误的wxml文件下载下来,拖动到开发者工具,点击右键格式化来手动确认该元素是否存在。
对于小程序迭代比较快,页面结构变化就会导致 xpath 查找失败,可以检查录制的版本和回放的小程序版本是否一致,也可以建议开发增加 id 或者 class 等可以唯一查找到元素的标识,这样可以增加 case 的稳定性。