评论

小程序录制回放详解

小程序录制回放的使用说明,以及常见问题解析

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事件

分两种,目标对象为/,表示在当前page下滑动

如果有具体的目标对象,则表示在指定的区域内滑动

因为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事件来触发,传入记录的参数,如果有不生效的情况,可以先看有没有录制到hiderPickerView事件,其次可以看看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值。也可以应用到当前case。

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脚本,

首先进入到测试的起始页面,这里是通过minium的relaunch接口拉起小程序,因为云测只支持虚拟帐号,这样可以保证录制和回放使用同样的帐号数据,不会因为帐号不同而数据信息不一致而失败。

接着,开始顺序执行录制的操作,对于普通的小程序操作来说,每一步会等待录制的时间间隔,同时会等待页面加载完成(这里通过判断页面的异步请求只有2个的情况下判断页面加载完成,默认超时时间为20s),然后开始查找元素,如果是通过target查找,如果target是普通的选择器,会加多层兜底,先查找指定target,如果找不到,会用xpath兜底查一次,如果还是找不到,会用录制的text(text不为空,且没有换行符),再进行全局完全匹配查找一次,找到元素后,会执行指定操作。执行完成后,如果发生了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的稳定性。





最后一次编辑于  2022-08-11  
点赞 3
收藏
评论

5 个评论

  • ^_^F
    ^_^F
    2023-04-04

    请问录制功能最后的断言是怎么触发的?目录3中提到的断言,没有找到,麻烦指教下,感谢!

    2023-04-04
    赞同
    回复 1
    • ʚ 曼曼 ɞ
      ʚ 曼曼 ɞ
      2023-05-27
      点击开始录制后,用例详情旁有个放大镜的位置,可以触发断言
      2023-05-27
      回复
  • 十六·Y จุ๊บ
    十六·Y จุ๊บ
    2022-12-02

    模拟测试账号(比如测试账号猪),在录制回放时候,登录小程序会提示失败。是什么问题呢?

    2022-12-02
    赞同
    回复
  • Shirley🐉
    Shirley🐉
    2022-09-11

    我的小程序模拟器没有录制功能。

    2022-09-11
    赞同
    回复
  • Enzo🌨
    Enzo🌨
    2022-08-10

    感谢分享,就是图片加载不出来。

    2022-08-10
    赞同
    回复 1
    • 杨佳恒
      杨佳恒
      2022-08-11
      感谢反馈,已处理
      2022-08-11
      回复
  • 李鸣晨
    李鸣晨
    2022-08-08

    好好学习,天天上上

    2022-08-08
    赞同
    回复
登录 后发表内容