网易技术干货 | 云信移动端音视频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
總結
以上是生活随笔為你收集整理的网易技术干货 | 云信移动端音视频UI自动化测试实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 低延时直播与RTC融合架构设计③:RTC
- 下一篇: 网易技术干货 | 云信Web SDK测试