网易技术干货 | 云信移动端音视频UI自动化测试实践

本篇文章来自网易云信高级测试工程师,在从事测试工作的五年时间中,她做过Android端、Windows端、Web端、服务端测试,在UI自动化、接口自动化、音视频测试方面均有所积累。本文将结合应用实践,介绍下如何使用ATX实现音视频的自动化测试。

一、ATX介绍

首先来简单介绍下ATX。ATX(AutomatorX) 是一款开源的自动化测试方案,支持测试iOS平台和Android平台的原生应用、游戏、Web应用。使用Python来编写测试用例,混合使用图像识别,控件定位技术来完成游戏的自动化。附加专用的IDE来完成脚本的快速编写。

ATX在Android端编写UI自动化的部分为 UIautomatorII,开源地址:

https://github.com/openatx/uiautomator2,源于谷歌的UIautomator,经过封装之后目前支持使用python来编写。在支持UIautomator原生功能的基础上,新增了以下feature:

  • 设备和开发机可以脱离数据线,通过WiFi互联(基于atx-agent)
  • 集成了openstf/minicap达到实时屏幕投频,以及实时截图
  • 集成了openstf/minitouch达到精确实时控制设备
  • 修复了xiaocong/uiautomator经常性退出的问题
  • 代码进行了重构和精简,方便维护
  • 实现了一个设备管理平台(也支持iOS) atxserver2

ATX在ios端编写UI自动化的部分为facebook-wda,开源地址:https://github.com/openatx/facebook-wda

二、应用举例

这部分以Android端为例,介绍下如何上手使用ATX。

1. 环境准备

a) 下载python环境,建议直接使用python3以上的环境,python将在2020年停止对python2的支持

下载python包,安装,配置环境变量。

下载一个ide,比如pycharm、wing ide等。

b) 安装adb,并且设置环境变量

c) 下载python 的包管理工具pip

d) 使用pip 下载uiautomator2

pip install uiautomator 2

e) 手机上安装ATX助手

python -m uiautomator2 init

2. 使用编辑器查看UI结构

a) 在python环境下安装并启动 编辑器 ATX editor

安装:python -m pip install --upgrade weditor

启动:python -m weditor

启动完成之后打开页面

b) 连接手机,打开atx,获取ip地址,填入connect左边的输入框处,点击connect

c) 在webditor页面点击操作等可生成python代码,辅助测试代码的开发

3. 打开IDE开始编写代码

a) 连接设备:

import uiautomator2 as u2 d =

u2.connect('10.0.0.1') # alias for

u2.connect_wifi('10.0.0.1') print(http://d.info)

上面是通过wifi连接,目前支持三种连接方式:通过wifi、USB、ADB WIFI

上述http://d.info可用于获取设备信息

b) 操作手机设备:

d.press("home") 点击home键

d.screen_off() 锁屏

d.open_quick_settings() 查看快捷键

c) 安装、启动、卸载应用

d.app_install('http://some-domain.com/some.apk')

d.app_start("http://com.example.xxx")

d.app_stop("http://com.example.xxx")

d) 识别手机上控件、对控件进行相关操作等

d(text='Clock', className='android.widget.TextView')

具体使用指导参考:

https://github.com/openatx/uiautomator2

三、云信实时音移动端实践

1. 云信实时音视频Android端实践

使用UIautomatorII实现UI自动化测试。测试代码结构如下:

 

几个文件夹的作用分别如下:

cases:负责编写用例

common:集成了测试框架的核心部分,包括对开源UI方案的封装、开源的测试报告、基础UI操作的封装、日志方法、数据库操作

config:配置信息,设备ID等

logs:存储了运行日志

results:存储了测试报告

runsuite:测试用例集管理

其中commonbase.py里面完成了对应用操作的基础封装,比如启动应用、杀进程、安装应用、卸载应用、拉取日志、权限控制、button初始化、基础业务逻辑封装(创建房间、入会、打开关闭摄像头等等)。

建议在完成开源工具熟悉和业务基础用例整理之后就按照上述模式搭建测试框架,方便编写用例、排查问题和扩展功能。

2. 云信实时音视频iOS端实践

iOS端结构和Android端类似,引入atx、unittest模块后,在basecase.py里对一些通用并且基础的操作进行了封装,比如启动、杀掉进程,创建/进入音视频房间、对switch开关的设置开启和关闭等,方便在具体的测试用例中进行调用。

四、关于UI自动化的断言

关于断言,在接口自动化和纯应用的UI自动化中,断言的方式相对直接,借助接口返回值,借助界面UI变化即可进行判断。在云信的音视频业务中,测试需要保证的内容,除了简单的逻辑相关的功能之外,大部分是跟音视频体验结合的功能和效果改进。在这里经过长时间和多次数的摸索,我们采用监控控件 + 结合日志判断两个层面来进行音视频断言。

那么如何在结合日志进行音视频断言呢?下面将举几个例子来说明:

1. 判断音视频通话成功建立

获取到 cid,说明已经获取到建立通话的关键凭证,相当于钥匙。

获取日志中关于音视频播放的首帧音频和首帧视频,目前分别为 first auido、first video,用这两个来识别下行的音视频播放是否成功,再结合不同的uid就可以进行多人会议的判断。

通过上面两个标识,再结合控件的变化,可以对基础的音视频通话:点对点音视频通话、多人音视频通话、互动直播、多流、订阅等进行自动化测试。

2. 判断通话中弃用了何种QoS模式

目前云信业务中对外有三种Qos模式:1流畅;2清晰;3录屏,在日志中相关的字段是encodeMode,通过UI自动化设置Qos模式,通过日志判断是否设置成功,再结合 1 来判断通话建立的情况。

3. 判断通话中具体使用了哪种分辨率

日志中通过 set_video_codec_rate 来标识具体设置和使用了哪档分辨率,使用这个条件再加 1 的判断方法,可以完成用例中对于各种分辨率的遍历。

按照上述方法,用例中关于帧率的遍历、摄像头和麦克风的操作等等均可以自动化。

五、使用心得

1. 在使用ATX编写 iOS 自动化时,在环境稳定之后,尽量不要随意升级xcode,可能引发wda连接失败等等情况

2. 早期UIautomatorII的版本在oppo机型上的适配不好,因为oppo设备打开usb调试会有提醒条,导致空间获取失败,目前已经解决,建议更新到最新版本使用

3. 在Android端上编写UI自动化时,偶尔出现无法启动atx-agent的情况,遇到这种情况,需要重新初始化uiautomator2

发布了90 篇原创文章 · 获赞 18 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/netease_im/article/details/104844912