App 自動化測試調(diào)研
App 自動化測試的價值
App 自動化測試在軟件開發(fā)過程中扮演著重要的角色烟具,具有以下幾個方面的價值:
1.提高測試效率和覆蓋率:自動化測試可以執(zhí)行大量的測試用例勒魔,覆蓋各種功能和場景,相比手動測試可以節(jié)省大量的時間和人力資源掺冠。自動化測試可以在短時間內(nèi)運行大量測試沉馆,快速發(fā)現(xiàn)潛在的問題和缺陷,提高測試的效率和覆蓋率赫舒。
2.增強測試準確性和一致性:自動化測試可以消除人為的錯誤和測試的主觀性悍及,確保測試的準確性和一致性闽瓢。自動化測試腳本可以精確地模擬用戶操作和測試場景接癌,避免了人為疏忽和遺漏,提高了測試的可靠性扣讼。
3.加速發(fā)布周期:通過自動化測試缺猛,可以在應用程序開發(fā)周期的早期階段就進行測試,快速發(fā)現(xiàn)和修復問題椭符。這樣可以減少后期修復的成本和風險荔燎,加速應用程序的發(fā)布周期,提高產(chǎn)品交付的速度销钝。
4.支持持續(xù)集成和持續(xù)交付:自動化測試是持續(xù)集成和持續(xù)交付過程中的關(guān)鍵環(huán)節(jié)有咨。通過集成自動化測試到 CI/CD 流程中,可以自動化執(zhí)行測試用例蒸健,及時發(fā)現(xiàn)問題座享,確保每次代碼提交后的應用程序的質(zhì)量和穩(wěn)定性婉商。
5.提高軟件質(zhì)量和用戶體驗:自動化測試可以發(fā)現(xiàn)應用程序的潛在缺陷和問題,幫助開發(fā)團隊及時修復渣叛,并提高軟件的質(zhì)量和穩(wěn)定性丈秩。通過減少崩潰、功能錯誤和性能問題淳衙,可以提升用戶的滿意度和體驗蘑秽。
6.降低成本和風險:自動化測試可以降低測試過程中的人力成本和時間成本,同時也減少了人為錯誤的風險箫攀。通過自動化測試肠牲,可以在較短的時間內(nèi)覆蓋更多的測試用例,減少人為操作的誤差靴跛,并提供更加可靠的測試結(jié)果埂材,從而降低了測試的成本和風險。
App 自動化測試技術(shù)選型
工具名稱 | 被測系統(tǒng) | 測試 | 腳本語言 | 支持 H5 | 跨應用 | 穩(wěn)定性 | SDK 自帶 |
---|---|---|---|---|---|---|---|
Appium | Android, iOS | 功能 | Java/Python/JS/C/C##/Perl | 支持 | 可以 | 一般 | 否 |
Airtest | Android, iOS | 功能 | Python | 支持 | 可以 | 穩(wěn)定 | 否 |
Macaca | Android, iOS | 功能 | Java/Python/JS | 支持 | 可以 | 穩(wěn)定 | 否 |
Calabash | Android, iOS | 功能 | Ruby | 支持 | 可以 | 一般 | 否 |
Uiautomator2 | Android | 功能 | Java | 支持 | 可以 | 穩(wěn)定 | 是 |
Robotium | Android | 功能 | Java | 支持 | 可以 | 穩(wěn)定 | 否 |
ATX | Android | 功能 | Python | 一般 | 可以 | 一般 | 否 |
Uiautomation | iOS | 功能 | JS | 支持 | 可以 | 穩(wěn)定 | XCode 自帶 |
XCUITest | iOS | 功能 | Swift/Objective-C | 支持 | 可以 | 穩(wěn)定 | 是 |
WDA | iOS | 功能 | Swift/Objective-C | 支持 | 可以 | 穩(wěn)定 | 否 |
主流自動化測試框架介紹
AirtestProject簡介:
Airtest Project是一款由網(wǎng)易研發(fā)并開源的自動化測試框架汤求,相比于其他的自動化測試框架俏险,主要有如下兩個優(yōu)勢:
- 大幅度降低自動化腳本的編寫和維護成本
Airtest Project希望能夠通過一種所見即所得的方式完成腳本的錄制,即使測試人員不會編程不懂腳本扬绪,也可以通過正常用戶的點擊拖拽等操作竖独,自動完成腳本的錄制,從而大幅度降低企業(yè)和項目的自動化維護成本挤牛。
- 解決游戲測試的痛點
Airtest Project希望能夠通過對游戲的不同引擎做支持莹痢,成為一個真正意義上的跨引擎跨平臺的自動化測試平臺。
特點:
- 跨平臺:Windows墓赴、Android竞膳,iOS,Unity3D诫硕、cocos2dx坦辟、UE4和Egret等
- 一體化方案:AirtestIDE 一個IDE搞定所有配置環(huán)境
- 可基于圖像識別,也可基于UI控件識別
- 支持自動錄制生成自動化測試腳本
- 使用方便章办,簡單易上手
架構(gòu)圖
可以看到锉走,底層的主要測試框架主要是Airtest和Poco,二者的區(qū)別在于:
Airtest:基于Python的藕届、跨平臺的UI自動化測試框架挪蹭,基于圖像識別原理,適用于游戲和App休偶。
Poco:基于UI控件搜索的自動化測試框架梁厉,其核心優(yōu)勢是除了對Android、IOS之外踏兜,對游戲也是支持的词顾,同時也支持微信小程序只冻、微信小游戲和H5應用。
整套框架配備了非常實用的IDE计技,通過AirtestIDE, 可以輕松的完成腳本的錄制喜德、測試任務的執(zhí)行以及最后測試報告的生成。
Appium 簡介:
Appium是一款開源的自動化測試工具垮媒,支持IOS舍悯、Android、Windows和Mac應用睡雇。
跨平臺:
appium可以在OSX萌衬,Windows以及Linux桌面上運行。
跨語言:
appium采用了C/S的設(shè)計模式它抱,擴展了WebDriver協(xié)議秕豫,因此Client用Python、Java观蓄、Js/Nodejs混移、Ruby、OC侮穿、C#等各種語言來實現(xiàn)歌径。
原理介紹:
Appium的核心是一個遵守REST設(shè)計風格的Web服務器,他會用來接受客戶端的連接和指令亲茅。由于統(tǒng)一的接口設(shè)計回铛,客戶端便可以用多種語言來實現(xiàn),從而用自己喜歡的語言來實現(xiàn)測試用例克锣。
服務端收到測試指令后會發(fā)送給設(shè)備茵肃,在設(shè)備層則使用了設(shè)備商提供的原生測試框架,比如IOS的XCUITest Driver和UIAutomation Driver, 安卓的UIAutomator和UIAutomator2等等袭祟。
特點:
- 跨語言:Java验残、Python、NodeJS 等榕酒。
- 跨平臺:Android胚膊、iOS故俐、Windows想鹰、Mac
- 支持自動錄制生成自動化測試腳本
- 配置環(huán)境復雜,上手有難度
架構(gòu)圖
Appium官網(wǎng): http://appium.io/
Appium Github主頁: https://github.com/appium/appium
AirtestProject項目簡介
AirtestProject是由網(wǎng)易游戲推出的UI自動化測試解決方案药版,項目構(gòu)成如下:
1.Airtest框架
Airtest 是一個跨平臺的辑舷、 基于圖像識別 的UI自動化測試框架,適用于游戲和App槽片,支持平臺有Windows何缓、Android和iOS:
Airtest源碼
Airtest API文檔
2.Poco框架
Poco 是一款 基于UI控件識別 的自動化測試框架肢础,目前支持Android原生、iOS原生碌廓、Unity3D传轰、cocos2dx、UE4和Egret等平臺谷婆,也可以在其他引擎中自行接入poco-sdk來使用慨蛙。
3.AirtestIDE
AirtestIDE 是一款跨平臺的 UI自動化測試編輯器 ,內(nèi)置了Airtest和Poco的相關(guān)插件功能纪挎,能夠使用它快速簡單地編寫 Airtest 和 Poco 代碼期贫。
4.手機集群解決方案-DeviceFarm
DeviceFarm 是網(wǎng)易推出的自動化測試集群解決方案,它是軟硬件一體化方案异袄,包含設(shè)備集群建設(shè)通砍、集群設(shè)備批量維護管理、監(jiān)控報警和云端真機等功能烤蜕,可以為您在企業(yè)內(nèi)部搭建穩(wěn)定高效的設(shè)備管理平臺, 提升設(shè)備利用率封孙,賦能自動化測試流程搭建:
5.Airlab云測試平臺
Airlab云測試平臺支持用例管理、腳本管理讽营、任務預約敛瓷、任務調(diào)度、云端報告等功能斑匪,可以快速構(gòu)建企業(yè)自動化測試全流程呐籽,支持ios和安卓的回歸測試及兼容測試。
Airtest+Poco快速上手
1.簡介
AirtestIDE 是一個跨平臺的UI自動化測試編輯器蚀瘸,適用于游戲和App狡蝶。
- 自動化腳本錄制、一鍵回放贮勃、報告查看贪惹,輕而易舉實現(xiàn)自動化測試流程
- 支持基于圖像識別的Airtest框架,適用于所有Android/iOS/Windows應用
- 支持基于UI控件搜索的Poco框架寂嘉,適用于Unity3d奏瞬,Cocos2d與Android/iOS App等多種平臺
- 能夠運行在Windows、MacOS泉孩、Linux平臺上
2.安裝
目前AirtestIDE提供了Windows硼端、Mac和Linux的客戶端,請從官網(wǎng)下載寓搬,解壓即用珍昨。(關(guān)于Linux平臺,只有1.2.3及更低版本的AirtestIDE支持,所以我們 更建議在Windows和Mac平臺上使用我們的AirtestIDE 镣典。)
3.連接設(shè)備
AirtestIDE目前支持測試Android/Windows/iOS上的應用兔毙,其他更多平臺的支持正在開發(fā)中。
無論是Android/iOS手機兄春,還是Windows窗口澎剥,在Airtest中都將它視為一個設(shè)備,接下來我們將演示如何連接一個設(shè)備赶舆。
1)連接Android手機
通過ADB連接你的電腦和Android手機肴裙,即可開始調(diào)試Android應用。ADB是Google官方提供的Android調(diào)試工具涌乳。AirtestIDE依賴ADB與安卓設(shè)備進行通信蜻懦。
打開AirtestIDE,按照以下步驟進行連接:
- 打開手機設(shè)置-開發(fā)者選項-USB調(diào)試開關(guān)夕晓,參考安卓官方文檔
- 在AirtestIDE設(shè)備面板中點擊refresh ADB按鈕宛乃,查看連接上的設(shè)備
- 如果沒有顯示出設(shè)備,試試restart ADB蒸辆,如果還不行征炼,參考FAQ文檔進行問題排查
- 能夠成功看到設(shè)備后,點擊對應設(shè)備的Connect按鈕躬贡,進行初始化
手機連接成功后谆奥,即可在AirtestIDE中看到手機屏幕的鏡像顯示,并對手機畫面進行實時操作
如果手機連接失敗拂玻,請先參考FAQ文檔進行問題排查酸些。若依然不成功,請將手機型號和AirtestIDE后臺報錯提交到Github Issue檐蚜,開發(fā)人員會盡快修復魄懂。由于Android手機的碎片化問題嚴重,我們非常感謝您的反饋可以幫助這個項目做的更好闯第。
2)連接Windows窗口
對于Windows桌面程序的測試市栗,AirtestIDE可以將被測窗口嵌入,方便腳本錄制和調(diào)試咳短。
- 在AirtestIDE設(shè)備面板中點擊選擇游戲畫面按鈕
- 將鼠標移動到被測程序的窗口上填帽,會顯示紅色邊框,將對應的窗口框出
- 單擊鼠標左鍵即可將對應的窗口嵌入到AirtestIDE中
- 也可以點擊搜索窗口 按鈕咙好,選擇對應title的窗口篡腌,然后點擊連接
3)連接iOS手機
要連接一臺iOS手機,你需要先準備好一臺安裝了Xcode的Mac電腦敷扫,連接方法參考文檔哀蘑。
4. 錄制自動化腳本
在連上設(shè)備后诚卸,我們可以開始錄制自動化測試腳本了葵第,在接下來的內(nèi)容中绘迁,我們將會使用一臺Android設(shè)備上的一款Unity游戲應用,給大家演示如何錄制腳本。
1)模擬輸入
讓我們先從最常用的模擬點擊開始吧,模擬點擊的意思就是黄琼,模仿你的操作去點擊設(shè)備上的某個指定位置循未。
① 基于圖像識別
目前我們支持通過圖像識別的方式,找到你想要點擊的位置并進行操作铡俐,這是基于Airtest這個框架實現(xiàn)的。
我們可以先看看如何自動錄制腳本:點擊AirtestIDE左側(cè)的Airtest輔助窗上的 錄制 按鈕,然后隨著你在設(shè)備窗口上操作手機哲身,代碼會自動生成在代碼窗口中。
馬上來驗證一下贸伐,點擊運行按鈕運行你的第一個自動化腳本吧勘天!
如果你覺得自動錄制生成的圖標不夠精確,還可以點擊Airtest輔助窗上的touch按鈕捉邢,然后在設(shè)備窗口上框選精確的圖標脯丝,也可以自動生成一條touch語句。
類似的模擬輸入操作還有滑動:點擊swipe按鈕伏伐,在設(shè)備窗口上框選精確的圖標作為滑動起點宠进,然后點擊滑動終點位置,即會自動生成一個swipe語句藐翎。
其他模擬輸入的API包括:
- text:文字輸入
- keyevent:按鍵輸入材蹬,包括(HOME/BACK/MENU等)
- sleep:等待
- snapshot:截屏
② 基于UI控件
如果你發(fā)現(xiàn)圖像識別不夠精確,還可以使用基于UI控件搜索的方式進行自動化測試吝镣,與剛才的Airtest不同赚导,這是Poco這個框架實現(xiàn)的功能。
目前Poco直接支持Unity3d赤惊、Cocos2d吼旧、白鷺引擎等多種游戲引擎,以及Android/iOS原生App未舟。
如果是Android/iOS原生應用圈暗,是即插即用的,無需接入SDK裕膀。但由于游戲引擎使用OpenGL等圖形接口直接渲染员串,而沒有使用Android原生的UI系統(tǒng),我們需要與游戲的Runtime進行通信獲取整個UI結(jié)構(gòu)昼扛。
我們提供了非常方便的SDK接入方法寸齐,點這里查閱目前支持的平臺列表欲诺,以及如何為你的項目接入Poco。
如果你的項目使用的引擎或平臺不在文檔中渺鹦,我們同樣支持自行擴展SDK扰法。
接入完成后我們即可開始。手機啟動游戲毅厚,在AirtestIDE中的 Poco輔助窗切換模式至對應引擎類型 塞颁,即可看到整個UI結(jié)構(gòu)。
點擊錄制按鈕吸耿,然后隨著你的鼠標操作祠锣,會自動生成Poco語句到腳本編輯框中。
同樣咽安,你也可以通過UI樹形結(jié)構(gòu)更精確的檢視UI控件伴网,雙擊節(jié)點自動生成Poco語句,或者自行選擇更好的寫法妆棒。
自動錄制出的語句不一定能夠適應所有場景澡腾,采用更合理的選擇器編寫代碼,通常會增強整個自動化腳本的健壯性和可讀性募逞,這是門學問蛋铆。
錄制完腳本后記得運行試試效果。
對于Android/iOS的原生應用來說放接,不需要接入SDK即可使用刺啦,例如在連上Android手機后,將Poco輔助窗的模式切換至Android纠脾,能可以看到整個UI樹形結(jié)構(gòu)玛瘸。
2)框架信息
上述兩種UI識別方式,分別是基于兩個框架:
基于圖像識別的Airtest框架
基于UI控件搜索的Poco框架
這兩個框架都是由我們團隊開發(fā)的Python第三方庫苟蹈,在實際項目使用經(jīng)驗中糊渊,我們發(fā)現(xiàn)兩者 互相配合 會得到最好的效果。在腳本編寫的過程中慧脱,我們往往也需要查閱它們的項目API文檔渺绒。
3)使用Python語法
整個AirtestIDE中錄制和運行的代碼都是基于Python語言。Python語法簡潔而強大菱鸥,第三庫和工具也非常多宗兼。
對于新手,Python上手非常容易氮采,學會基本語法即可寫出自動化腳本中所需的邏輯語句殷绍。
touch("開卡包.png")
if exists("獎勵面板.png"):
for i in range(5):
Poco("獎勵-%s" % i).click()
對于老手,你可以在AirtestIDE中使用各種第三方庫來使你的自動化腳本更加強大鹊漠,通過添加PYTHONPATH設(shè)置主到,可以使用本地的python.exe來運行你的腳本茶行。
除了輔助窗口里面提供的語句,更多的API文檔登钥,可以查看Airtest和Poco的倉庫畔师。
4)斷言
到這里,我們已經(jīng)有各種模擬輸入方法怔鳖,配合邏輯控制語句讓手機動起來茉唉。自動化測試中還有很重要的一個步驟:結(jié)果驗證固蛾,那么我們來看看怎樣聲明斷言结执。
① 驗證UI界面
錄制方法與模擬輸入類似
- assert_exists:斷言圖片存在
- assert_not_exists:斷言圖片不存在
② 驗證數(shù)值
通過Poco獲取屬性值,手寫代碼進行斷言
- assert_equal:斷言相等
- assert_not_equal:斷言不等
例如
# ... 模擬輸入并獲得20分之后
value = Poco("分數(shù)按鈕").attr("num")
assert_equal(value, 20, "獲到20分")
5. 查看測試報告
腳本運行完畢后艾凯,點擊查看報告按鈕(快捷鍵Ctrl+L)献幔,會使用默認瀏覽器打開結(jié)果報告頁面(最好使用chrome瀏覽器打開,兼容性最好)趾诗。報告中將展示出每一個步驟的內(nèi)容和實際執(zhí)行過程的截圖蜡感、運行結(jié)果,方便查看步驟是否執(zhí)行成功恃泪。
6.命令行接口
在AirtestIDE運行腳本時郑兴,LOG窗口中會打印運行命令。
你可以在不開啟IDE的情況下贝乎,在命令行中使用那條命令來啟動測試腳本情连,例如:
"D:\AirtestIDE\AirtestIDE" runner "D:\AirtestIDE_2018-01-24_83\untitled.air" --device Android://127.0.0.1:5037/F8UDU16409004135 --log "C:\Users\gzliuxin\AppData\Local\Temp\AirtestIDE\scripts\cdfc40e8c297b6ad88e09de64d8bafa3"
使用AirtestIDE你可以輕松的錄制出測試腳本,保存為.air腳本览效。請注意一個.air腳本中不要包含太多內(nèi)容却舀,用良好的腳本命名和目錄結(jié)構(gòu)來組織你的腳本,覆蓋所有測試點锤灿。
你還可以在不同電腦上針對不同設(shè)備運行測試挽拔, 這時候你就需要用命令行運行 .air 腳本 。 對于多平臺發(fā)布的產(chǎn)品但校,靈活使用跨平臺API和命令行螃诅,還可以讓同一套測試腳本運行在Android和Windows上進行測試。
如何在Android手機上進行自動化測試
1.連接Android手機
1)在AirtestIDE里連接Android手機
使用AirtestIDE對Android應用進行自動化測試時状囱,第一步就需要連接Android設(shè)備术裸。
請查閱我們的設(shè)備連接文檔里的指引,安裝好驅(qū)動浪箭、打開手機里的開發(fā)者選項穗椅、允許USB調(diào)試選項后,用USB線連上手機并在AirtestIDE中嘗試連接奶栖。
如果遇到了問題匹表,請查閱Android連接常見問題文檔门坷,根據(jù)里面提供的自查步驟排查問題,有些品牌手機有專屬的選項需要另行開啟(例如小米袍镀、Vivo/Oppo)默蚌,請同樣查閱對應品牌的注意事項來避免問題。
2)設(shè)備的支持情況
目前我們支持市面上幾乎絕大多數(shù)Android手機苇羡、Android模擬器(模擬器連接教程請查閱這里)绸吸,也可能支持少部分特殊的基于Android系統(tǒng)的硬件設(shè)備。
在成功連上手機后设江,我們就能夠在AirtestIDE里操作手機畫面锦茁,就像下圖中這樣,接下來就可以開始用這臺手機編寫腳本了叉存。
3)設(shè)備連接的特殊選項設(shè)置
有少數(shù) 非手機 的Android設(shè)備(例如智能電視码俩、智能后視鏡等),直接點擊connect按鈕不能連接歼捏,但是可以嘗試通過勾選connect下拉菜單中的選項來嘗試連接稿存。
例如,我們的默認連接方式不支持模擬器瞳秽,因此在連接模擬器時瓣履,需要先勾選Use Javacap選項(部分品牌模擬器還要同時勾選Use ADB orientation)。這里connect下拉菜單的三個選項练俐,是截屏袖迎、旋轉(zhuǎn)和點擊的三個備選方案,在默認方案無法生效的時候痰洒,使用這3個備選方案可能就可以支持設(shè)備了瓢棒。
注意:部分品牌手機不支持某個功能,可能僅僅只是因為選項沒有開啟丘喻,例如小米手機必須要開啟了允許模擬點擊才能夠在AirtestIDE中使用默認方式點擊手機(速度更快脯宿,效果更好)。如果是正常的手機設(shè)備泉粉,遇到問題時請盡量先查閱文檔排查問題连霉。這幾個備選方案的效率都比默認方案低,只有部分特殊的Android設(shè)備才需要使用到備選方案嗡靡。
2.Android設(shè)備的連接字符串
1) 運行腳本時如何指定手機
當我們在AirtestIDE里連上手機并編寫完腳本跺撼,當點擊運行腳本按鈕時,默認會在運行時的命令行里使用當前已經(jīng)在AirtestIDE里連接的手機讨彼,我們可以在log查看窗的最上面看到像這樣的1條命令:
"D:\demo\AirtestIDE-win-1.2.10\AirtestIDE\AirtestIDE" runner "D:\test\taikang_test.air" --device android://127.0.0.1:5037/127.0.0.1:7555?cap_method=MINICAP&&ori_method=MINICAPORI&&touch_method=MINITOUCH --log "D:/test/test01\fe03093fd01433d6bf58dc5fa5556c22"
其中--device android://127.0.0.1:5037/127.0.0.1:7555?cap_method=MINICAP&&ori_method=MINICAPORI&&touch_method=MINITOUCH就是當前使用的本地手機歉井,它將我們這臺設(shè)備號為127.0.0.1:7555的手機名稱告訴Airtest,讓它明白我們需要使用這臺手機哈误。
我們也可以在命令行中不填寫具體的手機設(shè)備號哩至,用--device Android:///這樣的內(nèi)容來表示在當前連接的一臺Android設(shè)備上運行即可躏嚎,無論它的設(shè)備號是什么。
如果在命令行中菩貌,完全不填寫--device卢佣,默認將會不連任何設(shè)備來運行代碼,那么在運行到需要有設(shè)備才能跑的代碼時將會報錯(例如touch語句必須要連上設(shè)備才能運行)箭阶。
如果希望在腳本中通過代碼進行設(shè)備連接虚茶,可以在auto_setup接口中傳入devices參數(shù),或者使用connect_device接口仇参、init_device 接口等:
auto_setup(__file__, devices=["Android://127.0.0.1:5037/SJE5T17B17"],logdir=True, project_root=r"D:\test\logs", compress=90)
connect_device("Android:///SJE5T17B17?cap_method=javacap&touch_method=adb")
init_device(platform="Android",uuid="SJE5T17B17", cap_method="JAVACAP")
2) 設(shè)備連接字符串如何編寫
在剛才的命令行中使用的 --device參數(shù)嘹叫,傳入的是一個設(shè)備字符串,以安卓設(shè)備為例冈敛,字串完整定義如下:
Android://<adbhost[localhost]>:<adbport[5037]>/<serialno>
其中待笑,adbhost 是 adb server 所在主機的 ip 鸣皂,默認是本機 1127.0.0.1 抓谴,adb port 默認是 5037 , serialno 是 android手機的序列號寞缝。
這里提供一些常見的填寫范例供大家參考:
# 什么都不填寫癌压,會默認取當前連接中的第一臺手機
Android:///
# 連接本機默認端口連的一臺設(shè)備號為79d03fa的手機
Android://127.0.0.1:5037/79d03fa
# 用本機的adb連接一臺adb connect過的遠程設(shè)備,注意10.254.60.1:5555其實是serialno
Android://127.0.0.1:5037/10.254.60.1:5555
# 模擬器等特殊設(shè)備荆陆、使用了連接參數(shù)時:
# 模擬器連接滩届,勾選了Use javacap模式
Android://127.0.0.1:5037/127.0.0.1:7555?cap_method=JAVACAP
# 所有的選項都勾選上之后連接的設(shè)備,用&&來連接多個參數(shù)字符串
Android://127.0.0.1:5037/79d03fa?cap_method=JAVACAP&&ori_method=ADBORI&&touch_method=ADBTOUCH
更多注意事項被啼、其他平臺范例帜消、命令行中使用了&符號應該如何處理等,都可以在文檔關(guān)于設(shè)備字符串中找到浓体。
3.Android設(shè)備的多機協(xié)作
Airtest支持一個腳本中連上多臺手機泡挺,但是需要注意的是,并不是能夠自動讓這一個腳本在多臺手機上跑命浴,而是能夠在腳本中使用這幾臺手機娄猫,實現(xiàn)一些類似于多機協(xié)作的效果(例如讓兩臺手機登錄同一個APP并相互“添加好友”)。
假如我們現(xiàn)在正在使用AirtestIDE編寫腳本生闲,已經(jīng)同時連上多臺手機媳溺,在運行腳本的時候AirtestIDE將會自動在命令行中添加多個--device參數(shù),把當前連接的手機都告訴腳本碍讯,無需其他額外操作悬蔽。
或者也可以直接在腳本里使用多個connect_device語句,分別傳入手機連接串信息即可:
from airtest.core.api import connect_device
dev1 = connect_device("Android://127.0.0.1:5037/serialno1") # 連上第一臺手機
dev2 = connect_device("Android://127.0.0.1:5037/serialno2") # 第二臺手機
在連接多臺手機后捉兴,我們能夠在Airtest的全局變量G.DEVICE_LIST中看到所有當前連接中的設(shè)備蝎困,可以使用set_current接口在多臺設(shè)備之間切換缅帘。
print(G.DEVICE_LIST) # 此時設(shè)備列表為[dev1, dev2]
# 傳入數(shù)字0切換當前操作的手機到第1臺
set_current(0)
# 切換當前操作的手機到序列號為serialno2的手機
set_current("serialno2")
# 使用device()接口獲取當前連接中的設(shè)備Android對象
current_dev = device()
特別注意:我們在AirtestIDE的設(shè)備連接窗口或者腳本里面連接上多臺設(shè)備,并不代表運行腳本時难衰,會自動在所有連接設(shè)備上面進行腳本跑測(同時跑測需要自行編寫多線程或多進程等來實現(xiàn))钦无。舉個例子,我們在AirtestIDE的設(shè)備連接窗口連接上了多臺Android設(shè)備盖袭,點擊運行腳本時失暂,只會在設(shè)備窗口當前顯示的那臺設(shè)備上運行。
如使用腳本連接上了多臺設(shè)備鳄虱,則需要我們使用 set_current 接口來指定切換到哪一臺設(shè)備上進行操作弟塞,否則默認會在連接的第一臺手機上運行。
4.Android平臺專屬功能與接口
在二拙已、Airtest介紹與腳本入門-平臺相關(guān)的接口一節(jié)中决记,我們提到了每個接口支持的平臺可能各不相同,而Android支持的接口是最全面倍踪、最豐富的系宫。
基本上airtest.core.api中的接口(文檔地址),在Android平臺上都可以直接使用建车,例如:
# 清理某個應用數(shù)據(jù)
clear_app("org.cocos2d.blackjack")
# 啟動某個應用
start_app("org.cocos2d.blackjack")
# 傳入某個按鍵響應
keyevent("BACK")
1)Android設(shè)備接口
除了在airtest.core.api中提供的跨平臺接口之外扩借,Android設(shè)備對象還有很多內(nèi)置的接口可以調(diào)用,我們可以在airtest.core.android.android module這個文檔中查閱到Android設(shè)備對象擁有的方法缤至,然后像這樣調(diào)用:
dev = device() # 獲取到當前設(shè)備的Android對象
print(dev.get_display_info()) # 查看當前設(shè)備的顯示信息
print(dev.list_app()) # 打印出當前安裝的app列表
2) ADB指令調(diào)用
在Android設(shè)備的測試腳本中潮罪,有時候我們需要輸入一些ADB指令,如果在普通的Python腳本中想要調(diào)用ADB指令领斥,也許需要用到subprocess等模塊單獨啟動進程運行命令行才能實現(xiàn)嫉到。
但是在Airtest腳本中,調(diào)用ADB指令是非常簡單的事情:
# 對當前設(shè)備執(zhí)行指令 adb shell ls
print(shell("ls"))
# 對特定設(shè)備執(zhí)行adb指令
dev = connect_device("Android:///device1")
dev.shell("ls")
# 切換到某臺設(shè)備月洛,執(zhí)行adb指令
set_current(0)
shell("ls")
5.安卓手機助手便捷功能
在使用AirtestIDE連接上Android手機時何恶,我們還提供了一個簡單的手機助手功能,使用方法在這里膊存。
在連上Android手機后导而,點擊設(shè)備窗口右上角的工具圖標,在展開下拉菜單中隔崎,選擇Show assistant dialog 即可打開安卓手機助手今艺。
在安卓手機助手中,我們提供了以下幾種功能:
- 手機應用的安裝/卸載/列表查看
- 常用快捷操作:打開網(wǎng)址爵卒、輸入文本虚缎、切換輸入法、音量調(diào)節(jié)等
- 手機Shell調(diào)試窗口
6.Poco測試Android原生應用實例
1)在AirtestIDE的Poco輔助窗查看Android原生控件
在AirtestIDE的Poco Assistant面板中選擇Android模式之后,AirtestIDE會開始自動向手機里安裝Pocoservice.apk和Pocoservice-test.apk实牡,部分型號手機需要手動點擊確認安裝才能順利安裝汗捡。
如無法自動安裝嫂冻,同學們也可以在IDE解壓的文件夾里晓殊,找到這倆個apk文件凤优,手動安裝到測試設(shè)備上:
安裝完成后,AirtestIDE會自動啟動PocoService题涨,它會定時抓取 Android上界面的層次結(jié)構(gòu)信息偎谁,稍等片刻就可以在AirtestIDE界面中看到當前界面的UI層次結(jié)構(gòu)樹。
點擊UI樹上的任意節(jié)點纲堵,可以Log面板中看到該節(jié)點的所有屬性巡雨,同時設(shè)備畫面中將出現(xiàn)方框,把對應位置框選出來席函,方便定位節(jié)點铐望。
同時,Poco輔助窗還給我們提供了3個輔助功能:
功能分別如下:
- Poco Pause:鎖定當前畫面并檢索當前畫面的控件茂附,單擊需要檢索的控件正蛙,log查看窗會出現(xiàn)該控件的詳細信息
- Poco Inspector:不鎖定當前畫面檢索控件,鼠標移動到哪個控件何之,log查看窗就會顯示哪個控件的詳細信息跟畅;并且鼠標對控件進行點擊時,設(shè)備畫面也會實時響應
- Poco Auto Recording:Poco腳本自動錄制功能溶推,隨鼠標對控件進行點擊、滑動等操作奸攻,會自動在腳本編輯窗口生成對應的Poco操作腳本
如果Pocoservice啟動失敗蒜危,會導致Pocoservice.apk反復重裝,此時可以檢查以下幾個方面:
- 是否Android版本過低睹耐,Poco支持Android SDK API ≥ 19辐赞,即Android 4.4及以上
- 請關(guān)閉PC或手機上連接的網(wǎng)絡(luò)代理Proxy,否則可能導致連不上Poco
- 可以嘗試卸載手機中的2個Pocoservice相關(guān)的APK后硝训,手工重新安裝一遍响委,在poco\poco\drivers\android\lib目錄下能夠找到這兩個APK
- 部分vivo和oppo手機需要將手機設(shè)置-輸入法設(shè)置中,把Yosemite輸入法設(shè)置為默認輸入法+當前輸入法
- 檢查手機助手內(nèi)是否對 pocoservice.apk 做了限制窖梁,例如在某版本的華為手機中需要開啟 允許自啟動 和 允許后臺活動 ,部分一加手機要把 pocoservice.apk 的 電池優(yōu)化 關(guān)掉赘风,詳情可以參考 “Android連接常見問題” 的文檔
- 不能和uiautomator同時啟動,否則會相互沖突
- 可以嘗試 重啟手機 看看是否會恢復
2)一個使用計算器的例子
在這里我們提供一個使用Poco對一個計算器應用編寫代碼的例子纵刘,點這里下載示例App(calculator)邀窃,并事先將此App安裝到手機上假哎。
按照剛才說的瞬捕,在AirtestIDE中的Poco輔助窗下拉菜單中選擇Android后鞍历,AirtestIDE將會自動啟動Pocoservice,顯示出當前的UI控件層次結(jié)構(gòu)樹肪虎。此后就可以在AirtestIDE中進行Poco語句的編寫和錄制了劣砍。
3)代碼示例
下面這段代碼例子將演示一個簡單的功能:點擊calculator的界面,實現(xiàn)一個1+1=2的運算驗證扇救。
# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
auto_setup(__file__)
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco()
poco('com.google.android.calculator:id/digit_1').click()
poco('com.google.android.calculator:id/op_add').click()
poco('com.google.android.calculator:id/digit_1').click()
poco('com.google.android.calculator:id/eq').click()
result = poco('com.google.android.calculator:id/formula').get_text()
assert_equal(result, '2', '1+1=2 ^^')
在這段代碼中秆剪,我們使用poco = AndroidUiautomationPoco()初始化了一個poco對象,然后分別選取了1 + 1按鈕進行點擊操作后爵政,使用get_text接口非常輕松地獲取到了結(jié)果控件的值2仅讽,并且使用Airtest的斷言語句進行結(jié)果驗證。
這個例子非常簡單钾挟,更多poco用法和例子請見poco tutorial洁灵。
7.同時連接多臺手機使用Poco
在上一篇教程(四、如何在Android手機上進行測試(上)-多機協(xié)作)中掺出,我們提到了一個腳本里可以連接多臺Android手機徽千,并且用set_current接口在手機之間切換:
from airtest.core.api import connect_device
dev1 = connect_device("Android://127.0.0.1:5037/serialno1") # 連上第一臺手機
dev2 = connect_device("Android://127.0.0.1:5037/serialno2") # 第二臺手機
set_current(1) # 切到第二臺手機
假如我們在連上手機后,想要分別使用poco去獲取控件和點擊這兩臺不同的手機汤锨,此時需要分別初始化兩個poco双抽,就像這樣:
from airtest.core.api import connect_device
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
dev1 = connect_device("Android://127.0.0.1:5037/serialno1") # 連上第一臺手機
poco1 = AndroidUiautomationPoco(dev1)
dev2 = connect_device("Android://127.0.0.1:5037/serialno2") # 第二臺手機
poco2 = AndroidUiautomationPoco(dev2)
set_current(1) # 切到第二臺手機
poco2('com.google.android.calculator:id/digit_1').click()
同理,假如不使用connect_device接口連接手機闲礼,而是通過直接在命令行中傳入--device來自動連接手機的話牍汹,不需要在代碼里重復執(zhí)行connect_device。此時只需要分別獲取到設(shè)備對象柬泽,并且使用設(shè)備對象初始化poco就可以了:
from airtest.core.api import G
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
print(G.DEVICE_LIST) # 假設(shè)當前總共有2臺手機
poco1 = AndroidUiautomationPoco(G.DEVICE_LIST[0])
poco2 = AndroidUiautomationPoco(G.DEVICE_LIST[1])
如何在iOS 手機上進行自動化測試
1.前言
Airtest支持iOS自動化測試慎菲,在Mac上為iOS手機部署iOS-Tagent之后,就可以使用AirtestIDE連接設(shè)備锨并,像連接安卓設(shè)備一樣露该,實時投影、控制手機第煮。
iOS測試不僅限于真機測試解幼,iOS模擬器也可以進行。Mac端上部署完成后還可以提供給同一局域網(wǎng)內(nèi)的windows上遠程連接使用包警。同時支持airtest圖像識別和poco UI檢索撵摆。
2. 功能支持
- 支持AirtestIDE連接,實時控制 iPhone
- 支持基本操作如啟動app揽趾、點擊台汇、滑動、輸入、截圖等等操作
- 支持控件檢索技術(shù)Poco和圖像識別
- 自動化腳本錄制苟呐、一鍵回放痒芝、報告查看等基本功能
- 支持真機或者模擬器
3. 安裝部署
1)ios-Tagent支持情況
版本需求:
- Mac Xcode ≥ 9.3
- iPhone iOS ≥ 9.3
- 在 9.3≤iOS≤10時,由于基于舊版xcode SDK牵素,建議使用Xcode 版本≤10.1來啟動iOS-Tagent严衬,否則會出現(xiàn)手機截屏不全的問題。
iOS-Tagent項目支持情況如下:
ios-Tagent | 最低支持 | 最高支持 |
---|---|---|
iPhone iOS | 9.3 | 13.5 |
xcode | 9.3 | 12.1 |
對于高版本的iOS和xcode笆呆,盡管我們的iOS-Tagent暫時沒能支持请琳;但是我們的AirtestIDE1.2.8及以上版本(即airtest1.1.8及以上版本)已經(jīng)支持了appium的WebDriverAgent,所以有高版本iiOS測試需求的同學赠幕,可以部署appium的WebDriverAgent俄精,然后使用我們的AirtestIDE(或者是airtest庫)來連接部署好的iOS進行自動化測試。
2) 部署流程
1.在Mac下載 iOS-Tagent ,使用 Xcode 啟動 Test, 具體啟動過程可參考 https://github.com/AirtestProject/iOS-Tagent 榕堰。當Xcode的log窗口輸出下圖信息的時候竖慧,就意味著部署成功了。
2.啟動代理逆屡,在命令行下執(zhí)行iproxy 8100 8100運行代理后圾旨,可以在瀏覽器打開 http://127.0.0.1:8100/status ,查看iOS設(shè)備是否能成功連接魏蔗。
iproxy是usbmuxd附帶的一個小工具砍的,它的作用是將設(shè)備的某個端口映射到電腦的某個端口。mac下可以通過brew安裝 brew install usbmuxd莺治。
iproxy 8100 8100 意思就是將手機的8100端口廓鞠,映射到電腦的8100端口上。這樣我們就能通過訪問電腦的8100端口來訪問到手機了产雹。
3.在 AirtestIDE 的設(shè)備窗口诫惭,輸入地址:http://127.0.0.1:8100 或 http://x.x.x.x(MAC IP):8100:
點擊Connect按鈕即可連接iOS設(shè)備,如圖:
2) 支持Xcode中的iOS模擬器
Xcode中的iOS Simulator模擬器部署過程和真機一樣蔓挖,但是可以省略步驟2,不需要另外執(zhí)行proxy馆衔。
當Xcode的log窗口看到下面內(nèi)容的時候瘟判,就可以直接用地址 http://x.x.x.x:8100 進行連接了,也就是log里顯示出來的ServerURLHere中的地址:
WebDriverAgentRunner-Runner[xxx:xxx] ServerURLHere->http://x.x.x.x:8100<-ServerURLHere
3) 支持Windows連接iOS
我們同樣能夠在Windows上連接一個遠程的iOS設(shè)備角溃,但是依然需要有Mac電腦與Xcode環(huán)境拷获。首先按照上文的部署教程在Mac上啟動iOS-Tagent之后,不再使用iproxy啟動代理减细,而是改用 wdaproxy匆瓜。因為iproxy只支持本機端口的映射,而wdaproxy能夠支持遠程IP映射,這意味著可以在第二部PC上驮吱,通過訪問ip的方式訪問到Mac電腦上連接的iOS設(shè)備茧妒。
通過brew install openatx/tap/wdaproxy安裝好wdaproxy
使用方法與iproxy一致,wdaproxy 8100 8100左冬,或者不填寫端口也可以桐筏,默認將會使用8100:
或者使用阿里開源的ios自動化測試工具--tidevice,可以更便捷實現(xiàn)在Windows上對iOS進行自動化測試拇砰,只要確保iOS設(shè)備上面已經(jīng)安裝好了WebDriverAgent梅忌,我們就可以利用tidevice工具在Windows平臺上啟動該WebDriverAgent,實現(xiàn)連接iOS除破。詳細教程可以參看我們的公眾號文章脫離Mac搞iOS自動化牧氮,tidevice工具教你輕松實現(xiàn)! 瑰枫。
4. iOS自動化測試實例
iOS 的測試和其他設(shè)備差不多踱葛,支持圖像識別和UI檢索,下面簡單介紹一個iOS測試例子:
- 連接設(shè)備
- 點擊home鍵
- 截屏
- 執(zhí)行滑動操作
- 使用poco點擊app Safari
- 使用poco點擊瀏覽器的搜索框躁垛,獲取焦點
- 在搜索框輸入“airtest”
- 在搜索頁面往下滑動
- 判斷是否存在airtest官網(wǎng)地址
from airtest.core.api import *
from poco.drivers.ios import iosPoco
# 連接設(shè)備
auto_setup(__file__)
connect_device("ios:///x.x.x.x:8100")
# 初始化iOS原生poco
poco = iosPoco()
# 點擊Home鍵
keyevent("HOME")
# 截屏
snapshot()
# 滑動操作
swipe(Template(r"tpl1561985939879.png", record_pos=(0.356, -0.174), resolution=(750.0, 1334.0)), vector=[-0.685, 0.0481])
# 點擊app Safari
poco("Safari").click()
# 點擊瀏覽器的搜索框
poco("URL").click()
# 輸入“airtest”
text("airtest")
# poco的滑動
poco("People also search for").swipe([-0.0541, -0.4206])
# 判斷是否存在某個截圖目標
exists(Template(r"tpl1560844284543.png", record_pos=(-0.292, 0.688), resolution=(750, 1334)))
5. 常見問題
1)如何在模擬器安裝應用
把xx.ipa 改成xx.zip,解壓得到xx.app
打開模擬器, 在終端運行 xcrun simctl install booted xx.app
tips: 不可以把真機 app 包安裝在iOS模擬器上剖毯,真機的app是基于arm的,而模擬器是運行在 X86 指令集上的教馆,強行安裝會導致閃退的問題逊谋。
2)如何進行iOS多機測試
目前暫未開放iOS多機測試功能,敬請期待
3)Api 支持狀況
請注意土铺,iOS設(shè)備與Android設(shè)備有很大的不同胶滋,以下通用的 Airtest 的 API 在iOS上都是支持的:
- 打開應用 start_app : OK
- 關(guān)閉應用 stop_app : OK
- 截圖 snapshot :OK
- 點擊Home鍵 keyevent("HOME") : OK
- 點擊 touch : OK
- 滑動 swipe : OK
- 輸入文本 text : OK
- 等待 wait : OK
- 存在截圖目標 exists : OK
- 查找并返回所有結(jié)果 find_all : OK
- 斷言存在 assert_exists : OK
- 斷言不存在 assert_not_exists : OK
但是以下API是不支持的:
- 喚醒設(shè)備 wake : 暫未支持 (考慮用home方法替代)
- 事件操作 keyevent : 只支持home 事件
- 清除應用數(shù)據(jù) clear_app : 暫未支持
- 安裝應用 install : 暫未支持
- 卸載應用 uninstall : 暫未支持
Appium 的基本介紹
簡介
Appium 是一款開源框架,擁有豐富的生態(tài)系統(tǒng)和強大的社區(qū)支持悲敷,一直受到開發(fā)者的積極維護究恤。作為一種靈活的跨平臺測試自動化工具,Appium 能夠在 iOS后德、Android部宿、Windows 和 Mac 設(shè)備上執(zhí)行移動應用的自動化測試,并且支持使用相同的 API 編寫適用于多個平臺的測試腳本瓢湃。
Appium 與 Selenium 類似理张,是一個跨語言的自動化框架,可與任何測試框架結(jié)合使用绵患。它支持多種編程語言雾叭,包括 Java、JavaScript落蝙、PHP织狐、Ruby暂幼、Python 和 C#,使開發(fā)者能夠使用其熟悉的語言編寫測試腳本移迫。
Appium 優(yōu)勢
Appium 的初衷即是解決移動端自動化的問題旺嬉,從 Appium1.0 的初期發(fā)展到如今的 Appium2.0,其穩(wěn)定性和擴展性也在逐步提升起意,豐富的插件和支持多平臺的特性鹰服,不斷改進的過程中使其從單一項目發(fā)展到強大的生態(tài)系統(tǒng),這些進步使得 Appium 在開源跨平臺移動端自動化的領(lǐng)域占有很重要的地位揽咕。
Appium 能有如今的火爆程度很大程度上取決于它對多平臺和多應用的適用性悲酷,具體有以下幾個方面的優(yōu)勢:
1.支持的應用類型:Appium 支持測試原生應用程序、混合應用程序和移動網(wǎng)頁應用程序亲善。無論應用程序是使用原生 API 開發(fā)的還是使用 Web 技術(shù)封裝的设易,都可以使用 Appium 進行測試。
2.跨平臺和跨設(shè)備支持:Appium 提供了跨平臺和跨設(shè)備的支持蛹头,可以在不同操作系統(tǒng)版本和不同設(shè)備上執(zhí)行測試顿肺。這使得測試團隊可以在各種環(huán)境下進行廣泛的測試覆蓋。
3.WebDriver 協(xié)議:Appium 使用 WebDriver 協(xié)議來驅(qū)動和控制移動設(shè)備渣蜗,這是一種標準的 Web 自動化協(xié)議屠尊。這意味著熟悉 Web 自動化測試的開發(fā)人員可以很容易地過渡到移動應用程序的測試。
4.第三方工具和集成:Appium 與許多第三方工具和框架集成耕拷,例如 pytest讼昆、TestNG、JUnit骚烧、Cucumber 和 Jenkins 等浸赫。這使得開發(fā)人員可以將 Appium 集成到現(xiàn)有的測試和持續(xù)集成工作流程中。
不同的引擎適用于不同的應用程序類型和平臺赃绊。在選擇引擎時既峡,需要考慮應用程序的平臺、類型和需求碧查,可以根據(jù)具體的需求和條件選擇合適的引擎來執(zhí)行 Appium 自動化測試运敢。
Appium Drivers
Appium 支持的多平臺自動化的方法就是通過 drivers 即 Appium 引擎,這是 Appium 框架的核心組件忠售,負責驅(qū)動和控制移動設(shè)備或模擬器者冤,以執(zhí)行自動化腳本。Drivers 最初只是 Node.js 類档痪,Appium 對它進行了擴展,稱為 BaseDriver邢滑,是對整個 WebDriver 協(xié)議的封裝腐螟。通過優(yōu)化和擴充愿汰,提供了更強大的功能和更廣泛的支持。這使得 Appium 能夠跨多種平臺實現(xiàn)自動化測試乐纸,為移動應用的測試提供了高度靈活性和可擴展性衬廷。
Appium 主要支持的 Drivers 有以下幾種:
iOS 引擎
- XCUITest(默認引擎):用于測試 iOS 原生應用程序。
- WebDriverAgent:基于 XCUITest 的開源框架汽绢,用于測試 iOS 應用程序吗跋。
Android 引擎
- UiAutomator2(默認引擎):用于測試 Android 原生應用程序。
- Espresso:用于測試 Android 應用程序宁昭,特別適用于 UI 自動化測試跌宛。
- Selendroid:用于測試 Android 應用程序,支持舊版本的 Android 平臺积仗。
其他引擎
- Chromium Driver:用于測試 Chrome 瀏覽器疆拘。
- Flutter Driver:用于測試 Flutter 應用程序。
- Windows Driver:用于測試 Windows 桌面應用程序寂曹。
- Mac2 Driver:用于測試 Mac 桌面應用程序哎迄。
Appium 生態(tài)工具
Appium 旨在支持不同的平臺的 UI 自動化,不僅如此隆圆,它還旨在支持用不同語言編寫的自動化代碼漱挚。所以 Appium 有自己的一套生態(tài),其中包含了幾個部分以此來實現(xiàn)這個目標渺氧。
- Drivers(必需):適用于多個平臺的驅(qū)動程序旨涝。
- Clients(必需):各種語言的客戶端封裝庫,用于連接 Appium Server阶女。
- Plugins(可選):插件提供了各種方式來擴展 Appium 的功能颊糜。
- Related-Tools:與測試沒有直接關(guān)系的輔助工具
- Appium Inspector:用來做元素定位
- Appium Doctor:檢測 Appium 環(huán)境的安裝,并檢測常見的問題
Appium環(huán)境安裝與使用
環(huán)境安裝與使用
簡介
下面是 Appium 服務安裝及后續(xù)代碼測試所需基本環(huán)境的具體安裝步驟秃踩。
JDK 環(huán)境 在 Appium 中衬鱼,UiAutomator2 通過 Java 編寫與 Android 應用程序進行交互,因此需要配置 JDK 環(huán)境憔杨∧窈眨可以參考安裝教程貼進行安裝。
Android SDK 環(huán)境 Appium 使用 Android SDK 與 Android 設(shè)備通信消别、管理模擬器或物理設(shè)備抛蚤,并執(zhí)行 App 自動化測試。為了測試 Android 應用程序寻狂,需要安裝 Android SDK岁经,并確保在測試環(huán)境中正確配置了相應的路徑和環(huán)境變量。
**Node.js 環(huán)境 **安裝命令行版本的 Appium Server 需要 Node.js 環(huán)境蛇券。建議使用版本 14.17.0缀壤、16.13.0 或不小于 18.0.0樊拓。確保正確安裝 Node.js 以便啟動 Appium 服務。
Appium 服務 在 2.x 版本之前塘慕,Appium 提供了命令行版本和圖形化版本兩種安裝方式筋夏,但在 2.x 更新后,只提供了命令行版本图呢。用戶可以選擇其中一種進行安裝条篷。
Appium Inspector 環(huán)境 在測試過程中,使用 Appium Inspector 工具輔助元素定位蛤织。確保安裝并配置 Appium Inspector赴叹,以便在測試過程中準確定位 App 的元素。
**Appium 客戶端環(huán)境 **根據(jù)選擇的編程語言瞳筏,需要安裝相應的 Appium 客戶端庫稚瘾。這些庫提供了與 Appium 服務器進行通信的 API 和方法,以便于編寫測試腳本姚炕。
移動設(shè)備平臺工具 在測試過程中摊欠,可以選擇使用真機或模擬器。確保配置和優(yōu)化所選平臺的工具柱宦,以便進行有效的測試些椒。
安裝步驟
以下是上述所需環(huán)境的具體安裝步驟。
1.Android SDK
安裝 Android SDK
方式一:直接安裝 SDK
直接下載 SDK 壓縮包掸刊,可能會有版本不兼容的問題免糕,不推薦。
-
進入網(wǎng)盤忧侧,下載 sdk.zip
SDK Manager -> SDK Tools
-
解壓好的 sdk 其實就是一個文件夾石窑,配置好環(huán)境變量就可以直接使用
方式二:使用 Android Studio 安裝 Android SDK
可以選擇 SDK 工具的版本,推薦方式蚓炬。
通過官網(wǎng)下載 Android Studio 對應版本后松逊,直接安裝,安裝時會進行環(huán)境的初始化肯夏,使用標準安裝即可经宏。
在 AndroidStudio 歡迎界面打開 SDKmanager ,在 SDK Tools 目錄下安裝如下進行安裝:
配置 Android 環(huán)境變量
Windows 配置 Android 環(huán)境
- 新增 ANDROID_HOME 系統(tǒng)變量
- 變量名:ANDROID_HOME
- 變量值:D:\adt-bundle-mac-x86*.64-20140702\sdk(SDK 安裝的根目錄)
- 修改 Path 變量
- %ANDROID_HOME%\emulator
- %ANDROID_HOME%\platform-tools
- %ANDROID_HOME%\tools
- %ANDROID_HOME%\tools\bin
MacOS 配置 Android 環(huán)境
修改 .bash_profile:
# .bash_profile
# Setting PATH for ANDROID_HOME
export ANDROID_HOME=/Users/mac/Library/Android/sdk
export PATH=$ANDROID_HOME/emulator:$PATH
export PATH=$ANDROID_HOME/platform-tools:$PATH
export PATH=$ANDROID_HOME/tools:$PATH
export PATH=$ANDROID_HOME/tools/bin:$PATH
export PATH=$ANDROID_HOME/build-tools/29.0.1:$PATH
Android 環(huán)境驗證
- 進入命令行
- 輸入 adb --version
- 輸出版本號信息即成功
2.Node.js
安裝
- 官網(wǎng)下載地址
- 網(wǎng)盤地址
-
安裝過程中在如下圖的界面需要選擇 Add to PATH 選項(點擊選項驯击,藍色高亮)烁兰,選中會自動配置環(huán)境變量。
環(huán)境驗證
命令行輸入以下兩條命令徊都,成功出現(xiàn)如圖所示的版本號即為安裝成功沪斟。
node -v
npm -v
3.Appium 服務端
Appium 服務端有 GUI 版本,也有命令行版本暇矫。目前 GUI 版本官方已經(jīng)停止更新币喧,對應的是 Appium 1.x 版本的服務端轨域。
Appium 命令行版本的服務端目前官方已經(jīng)更新到了 2.x 版本,以下會以 2.x 版本為例介紹命令行版本服務端的安裝方式杀餐。
無論是 GUI 版本還是命令行版本,都是 Appium 服務端朱巨。使用時史翘,二選一即可。
Appium GUI
Appium Server
Appium Server 2.x 安裝
- 命令行輸入 npm install -g appium
- 安裝后輸入 appium冀续,成功啟動會顯示如下內(nèi)容:[Appium] Welcome to Appium v2.0.0
安裝驅(qū)動
- 注意:Appium Server 2.x 版本必須單獨安裝
- 命令行輸入:appium driver install uiautomator2
- 再次啟動 appium琼讽,成功安裝會顯示如下內(nèi)容:
Attempting to find and install driver 'uiautomator2'
? Installing 'uiautomator2' using NPM install spec 'appium-uiautomator2-driver'
Driver uiautomator2@2.0.5 successfully installed
- automationName: UiAutomator2
- platformNames: ["Android"]
安裝 appium-doctor(可選)
- 注意:可選,用來驗證 appium 環(huán)境
- 命令行輸入:npm install -g appium-doctor
- 安裝后輸入:appium-doctor洪唐,成功顯示如下內(nèi)容并且所需環(huán)境前方為 "√",即為安裝成功。
Appium Server 1.x 和 2.x 的版本差異:
1.默認服務器基本路徑
Appium 1 默認接受 http://localhost:4723/wd/hub 的命令惜浅,僅是 Selenium1 遷移到 Selenium2 時遺留下來的約定俺榆,并且不再和 Selenium 強綁定的關(guān)系。因此粒蜈,Appium2 的默認基本路徑現(xiàn)在是 /顺献。
2.單獨安裝驅(qū)動程序
Appium 1 所有可用的驅(qū)動程序與主 Appium 服務同時安裝。
Appium 2 將驅(qū)動程序拆出 Appium 的安裝枯怖,這樣 Appium 的服務安裝會更加的輕便注整。用戶可根據(jù)自己的需求安裝相應的驅(qū)動程序。安裝有兩種方式:
- 和 Appium 分開安裝
appium driver install uiautomator2
appium driver install xcuitest@4.12.2
- 和 Appium 一起安裝
npm i -g appium --dirvers=xuitest,uiautomator2
1.驅(qū)動安裝路徑
2.Appium 1度硝,驅(qū)動程序與 Appium 服務器同時安裝肿轨,位于 /path/to/appium/node_modules
3.Appium 2,在 APPIUM_HOME 環(huán)境變量定義的路徑中安裝此類依賴項蕊程,默認路徑是 ~/.appium
4.capability 需要加前綴
capabilities 之前稱為 desired capabilities 椒袍,和之前最大的區(qū)別是任何非標準功能都需要供應商前綴,標準功能是在 WebDriver 協(xié)議中給出的存捺。常用的有 browserName 和 platformName 等槐沼。
其它的功能名稱中需要包含 供應商前綴,前綴的格式是 前綴: 捌治,例如 Appium:岗钩。Appium 中的大多數(shù) capabilities 都超出了標準的 W3C 功能,例如:
- appium:app
- appium:noReset
- appium:deviceName
- 圖像分析功能移至插件
Appium2 的設(shè)計目標之一是將非核心功能拆離到插件中肖油,這使得 Appium Server 的安裝變得更加的容易兼吓,用戶可根據(jù)所需要的功能選擇是否下載對應的插件。Appium 各種和圖像相關(guān)的功能已經(jīng)移至 images 的插件中森枪。
使用這個插件需要安裝并啟動時運行該插件:
- 安裝插件:appium plugin install images
- 運行插件:appium --use-plugins=images
- 支持配置文件
Appium2 不僅支持命令行參數(shù)视搏,新版本的更新也增加了對配置文件的支持审孽。配置文件可以是 JSON、JS 或 YAML 格式浑娜。
Appium 會從當前工作路徑的根路徑下搜索配置文件佑力,可以指定自定義:appium --config-file /path/to/config/file
4.Appium Inspector
推薦安裝 2022 年 6 月的版本。
5.Appium 客戶端
python 客戶端安裝
pip install Appium-Python-Client
6.安裝移動設(shè)備平臺工具
需要根據(jù)要測試的移動設(shè)備平臺(如 Android 或 iOS)筋遭,安裝相應的平臺工具和驅(qū)動程序打颤。
Android 平臺:安裝 Android SDK,并使用 Android SDK Manager 安裝所需的平臺版本和工具漓滔。
iOS 平臺:對于 iOS 設(shè)備測試编饺,需要安裝 Xcode,并配置所需的 iOS 模擬器或真機設(shè)備响驴。
確保平臺工具和驅(qū)動程序已正確安裝并配置透且,以便與 Appium 進行通信和控制。
Andriod 模擬器 mumu
- 官網(wǎng):https://mumu.163.com/
- 網(wǎng)盤地址
- 下載后直接安裝即可使用豁鲤,下載成功后打開如圖所示
目前模擬器呈現(xiàn)的界面并不是希望的手機界面秽誊,通過以下設(shè)置,把它調(diào)整成手機大小畅形,找到界面右上角進入設(shè)置中心
通過界面設(shè)置 選擇 1280*720 就是手機屏幕的大小养距,選擇后進行保存即可,保存后需要重啟即可邊更改為手機大小日熬。
完成以上步驟后棍厌,Appium 環(huán)境就安裝好了∈可以啟動 Appium 服務器耘纱,并使用相應的客戶端庫編寫和執(zhí)行自動化測試腳本。
Appium 原理解析
簡介
Appium 的工作原理涉及到復雜的通信過程毕荐。因為 Appium 服務集成了多種技術(shù)束析,它依賴其他服務的支持才能實現(xiàn)對多平臺的強大兼容性。通過深入分析原理憎亚,可以更好地理解和使用 Appium员寇,并為使用者提供更全面的視角,從而獲得更大的幫助第美。
原理分析
從上圖可以了解到蝶锋,Appium 的設(shè)計主要分為三個大模塊,每個模塊都有其清晰的職能什往,完全符合設(shè)計模式中的單一職責扳缕,這也是其可拓展性強的原因:
- Client 端:將與 Appium 的各種交互封裝為可被調(diào)用的 API 或工具,如此一來使用者就可以通過 Inspector 或者 Java/Python/其他語言的 Appium 第三庫對 Appium Server 進行調(diào)用。
- Server 端:起到了信息中轉(zhuǎn)的作用躯舔。啟動了一個 HTTP 服務驴剔,如此就可以接收Client 客戶端的請求信息。除此之外粥庄,會將所有的控制命令丧失,比如:Adb 命令,自動化的控制命令等其他命令轉(zhuǎn)發(fā)到被測應用的移動端上面飒赃。
- 移動端:真正執(zhí)行自動化測試的地方利花。
由以上的三個模塊可知,為了實現(xiàn)良好的拓展性载佳,其實 Appium 的設(shè)計相對是比較復雜的。
Appium Inspector 自動化用例錄制
Appium Inspector 簡介
Appium Inspector 是 Appium 的一個工具臀栈,用于幫助開發(fā)人員和測試人員分析和調(diào)試移動應用程序蔫慧。它提供了圖形界面和交互式的功能,使您能夠輕松地檢查應用程序的 UI 元素权薯、獲取元素屬性姑躲、執(zhí)行操作和生成自動化測試腳本。
Appium Inspector 的主要功能如下:
1.元素定位和查看:Appium Inspector 允許通過簡單的點擊來選擇和定位應用程序中的 UI 元素盟蚣∈蛭觯可以直接在應用程序界面上點擊元素,然后 Inspector 會顯示元素的屬性信息屎开,如 ID阐枣、類名、文本內(nèi)容等奄抽。這樣就可以輕松地確定元素的定位策略和屬性蔼两,用于后續(xù)的測試腳本編寫。
2.執(zhí)行操作:Appium Inspector 提供了一些操作按鈕逞度,可以模擬用戶在應用程序上的操作额划。例如可以點擊按鈕、輸入文本档泽、滑動屏幕等俊戳。這樣可以驗證應用程序的交互和功能。
3.自動化腳本生成:Inspector 還具有自動化腳本生成功能馆匿,可以根據(jù)用戶在應用程序上的操作生成相應的自動化測試腳本抑胎。這樣可以快速生成測試腳本的起點,然后進行進一步的定制和擴展甜熔。
4.元素搜索和篩選:Inspector 提供了搜索和篩選功能圆恤,可以找到特定的 UI 元素。可以使用屬性值盆昙、文本內(nèi)容等條件來搜索和篩選元素羽历,從而快速定位到目標元素。
總之淡喜,Appium Inspector 是一個強大的工具秕磷,提供了圖形界面和交互式的功能,幫助開發(fā)人員和測試人員在進行移動應用程序的 UI 分析炼团、元素定位和自動化測試腳本編寫時更加便捷和高效澎嚣。
Appium Inspector 配置啟動
測試對象
使用 appium 官方 Demo apk 進行練習。
下載 apk
配套資料下的 apk 目錄瘟芝。
安裝 apk
- 拖拽到模擬器安裝易桃。
- 進入到 apk 下載的目錄執(zhí)行:adb install ApiDemos-debug.apk 安裝
啟動 Appium 服務
命令行輸入:appium,成功啟動服務后如下圖:
配置 Inspector
打開 Inspector锌俱,填寫 Desired Capablility 配置信息晤郑。
獲取被測 app 信息
配置 Desired Capabilities 需要獲取被測 app 的包名與啟動 Activity 名∶澈辏可以按照以下命令獲取造寝。
方法一
依次執(zhí)行以下三條命令,通過需要找的軟件名稱執(zhí)行 monkey 命令吭练,得到具體頁面的 Activity诫龙。
# 一:找到當前設(shè)備里所有的軟件
adb shell pm list packages
# 二:根據(jù)關(guān)鍵詞 篩選出需要找的軟件的包名
# mac
adb shell pm list packages | grep "軟件名"
# windows
adb shell pm list packages | findstr "軟件名"
# package:io.appium.settings
# package:io.appium.uiautomator2.server
# package:io.appium.android.apis
# package:io.appium.uiautomator2.server.test
# 三:在指定的應用程序上執(zhí)行一個 Monkecy 測試事件,并輸出詳細的日志信息
adb shell monkey -p "包名" -vvv 1
# // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=io.appium.android.apis/.ApiDemos } in package io.appium.android.apis
方法二
打印并篩選 adb 的日志鲫咽,等待日志刷新結(jié)束签赃,重新打開需要測試的 APP,即可得到 package 和 activity浑侥。
# Mac
adb logcat ActivityManager:I | grep "START"
# Windows
adb logcat ActivityManager:I | findstr "START"
驗證 Activity
使用 adb 啟動應用命令姊舵,驗證獲取到的包名和 Activity 是否可以成功啟動被測應用。
adb shell am start -W -S -n io.appium.android.apis/.ApiDemos
Stopping: io.appium.android.apis
Starting: Intent { cmp=io.appium.android.apis/.ApiDemos }
Status: ok
Activity: io.appium.android.apis/.ApiDemos
ThisTime: 437
TotalTime: 437
WaitTime: 452
Complete
命令中的 -S 代表先停止目標應用寓落,再啟動括丁;-W 代表展示啟動時間信息。
可以成功啟動伶选,代表包名與啟動 Activity 正確無誤史飞。
配置 Remote Path
1.Remote Path:/。
2.本機調(diào)試:
- Remote Host:127.0.0.1
- Remote Port:4723
跟 Appium Server GUI 中的配置對應仰税,分別為 IP构资、端口和地址,其中地址默認配置 /wd/hub 即可陨簇。
IP 如果是本機就配置 127.0.0.1吐绵,如果 Appium Server 和 Appium Inspector 不是同一臺機器,那么就需要配置 Appium Server 所在機器的 IP(Appium Server GUI 的 HOST 也需要配置本機 IP,不能配置為 0.0.0.0)己单。
配置 Desired Capablility
初始化參數(shù)(Capability)是 JSON 數(shù)據(jù)類型編碼的鍵和值唉窃,當一個新的自動化會話被請求時,Appium 客戶端發(fā)送此參數(shù)到服務端纹笼。用來告訴 Appium 驅(qū)動程序做哪些特定的測試纹份。通過設(shè)置參數(shù)可以傳遞給 Appium Server 對應的配置信息。
設(shè)置 Capablility
- platformName(必填):平臺廷痘,Android/iOS
- appium:automationName(必填):驅(qū)動:uiautomator2/XCUITest
- appium:deviceName:設(shè)備名
- appium:appPackage:應用的包名
- appium:appActivity:應用啟動 Activity 名
以下是一個最基本的 Capablility 設(shè)置:
{
"platformName": "android",
"appium:automationName": "uiautomator2",
"appium:deviceName": "emulator-5554",
"appium:appPackage": "io.appium.android.apis",
"appium:appActivity": "io.appium.android.apis.ApiDemos"
}
可以一行一行添加蔓涧,也可以直接點擊如下的 Edit Raw JSON,直接修改 JSON 串笋额。
保存 Capablility
如果要保存當前的 Desired Capabilites 配置元暴,可以點擊 Save as 按鈕掏导,然后在彈出的框中輸入名字,就可以保存成功了溉愁。
這樣重啟 Appium Inspector 后息楔,下次直接選擇保存的配置就可以颇蜡,不需要重新輸入配置信息。
Attach to Session
如果 Appium 已經(jīng)有連接到手機的 Session 扮叨,那么直接選擇 Session ID缤弦,加入即可,不需要再進行配置彻磁。
啟動 Session
配置好 Capablility 后碍沐,點擊 Start Session 按鈕,即可啟動 Session衷蜓,進入 Inspector 頁面累提。
Inspector 基礎(chǔ)功能
- Native App Mode:原生態(tài) APP 模式。
- Web/Hybrid App Mode:Web 和混合模式移動應用磁浇。
- Select Elements:選擇元素斋陪。
- Swipe By Coordinates:通過坐標點滑動。
- Tap By Coordinates:通過坐標點點擊扯夭。
- Back:返回按鍵鳍贾。
- Refresh Source & Screenshot:刷新按鈕,同步移動端頁面交洗。
- Start Recording:錄制按鈕骑科。
- Search for element:搜索定位表達式。
- Quit Session & Close Inspector:退出當前 Session构拳。
首先是同步手機頁面頂部的 3 個操作按鈕從左到右分別是:
1.Native app mode:原生態(tài) APP 模式咆爽,點擊此按鈕定位原生態(tài)元素梁棠。
2.Web/Hybrid App mode:Web 和混合模式移動應用,有 web view 時需要定位元素需要選擇此按鈕斗埂。
3.查看元素:當想要查看某一元素時符糊,點擊如下圖“選擇元素”按鈕,然后在屏幕截圖中點擊要查看的元素呛凶,最后在最右側(cè)區(qū)域可以看到元素的 xpath男娄、id 等定位元素。
4.滑動坐標:點擊如下“滑動坐標”按鈕漾稀,即可在屏幕截圖上進行滑動操作
5.點擊坐標:點擊如下"點擊坐標點"按鈕模闲,即可在屏幕上進行坐標點擊操作跟直接操作手機一樣了尸折。注意此功能和選擇元素按鈕互斥实夹,兩個只能選一個亮航。
6.回退按鈕:相當于手機的返回鍵匀们。當我們想要查看返回上一個操作查看頁面信息塞赂,可以通過點擊“返回”按鈕。此時 Inspector 窗口和手機都會同時回到上一個操作的界面昼蛀。(等同于 android 手機上的返回鍵)。
7.刷新按鈕:刷新按鈕圆存,當我們在手機上對 APP 進行操作后叼旋,Inspector 窗口的屏幕截圖不會自動更新,需要我們通過點擊“刷新源和屏幕截圖”按鈕沦辙,更新應用的最新頁面夫植。
8.用例錄制:錄制按鈕,點擊此按鈕后可以進行錄制油讯。當我們想知道如何編寫操作界面的代碼時详民,可以點擊“錄制”按鈕,然后對屏幕截圖進行操作陌兑,即可以實現(xiàn)操作的代碼錄制功能沈跨,非常實用兔综。注意的是錄制時心肪,需要使手機頁面變成可操作狀態(tài)。
9.搜索定位表達式:根據(jù) ID 或 Xpath 定位元素,檢測表達式是否正確。選擇一個屬性 id(resource-id)著淆、name(text)、xpath、className(class) 等。輸入屬性對應的值玉工,點擊 Search潮改,即可搜索到界面對應元素的按鈕。
10.退出 Session:退出當前 Session缨历,點擊后返回到 Appium Inspector 的 Start Session 頁面。
元素定位與查看
同步到移動端頁面后,點擊 Select Elements 按鈕進入選擇元素模式。
點擊頁面元素后诽里,即可查看元素源碼和元素的屬性信息墓懂。
查看元素信息
查看頁面源碼
在 App Source 界面中盈罐,可以查看當前選中的元素在的源碼,以 XML 樹的形式,展示界面上的控件布局库物。
對于源碼民晒,可以進行如下操作。
1.復制頁面源碼
2.下載頁面源碼
查看元素屬性
在 Selected Element 界面中,可以查看當前選中元素的詳細屬性信息。
做自動化測試需要定位元素吱型,就需要用到元素的這些屬性信息据沈。
對于選中的元素還可以進行操作:
1.點擊:選擇一個元素后孔祸,還可以“點擊”元素穴墅,當您使用一個元素執(zhí)行 Tap 操作時,Inspector 將發(fā)送命令到 Appium夹界,它將執(zhí)行它营密。如果操作成功键俱,左側(cè)將生成一個新的屏幕截圖踪央,您將看到應用程序的更新狀態(tài)和 XML液斜。如果不成功,您看到錯誤消息。
2.輸入文本:選擇一個元素后,還可以“發(fā)送內(nèi)容”到元素(前提:它是一個輸入框 EditText)仔掸。同樣 Inspector 將發(fā)送命令到 Appium 執(zhí)行它脆贵。
3.清空文本:選擇一個元素后,還可以對元素“清空內(nèi)容”(前提:它是一個輸入框 EditText)嘉汰。同樣 Inspector 將發(fā)送命令到 Appium 執(zhí)行它。
4.復制元素屬性:可以將元素屬性以 JSON 格式保存到粘貼板状勤。
自動化用例錄制步驟:
1.點擊 Start Recording 按鈕進入錄制狀態(tài)
2.在同步過來的界面中選擇元素
3.在 Selected Elements 界面中進行操作
4.測試操作結(jié)束后點擊 Pause Recording 結(jié)束錄制
5.在 Recorder 界面展示錄制腳本
用例錄制示例
測試步驟:
1.打開 API Demo 應用
2.點擊 OS,進入下個界面
3.點擊【Morse Code】
4.輸入內(nèi)容【ceshiren.com】
5.返回上一個頁面
6.返回上一個頁面
總結(jié)
Appium Inspector 是一款有助于進行 APP 自動化測試的工具舔哪,它通過可視化方式幫助用戶理解應用程序的 UI 結(jié)構(gòu)墩莫,并簡化了創(chuàng)建和調(diào)試自動化測試腳本的過程哪审。
App 自動化應用控制
簡介
app 自動化控制是通過自動化測試工具來模擬用戶與移動應用程序進行交互恋日,以執(zhí)行各種測試操作扼倘。
操作步驟
啟動
啟動應用主要有兩種方式:
1.正常啟動應用。
2.在腳本中啟動其他應用
正常啟動應用:創(chuàng)建一個 WebDriver 實例,用于與 Appium 服務器建立連接,并傳遞所需的啟動配置(Desired Capabilities)金拒。主要需要以下兩個參數(shù):
- url:指定 Appium 服務器的 URL 地址。這通常是 Appium 服務器的主機名和端口號,例如http://localhost:4723吁峻。
- capability:一個字典對象,包含了啟動應用程序時的配置信息基显。這些配置信息可以包括設(shè)備名稱库继、平臺版本、應用程序包名窜醉、活動名稱制跟、自動化測試引擎、設(shè)備連接信息等酱虎。
通過將 URL 和 Capabilities 傳遞給啟動方法,Appium 客戶端庫將與 Appium 服務器建立連接擂涛,并使用提供的配置信息啟動相應的會話读串。這將創(chuàng)建一個可以用于與應用程序進行交互的 WebDriver 實例。
在腳本中啟動其他應用:可以在設(shè)備上激活給定的應用程序撒妈,傳入的 app_id 為指定應用的包名恢暖。
- Python
# 啟動應用:
appium_server_url = 'http://localhost:4723'
driver = webdriver.Remote(appium_server_url,options=UiAutomator2Options().load_capabilities(caps))
# 在腳本中啟動其他應用:
driver.activate_app("com.xx.xx")
- Java
// 啟動應用:
AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723"), uiAutomator2Options);
關(guān)閉
- 關(guān)閉指定 app:關(guān)閉當前操作的 app,不會關(guān)閉驅(qū)動對象狰右。
- 關(guān)閉驅(qū)動對象:關(guān)閉當前所有的關(guān)聯(lián)的 app杰捂,并關(guān)閉驅(qū)動對象。
Python
# 關(guān)閉指定 app
driver.terminate_app("com.xx.xx")
# 關(guān)閉當前所有的關(guān)聯(lián)的 app棋蚌,并關(guān)閉驅(qū)動對象
driver.quit()
Java
//關(guān)閉指定 app
driver.terminateApp("app名稱");
//關(guān)閉驅(qū)動對象
driver.quit();
完整示例
使用 appium 官方 Demo apk 進行練習嫁佳,apk 網(wǎng)盤地址。
- Python
class TestApiDemo:
def setup_class(self):
# Capability 設(shè)置定義為字典
caps = {}
# 設(shè)置 app 安裝的平臺(Android谷暮、iOS)
caps["platformName"] = "Android"
# 設(shè)置 app 的包名
caps["appium:appPackage"] = "io.appium.android.apis"
# 設(shè)置 app 啟動頁
caps["appium:appActivity"] = ".ApiDemos"
# 不清空緩存
caps["appium:noReset"] = True
# 指定應用程序在會話結(jié)束時終止
caps["appium:shouldTerminateApp"] = True
# 初始化 driver
appium_server_url = 'http://localhost:4723'
self.driver = webdriver.Remote(appium_server_url,
options=UiAutomator2Options(). \
load_capabilities(caps))
print('初始化driver')
# 設(shè)置隱式等待
self.driver.implicitly_wait(10)
def teardown_class(self):
# 停留 3 秒
time.sleep(3)
self.driver.activate_app("com.android.browser")
print('打開瀏覽器')
# 停留 3 秒
time.sleep(3)
self.driver.terminate_app("com.android.browser")
print('關(guān)閉瀏覽器')
time.sleep(3)
# 關(guān)閉 driver
self.driver.quit()
print('關(guān)閉driver')
def test_control(self):
print("執(zhí)行成功")
- Java
@BeforeAll
public static void setUpClass() {
UiAutomator2Options uiAutomator2Options = new UiAutomator2Options()
// 配置平臺名稱
.setPlatformName("Android")
// 配置驅(qū)動driver名稱
.setAutomationName("uiautomator2")
.setNoReset(true)
// 配置啟動app
.amend("appium:appPackage", "xxxx")
.amend("appium:appActivity", "xxx")
.amend("appium:forceAppLaunch", true)
.amend("appium:shouldTerminateApp", true);
//初始化
try {
driver = new AndroidDriver(new URL("http://127.0.0.1:4723"), uiAutomator2Options);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
@AfterAll
public static void tearDownClass(){
driver.terminateApp("app名稱");
driver.quit();
}
總結(jié)
在 APP 測試中蒿往,啟動應用程序通常涉及兩種情況:一是初始化一個全新的應用程序?qū)嵗谴蜷_一個已經(jīng)存在的應用程序湿弦。為了實現(xiàn)這兩種情況瓤漏,可以使用不同的方法,即初始化 Appium driver 或者使用 activate_app 方法切換到某個應用程序的上下文颊埃。
在關(guān)閉應用程序時蔬充,也存在兩種情況:一是完全退出應用程序,二是結(jié)束應用程序的進程班利,并不完全退出饥漫,使其不再運行在前臺。分別使用 quit 方法和 terminate_app 實現(xiàn)罗标。