


摘要:基于最新發布的OpenHarmony 3.1 Release版本提出了一種OpenHarmony操作系統UI界面自動化測試與控制方法,包括如何獲得OpenHarmony的UI界面截圖及控件對象信息,如何在OpenHarmony上模擬點擊、滑動、按鍵等操作用于控制設備自動化測試。
關鍵詞:OpenHarmony;UI界面自動化;控件識別;模擬輸入
中圖分類號:TP3 ? ? ? ? ? ?文獻標識碼:A
文章編號:1009-3044(2022)13-0128-04
OpenHarmony是開放原子開源基金會多個孵化、運營的開源項目之一,是面向全連接、全場景時代,基于開源方式搭建的一個智能終端設備操作系統的框架和平臺[1]。2020年9月,開放原子開源基金會接受了捐贈的智能終端操作系統的基礎能力及相關代碼,之后開源了相關代碼[2]。其中系統類型包括輕量系統(mini system)、小型系統(small system)、標準系統(standard system)[1]。輕量系統面向MCU類處理器,可應用于智能家居領域的傳感器設備、連接模組、穿戴類設備等;小型系統面向內存1MiB以上應用處理器,可應用于智能家居領域的電子貓眼、IP Camera、路由器以及出行領域的行車記錄儀等;標準系統面向大于128MiB的應用處理器,可應用于高端家電的顯示屏、中控平板等,可以提供增強的3D GPU以及硬件合成能力,提供增強交互能力、更多控件以及動效更加豐富的圖形能力。OpenHarmony的功能框架和設計是在不斷演進的,隨著操作系統版本的升級,其功能架構也在升級[3]。OpenHarmony的特性之一是分布式多設備協同,分布式軟總線是實現分布式能力的基礎,是多設備互聯互通的基座,為設備間提供了統一的分布式通信能力[4]。
2022年3月發布的OpenHarmony 3.1 Release版本,標準系統版本更新內容包括了對基礎能力和應用程序框架及系統應用能力和分布式能力的增強,系統應用構建包括系統桌面、系統設置、SystemUI、圖庫、相機、聯系人、備忘錄等[5];分布式能力增強包括了分布式軟總線切換組網、流傳輸、P2P鏈接、藍牙等能力,支持資源共享、硬件互助等;測試子系統的增強具備了一定的應用界面可測試能力;可以通過DevEco Studio開發OpenHarmony API為8的應用及服務。
GUI界面的自動化測試須實現程序對設備界面及返回內容的判斷,以及使設備自動輸入模擬代替手工點擊或輸入[6]。如何對OpenHarmony標準系統的操作系統及應用進行界面自動化測試?設備及應用界面的識別能力是怎樣的?模擬點擊、滑動、按鍵等操作的能力是怎樣的?下面就針對OpenHarmony 3.1版本標準系統提供的相關能力做分析和介紹。
1OpenHarmony的調測設備與環境
根據OpenHarmony 3.1 Release版本發布的信息[5],提供了Hi3516、RK3568標準系統解決方案,Hi3516開發板的處理器是ARM Cortex A7@Max.900MHz;RK3568開發板的處理器是四核64位Cortex-A55,主頻最高2GHz,集成G52GPU。OpenHarmony 3.1 Release版本可以燒錄至這兩種開發板供開發調測,開發的應用可以運行在這兩種設備上,其中RK3568的性能更高一些,運行效果更好一些。本篇以Hi3516開發板為設備環境做相關說明(圖1),相關內容在RK3568開發板上也適用。開發板與PC之間采用USB連接。
2 OpenHarmony的調試通道與基本調試命令
OpenHarmony的應用開發需要用到DevEco Studio,當前其配套OpenHarmony 3.1版本標準系統的應用開發的版本是DevEco Studio 3.0 Beta3 for OpenHarmony(3.0.0.900),安裝完后路徑下的toolchains下有一個hdc_std.exe,這是提供的Windows系統下的OpenHarmony的調測通道工具,另外也有Linux版的。在Windows下可以配置環境變量以便后續在cmd命令窗口中直接使用hdc_std命令。
2.1 hdc_std的基本命令
輸入hdc_std help可以顯示支持的命令及提示幫助信息,例如:hdc_std –v返回hdc版本,注意設備上的hdcd和調試PC側的hdc_std版本要一致或兼容;hdc_std list targets列舉所有連接的設備,有多臺設備時用-t來區分和唯一指定某一臺設備;hdc_std file send/recv是文件傳輸命令,加-z參數是以壓縮方式傳輸;hdc_std install/uninstall是安裝卸載App命令,加-r參數是替換已經安裝存在的App,加-d參數是允許版本降級;hdc_std shell是進入shell命令,shell命令可以ls /system/bin來查看支持的詳細功能和命令(圖2)。
2.2 hdc_std shell命令
shell命令比較豐富,例如:bm為包管理命令(圖3),bm dump –a為列舉出當前設備已安裝的包;aa為Abiliy元能力命令(圖4),元能力子系統實現對Ability的運行和生命周期進行統一管理和調度,應用進程能支撐多個Ability,Ability具有跨應用進程間和同一進程內調用的能力,Ability管理服務統一管理和調度應用中的各Ability,并對Ability的生命周期變更進行管理,aa dump –a為列舉元能力Ability清單和狀態等屬性信息;hidumper命令是hidumper組件提供的,為OpenHarmony開發、測試人員、IDE工具提供統一的系統信息獲取工具,幫助使用者分析和定位問題[7],進入shell命令行輸入hidumper –h可獲取基本信息介紹,功能語法介紹(圖5);hilog是HiLog組件提供的命令,是OpenHarmony日志系統,提供給系統框架、服務,以及應用打印日志,記錄用戶操作、系統運行狀態等[8],hilog –h返回日志幫助命令。
hidumper-lc可獲得系統信息分類列表;hidumper-c獲取系統base、system等所有分類信息;輸入hidumper-c[base system]可按base或system分類獲取系統簇信息;hidumper-ls可獲取系統中元能力列表;當hidumper返回信息過長耗時過久時,可結合grep縮短返回時間和找到想要的返回信息字段,比如輸入hidumper -c base | grepBuildId來獲取設備軟件版本BuildId號。
hilog-k是kernel日志讀取開關,on為打開讀取kernel日志,off則關閉讀取kernel日志;hilog -L為指定級別的日志(D/I/W/E/F);hilog -t為指定類型的日志(例如:-t app core init);hilog –T為指定tag。
3 OpenHarmony獲取設備及應用界面對象信息
做UI界面自動化測試,首先要能感知、識別和獲取被測對象界面,當前的OpenHarmony3.1版本提供了截圖能力,Page類型的Ability頁面提供了aa dump獲取界面控件信息的能力。
3.1 獲取設備界面截圖
獲取設備整屏截圖的命令為shell snapshot_display(圖6),-i參數是指如果設備有多個顯示屏的情況下指定多顯示屏中的哪一個,如果只有一個顯示屏則不必使用-i參數;-f指定本地設備保存路徑,比如/data/lastscreen.png;-w、-h可指定截屏的寬高分辨率,不帶這兩個參數則按設備默認當前顯示分辨率來截屏,指定則按指定的新的寬高對截屏進行拉伸縮放。
指定本地路徑截屏使用snapshot_display -f /data/lastscreen.png,使用hdc_std file recv /data/lastscreen.png d:\tmp\lastscreen.png則可以將截屏文件傳輸到調試PC的路徑中,方便在調試PC上查看或判斷。指定分辨率截屏舉例:snapshot_display -f /data/lastscreenWH.png -w 240 -h 480,則截屏的分辨率為240 × 480像素。
3.2 獲取設備界面控件對象信息
獲取設備界面控件對象信息需要用到元能力Ability命令aa dump,在shell輸入aa dump –a列出所有的Ability信息(圖7),其中com.ohos.setting為包名,而com.ohos.setting.MainAbility為元能力Ability名,ability type為Abiliy元能力類型,這里設置界面為PAGE類,app state為#FOREGROUND表示設置界面當前為置前狀態,如果為#BACKGROUND則為非置前顯示狀態。
然后輸入aa dump -i 29-inspector-c > /data/lastinspector.txt,將頁面控件信息保存到本地設備txt文本,然后用hdc_std file recv /data/lastinspector.txt d:\tmp導出到調試PC的d盤tmp文件夾下。這里-i是指定的AbilityRecord ID,由上一條aa dump –a查詢獲得。需要注意的是,要獲得控件對象信息需要提前輸入shell param set persist.ace.testmode.enabled 1打開開關,這樣新繪制的Page頁面才能dump出控件信息,否則dump出的控件信息inspector.txt文本只有前面aa dump的信息沒有控件對象信息,該設置設備重啟依然有效??丶畔丶腎D、text文本、坐標left、top、width、height,坐標單位是像素,設置界面控件信息示意如圖8。
另外aa dump還有-element、-render方式導出,可展示控件其他的屬性。
4 OpenHarmony的模擬輸入能力
OpenHarmony 3.1 Release版本提供了模擬點擊、滑動、按鍵、鼠標等操作的能力,shell輸入input可查看支持的模擬輸入命令(圖9)。
設備觸屏的模擬點擊為input -T,例如:點擊屏幕坐標200,200的位置為shell input -T -d 200 200 -u 200 200,其中-T表示為觸摸屏模擬輸入,-d模擬按下,-u模擬按下后的抬起事件;橫向滑動為input -T m 400 510 80 510,其中-m表示move即模擬輸入滑動,從400,510滑動到80,510,這些操作如果是設備界面上有可點擊的控件、可滑動的頁面,便可以觸發點擊和滑動事件生效。
設備模擬按鍵為input -K,例如:模擬按Back返回鍵為input -K -d 2 -u 2,模擬按電源Power鍵為input -K -d 18 -u 18,模擬按音量+為input -K -d 16 -u 16,模擬按音量-為input -K -d 17 -u 17,模擬輸入a為input -K -d 2017 -u 2017,模擬輸入b為input -K -d 2018 -u 2018,模擬按回車是input -K -d 2054 -u 2054,模擬輸入Left光標左移為input -K -d 2014 -u 2014,模擬輸入Right光標右移為input -K -d 2015 -u 2015,具體鍵盤鍵值與功能對應關系在源碼multimodalinput_input/frameworks/proxy/events/src/key_event.cpp可以查詢到[9](注意當前OpenHarmony 3.1版本并非所有模擬按鍵都實現了)(圖10)。
設備模擬鼠標為input -M,例如:鼠標移動到坐標100,100的位置為shell input -M -m 100 100,其中-M表示為鼠標模擬輸入,-m表示模擬鼠標移動,-d表示鼠標按鍵事件,0表示鼠標左鍵,1表示鼠標中鍵,2表示鼠標右鍵。
5 OpenHarmony的UI界面自動化測試方法
有了上述OpenHarmony調試通道基本命令以及獲取設備截圖、獲取設備界面控件對象信息和模擬輸入能力,便具備了在PC上搭建UI界面自動化測試的基礎??梢栽赑C上采用腳本語言封裝調試命令通道,然后利用上述獲取設備截圖、獲取設備界面控件對象屬性信息和模擬觸屏點擊滑動、模擬按鍵、模擬鼠標操作事件的可測試能力,編寫UI界面自動化測試程序。并且在PC上編寫程序做UI界面自動化的方式對OpenHarmony這種支持分布式多設備協同互動的系統更方便。另外還有一種方法是開發一個OpenHarmony應用,調用相關對象識別能力和模擬輸入能力的API接口來驅動設備自動化測試,這種方式的好處是在安裝好該測試應用后,不連接PC的情況下也能運行,需要熟悉OpenHarmony應用開發的知識。考慮到OpenHarmony的分布式多設備系統特點,在PC上調用調試通道的設備,獲取和模擬輸入的可測試能力命令通道做UI界面自動化測試,在分布式跨設備流轉、協同場景具備一定的便利性。對于資源占用類性能測試,可以利用上述調試通道hidumper提供的資源占用的能力,對于用戶體驗感知角度的時延類性能測試[10],可以利用調試通道aa start、aa stop-service來輔助。
6 結束語
本文分析和介紹了OpenHarmony操作系統3.1 Release版本的可測試能力,包括OpenHarmony調試通道基本命令、截屏、獲取OpenHarmony界面對象以及模擬用戶進行點擊、滑動、按鍵、鼠標操作的輸入,并對如何對OpenHarmony設備進行界面自動化測試做了說明。隨著OpenHarmony版本的演進,相應的可測試能力也會隨之演進,可作為后續的研究方向。
參考文獻:
[1] 開放原子開源基金會.OpenHarmony項目介紹[EB/OL].https://docs.openharmony.cn/about,2021.12.
[2] 歐建深.開源開放地構建OpenHarmony[J].軟件和集成電路,2021(6):28-29.
[3] 李傳釗.OpenHarmony的功能架構——深入淺出OpenHarmony架構、內核、驅動及應用開發全棧[M].北京:中國水利水電出版社,2021.
[4] 張榮超.鴻蒙應用開發實戰[M].北京:人民郵電出版社,2021.
[5] Mamingshuai.OpenHarmony 3.1版本概述[EB/OL]. https://gitee.com/openharmony/docs/blob/OpenHarmony-3.1-Release/zh-cn/release-notes/OpenHarmony-v3.1-release.md,2022.
[6] 仲光亮.GUI界面自動化測試的核心技術[J].電腦編程技巧與維護,2013(3):65-72.
[7] 盧韜.HiDumper組件說明[EB/OL].https://gitee.com/openharmony/hiviewdfx_hidumper,2022.3.
[8] Buzhenwang.HiLog組件說明[EB/OL].https://gitee.com/openharmony/hiviewdfx_hilog,2022.3.
[9] Mayunteng.多模輸入子系統[EB/OL]. https://gitee.com/openharmony/multimodalinput_input/blob/master/frameworks/proxy/events/src/key_event.cpp,2022.3.
[10] 孟斌.一種移動智能終端性能流暢評測方法[J].電子測試,2020(16):80-83,124.
【通聯編輯:張薇】