


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