网易技术干货 | 云信移动端音视频UI自动化测试实践
本篇文章來自網(wǎng)易云信高級測試工程師,在從事測試工作的五年時間中,她做過Android端、Windows端、Web端、服務(wù)端測試,在UI自動化、接口自動化、音視頻測試方面均有所積累。本文將結(jié)合應(yīng)用實踐,介紹下如何使用ATX實現(xiàn)音視頻的自動化測試。
一、ATX介紹
首先來簡單介紹下ATX。ATX(AutomatorX) 是一款開源的自動化測試方案,支持測試iOS平臺和Android平臺的原生應(yīng)用、游戲、Web應(yīng)用。使用Python來編寫測試用例,混合使用圖像識別,控件定位技術(shù)來完成游戲的自動化。附加專用的IDE來完成腳本的快速編寫。
ATX在Android端編寫UI自動化的部分為 UIautomatorII,開源地址:
https://github.com/openatx/uiautomator2,源于谷歌的UIautomator,經(jīng)過封裝之后目前支持使用python來編寫。在支持UIautomator原生功能的基礎(chǔ)上,新增了以下feature:
- 設(shè)備和開發(fā)機可以脫離數(shù)據(jù)線,通過WiFi互聯(lián)(基于atx-agent)
- 集成了openstf/minicap達到實時屏幕投頻,以及實時截圖
- 集成了openstf/minitouch達到精確實時控制設(shè)備
- 修復了xiaocong/uiautomator經(jīng)常性退出的問題
- 代碼進行了重構(gòu)和精簡,方便維護
- 實現(xiàn)了一個設(shè)備管理平臺(也支持iOS) atxserver2
ATX在ios端編寫UI自動化的部分為facebook-wda,開源地址:https://github.com/openatx/facebook-wda
二、應(yīng)用舉例
這部分以Android端為例,介紹下如何上手使用ATX。
1. 環(huán)境準備
a) 下載python環(huán)境,建議直接使用python3以上的環(huán)境,python將在2020年停止對python2的支持
下載python包,安裝,配置環(huán)境變量。
下載一個ide,比如pycharm、wing ide等。
b) 安裝adb,并且設(shè)置環(huán)境變量
c) 下載python 的包管理工具pip
d) 使用pip 下載uiautomator2
pip install uiautomator 2
e) 手機上安裝ATX助手
python -m uiautomator2 init
2. 使用編輯器查看UI結(jié)構(gòu)
a) 在python環(huán)境下安裝并啟動 編輯器 ATX editor
安裝:python -m pip install --upgrade weditor
啟動:python -m weditor
啟動完成之后打開頁面
b) 連接手機,打開atx,獲取ip地址,填入connect左邊的輸入框處,點擊connect
c) 在webditor頁面點擊操作等可生成python代碼,輔助測試代碼的開發(fā)
3. 打開IDE開始編寫代碼
a) 連接設(shè)備:
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可用于獲取設(shè)備信息
b) 操作手機設(shè)備:
d.press("home") 點擊home鍵
d.screen_off() 鎖屏
d.open_quick_settings() 查看快捷鍵
c) 安裝、啟動、卸載應(yīng)用
d.app_install('http://some-domain.com/some.apk')
d.app_start("http://com.example.xxx")
d.app_stop("http://com.example.xxx")
d) 識別手機上控件、對控件進行相關(guān)操作等
d(text='Clock', className='android.widget.TextView')
具體使用指導參考:
https://github.com/openatx/uiautomator2
三、云信實時音移動端實踐
1. 云信實時音視頻Android端實踐
使用UIautomatorII實現(xiàn)UI自動化測試。測試代碼結(jié)構(gòu)如下:
?
幾個文件夾的作用分別如下:
cases:負責編寫用例
common:集成了測試框架的核心部分,包括對開源UI方案的封裝、開源的測試報告、基礎(chǔ)UI操作的封裝、日志方法、數(shù)據(jù)庫操作
config:配置信息,設(shè)備ID等
logs:存儲了運行日志
results:存儲了測試報告
runsuite:測試用例集管理
其中commonbase.py里面完成了對應(yīng)用操作的基礎(chǔ)封裝,比如啟動應(yīng)用、殺進程、安裝應(yīng)用、卸載應(yīng)用、拉取日志、權(quán)限控制、button初始化、基礎(chǔ)業(yè)務(wù)邏輯封裝(創(chuàng)建房間、入會、打開關(guān)閉攝像頭等等)。
建議在完成開源工具熟悉和業(yè)務(wù)基礎(chǔ)用例整理之后就按照上述模式搭建測試框架,方便編寫用例、排查問題和擴展功能。
2. 云信實時音視頻iOS端實踐
iOS端結(jié)構(gòu)和Android端類似,引入atx、unittest模塊后,在basecase.py里對一些通用并且基礎(chǔ)的操作進行了封裝,比如啟動、殺掉進程,創(chuàng)建/進入音視頻房間、對switch開關(guān)的設(shè)置開啟和關(guān)閉等,方便在具體的測試用例中進行調(diào)用。
四、關(guān)于UI自動化的斷言
關(guān)于斷言,在接口自動化和純應(yīng)用的UI自動化中,斷言的方式相對直接,借助接口返回值,借助界面UI變化即可進行判斷。在云信的音視頻業(yè)務(wù)中,測試需要保證的內(nèi)容,除了簡單的邏輯相關(guān)的功能之外,大部分是跟音視頻體驗結(jié)合的功能和效果改進。在這里經(jīng)過長時間和多次數(shù)的摸索,我們采用監(jiān)控控件 + 結(jié)合日志判斷兩個層面來進行音視頻斷言。
那么如何在結(jié)合日志進行音視頻斷言呢?下面將舉幾個例子來說明:
1. 判斷音視頻通話成功建立
獲取到 cid,說明已經(jīng)獲取到建立通話的關(guān)鍵憑證,相當于鑰匙。
獲取日志中關(guān)于音視頻播放的首幀音頻和首幀視頻,目前分別為 first auido、first video,用這兩個來識別下行的音視頻播放是否成功,再結(jié)合不同的uid就可以進行多人會議的判斷。
通過上面兩個標識,再結(jié)合控件的變化,可以對基礎(chǔ)的音視頻通話:點對點音視頻通話、多人音視頻通話、互動直播、多流、訂閱等進行自動化測試。
2. 判斷通話中棄用了何種QoS模式
目前云信業(yè)務(wù)中對外有三種Qos模式:1流暢;2清晰;3錄屏,在日志中相關(guān)的字段是encodeMode,通過UI自動化設(shè)置Qos模式,通過日志判斷是否設(shè)置成功,再結(jié)合 1 來判斷通話建立的情況。
3. 判斷通話中具體使用了哪種分辨率
日志中通過 set_video_codec_rate 來標識具體設(shè)置和使用了哪檔分辨率,使用這個條件再加 1 的判斷方法,可以完成用例中對于各種分辨率的遍歷。
按照上述方法,用例中關(guān)于幀率的遍歷、攝像頭和麥克風的操作等等均可以自動化。
五、使用心得
1. 在使用ATX編寫 iOS 自動化時,在環(huán)境穩(wěn)定之后,盡量不要隨意升級xcode,可能引發(fā)wda連接失敗等等情況
2. 早期UIautomatorII的版本在oppo機型上的適配不好,因為oppo設(shè)備打開usb調(diào)試會有提醒條,導致空間獲取失敗,目前已經(jīng)解決,建議更新到最新版本使用
3. 在Android端上編寫UI自動化時,偶爾出現(xiàn)無法啟動atx-agent的情況,遇到這種情況,需要重新初始化uiautomator2
總結(jié)
以上是生活随笔為你收集整理的网易技术干货 | 云信移动端音视频UI自动化测试实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 低延时直播与RTC融合架构设计③:RTC
- 下一篇: 网易技术干货 | 云信Web SDK测试
