2.2 Appium與手機(jī)的聯(lián)通性驗(yàn)證
在執(zhí)行腳本前,需確定被測終端是否可以與Appium server進(jìn)行通訊,驗(yàn)證被測app是否能被調(diào)起,Appium desktop提供的會(huì)話檢查器可以滿足此需求。Appium desktop會(huì)話管理器提供了一個(gè)編輯器可以生成desired_caps。SoloPi提供的converter轉(zhuǎn)換后該變量需要根據(jù)實(shí)際重新賦值,參數(shù)包含platformName,platformVersion,deviceName,appPackag,appActivity,automationName等,具體如下
1、deviceName可以通過命令adb devices獲取。
2、appPackag、appActivity獲取前,測試手機(jī)連接電腦,啟動(dòng)被測APP,執(zhí)行以下命令:
adb shell dumpsys activity |find "mFocusedActivity"(注:android 7.0以下)或adb shell dumpsys window w|findstr \/|findstr name=(注:android 7.0及以上)。執(zhí)行后獲得appPackage 和 appActivity ,其中appPackage = com.android.bankabc,
appActivity=com.alipay.mobile.quinox.LauncherActivity。
需要注意的是,對于有啟動(dòng)頁的app來說,appActivity需要設(shè)置啟動(dòng)頁的值,也就是說在啟動(dòng)頁打開后立即使用adb shell命令。目前Appium 1.51.1和安卓10使用uiautomator2有兼容性問題,automationName使用uiautomator1。啟動(dòng)Appium desktop打開會(huì)話管理器,將上述值填入,編輯器自動(dòng)生成JSON格式的字符串,該JSON串需要賦值給desired_caps變量,如下圖所示,會(huì)話管理器啟動(dòng)后,如顯示Appium編輯窗口,即證明連接成功。
SoloPi Converter將導(dǎo)出的JSON文件轉(zhuǎn)換為Appium腳本,轉(zhuǎn)換后的代碼需要簡單修改即可執(zhí)行,需要修改的內(nèi)容如下。
SoloPi轉(zhuǎn)為的Appium腳本缺少關(guān)鍵參數(shù),首先將上文中的JSON賦值給desired_caps,定義remote server,測試用的一部安卓10系統(tǒng)的手機(jī)存在兼容問題,這里指定automationName為uiautomator1。
此段代碼由轉(zhuǎn)換工具自動(dòng)生成,獲得的SCREEN可供測試人員后續(xù)使用,如無需要可將該段代碼注釋以避免編譯失敗。通過使get_screenshot_as_file獲取設(shè)備屏幕截圖后得到其width, height值,存入SCREEN變量中。這里腳本的臨時(shí)存儲(chǔ)路徑默認(rèn)為“/tmp/xxx.png”,修改為本地實(shí)際路徑即可。
① 在原代碼中使用tag_name定位元素,該函數(shù)是通過H5的tag標(biāo)簽查找,測試過程中轉(zhuǎn)換時(shí)選擇的是classname,需要修改。此處生成的代碼首先獲取app當(dāng)前節(jié)點(diǎn)類型的rect屬性(該屬性獲取元素的大小和維度,這里沒直接使用返回屏幕大小的相關(guān)函數(shù),可能為了考慮app在窗口模式運(yùn)行/或是有底部bar的情況),為后續(xù)屏幕滑動(dòng)的相關(guān)參數(shù)提供基礎(chǔ)。
② 下圖中自定義函數(shù)swipe將Appium框架的滑屏函數(shù)swipe進(jìn)行封裝,Appium框架函數(shù)swipe的參數(shù)包括startx、starty、endx、endy,duration,其中startx,starty,endx,endy需要輸入屏幕的像素坐標(biāo)。SoloPi原始腳本中記錄的起始和終止位置的坐標(biāo)偏移區(qū)間為[0,1](該值表示位置相對屏幕中心點(diǎn)的偏移量,默認(rèn)屏幕左上角為(0,0)、右下角為(1,1))。
在原始代碼中,結(jié)束滑動(dòng)的坐標(biāo)值出現(xiàn)了負(fù)數(shù),手動(dòng)將其改為正確的值,這里最好手工debug獲得滿意的位置。
自定義swipe方法將參數(shù)傳送給了load_x_y加工成屏幕像素坐標(biāo),將2組偏移值用load_x_y處理,得到滑動(dòng)的實(shí)際像素坐標(biāo)值(fx,fy)和(tx,ty)。
注:在load_x_y中,rect.left和rect.top也是轉(zhuǎn)換工具自動(dòng)生成的,從步驟①返回的字典中并無此項(xiàng),要?jiǎng)h除。在索引width、height值時(shí),也要改為字典的取值方式。此外,swipe中的driver參數(shù)也要?jiǎng)h除。
③修改具體執(zhí)行步驟,從Appium 1.5開始已經(jīng)移除對by_name的支持。
assert driver.find_element_by_android_uiautomator('text(\"尊敬的用戶,您好\")').text == "尊敬的用戶,您好"
執(zhí)行過程可以通過寫日志的方式來記錄,但對于移動(dòng)端判斷錯(cuò)誤具體發(fā)生的情況來說,并不是最優(yōu)。對每一步驟執(zhí)行后進(jìn)行截圖保存,更有利于測試人員定位問題原因。執(zhí)行過程中,通過增加一個(gè)截圖函數(shù)放在每一步的后面。測試結(jié)束后,截圖即可自動(dòng)生成在文件夾中。
2.4使用jenkins遠(yuǎn)程調(diào)用執(zhí)行
使用jenkins之前,需要先在遠(yuǎn)程機(jī)器上使用PyCharm執(zhí)行,驗(yàn)證客戶端與
服務(wù)器端的聯(lián)通性,然后啟動(dòng)jenkins,通過建一個(gè)空項(xiàng)目,并為測試用例的目錄建立一個(gè)環(huán)境變量,便于后續(xù)修改。然后輸入編譯命令,保存該項(xiàng)目后編譯,結(jié)果執(zhí)行成功。
需要注意的是,腳本中截圖路徑要改為jenkins服務(wù)器的路徑,而非Appium server服務(wù)器上的路徑,這取決于jenkins是否和Appium server部署在一起。
上述的操作中,只使用了1臺(tái)android設(shè)備,下面介紹多臺(tái)設(shè)備執(zhí)行的方法。首先驗(yàn)證和服務(wù)器的聯(lián)通性,修改desired_caps,使用2臺(tái)安卓設(shè)備,分別為安卓7.0和10.0,首先使用會(huì)話編輯器做聯(lián)通性驗(yàn)證。
使用命令查看2臺(tái)設(shè)備已經(jīng)連接到Appium server后,啟動(dòng)2個(gè)Appium server,每個(gè)server與其中一臺(tái)手機(jī)通訊,如果4臺(tái)手機(jī),需要啟動(dòng)4個(gè)Appium server。啟動(dòng)2個(gè)Appium時(shí),要對第二個(gè)Appium設(shè)置獨(dú)立的端口。服務(wù)器正常啟動(dòng)后,執(zhí)行腳本中,用例主流程定義在run方法里,run方法包含3個(gè)參數(shù),url和desired_caps是啟動(dòng)會(huì)話必須的參數(shù),picloc是指定截圖生成的位置。
通常編寫多線程或者多進(jìn)程多做使用threading和multiprocess來實(shí)現(xiàn),2種方法,如圖所示:
上述代碼執(zhí)行后,實(shí)際是按CPU時(shí)間分片來執(zhí)行的,如果代碼邏輯很短,或執(zhí)行很快,就會(huì)立即得到結(jié)果,如果代碼執(zhí)行效率很慢,最后的結(jié)果實(shí)際上是在串行操作。上述代碼中,MEIZU和honorV20在實(shí)際執(zhí)行過程中,MEIZU會(huì)先執(zhí)行一遍,然后honorV20才會(huì)執(zhí)行,循環(huán)反復(fù)。
因此,這里使用concurrent.futures模塊下的ProcessPoolExecutor進(jìn)程池,該方法可以利用多核cpu的優(yōu)勢,讓腳本并行執(zhí)行。Submit將實(shí)例提交到進(jìn)程池中,如果CPU有空閑核心,就會(huì)調(diào)度進(jìn)程執(zhí)行。
主函數(shù)如下,這里需要注意的是,當(dāng)多臺(tái)設(shè)備并行執(zhí)行的時(shí)候,需要在 desired_caps中指定參數(shù)udid,通過adb devices獲取,newCommandTimeout指服務(wù)器新獲得命令的超時(shí)時(shí)間:
執(zhí)行后,可以看到進(jìn)程完成不是“串行”執(zhí)行的,最后的執(zhí)行結(jié)果,兩臺(tái)機(jī)器可以同步一起執(zhí)行,并將截圖保存在各自的文價(jià)夾中。
本文主要從實(shí)踐操作的角度,以手機(jī)銀行界面測試為例,比較詳細(xì)地描述了基于SoloPi執(zhí)行過程錄制轉(zhuǎn)為Appium腳本的過程,并對需要使用的工具和環(huán)境、參數(shù)等配置進(jìn)行了說明。通過將Appium腳本集成式j(luò)enkins,實(shí)現(xiàn)了腳本的自動(dòng)化部署及自動(dòng)化執(zhí)行和結(jié)果存儲(chǔ),并描述了單機(jī)執(zhí)行和多機(jī)執(zhí)行的實(shí)踐過程。
手機(jī)銀行測試的方式方法需要在實(shí)踐中不斷探索,優(yōu)秀的互聯(lián)網(wǎng)測試前沿技術(shù)和工具,對商業(yè)銀行的引領(lǐng)和借鑒意義正在不斷加強(qiáng),希望本文的測試實(shí)踐能夠?qū)σ苿?dòng)端APP界面級測試提供有益借鑒,促進(jìn)測試領(lǐng)域不斷開拓新思路,新境界。

成都創(chuàng)新互聯(lián)公司長期為近1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為金寨企業(yè)提供專業(yè)的成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營銷網(wǎng)站建設(shè),金寨網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
加我VX:17324089390 回復(fù)關(guān)鍵詞“測試”領(lǐng)取限量軟件測試學(xué)習(xí)資料哦~~
網(wǎng)頁名稱:實(shí)戰(zhàn)演練:10分鐘玩轉(zhuǎn)Appium腳本轉(zhuǎn)換+自動(dòng)化測試實(shí)例
標(biāo)題網(wǎng)址:http://chinadenli.net/article12/jiepgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、外貿(mào)建站、全網(wǎng)營銷推廣、網(wǎng)站設(shè)計(jì)、網(wǎng)站排名、網(wǎng)站收錄
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源:
創(chuàng)新互聯(lián)