windows7 + Appium + 夜游安卓模擬器 + Python
像Selenium可以操控Web瀏覽器夫晌,手機(jī)APP平臺也有類似的自動化測試工具:Appium;
全文分基礎(chǔ)介紹所袁、環(huán)境搭建和案例演示三部分介紹Appium凶掰,以幫助Learner快速的上手。
基礎(chǔ)介紹
詳細(xì)原理介紹請點(diǎn)擊
Appium是一個開源的自動化測試框架懦窘,用于原生,混合和移動Web應(yīng)用程序港华。 它使用WebDriver協(xié)議驅(qū)動iOS午衰,Android和Windows應(yīng)用程序冒萄。關(guān)于它的運(yùn)作流程尊流,用圖來介紹會更加生動形象一些:
在上圖中,左邊這部分是Appium-Client迎献,通俗點(diǎn)來說,是用于間接驅(qū)動最右邊的設(shè)備執(zhí)行預(yù)定的自動化測試流程忿晕,支持使用多種主流的編程語言進(jìn)行編寫践盼,這也是測試開發(fā)人員需要關(guān)注的核心部分宾巍;中間的Appium-Server是銜接左邊客戶端以及右邊APP設(shè)備端的重要橋梁,一般僅需要配置好環(huán)境及啟動運(yùn)行肄程;右邊這塊,當(dāng)然就是實(shí)際執(zhí)行自動化測試的終端蓝厌,如IOS真機(jī)古徒、Android真機(jī)隧膘,或者是模擬器。
工具:
? ? 1.使用Java開發(fā)時(shí)才需要下載? JDK
? ? 2. node.js
? ? 3. Android SDK
? ? 4.Appium-Server:下載appium-desktop即可
? ? 5.Appium-Python-Client? (編寫測試腳本用)
? ? 6.終端:下載夜神安卓模擬器
? ? 7.實(shí)例:(1)模擬機(jī)安卓應(yīng)用自動化測試(2)真機(jī)自動化化測試
1.安裝JDK
(1) 官網(wǎng)下載地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html
(2) 選擇Java SE 8u201/ 8u201疹吃,點(diǎn)擊JDK下載
(3) 安裝下載的JDK
(4)配置系統(tǒng)環(huán)境變量
在“系統(tǒng)變量”一欄中萨驶,進(jìn)行新建或編輯操作
(1)新建JAVA_HOME變量
變量名:JAVA_HOME
變量值:填寫JDK安裝目錄(我的是 D:\Program Files (x86)\Java\jdk1.8.0_181)
(2)找到Path變量進(jìn)行編輯,沒有的話就新建一個
變量名:Path
變量值: ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
(原有變量值不要刪除叁温,直接在末尾添加)
//注意前面有個英文的分號券盅,不要漏掉膛檀,這是為了跟前面的變量值間隔開的
(3)新建CLASSPATH變量
變量名:CLASSPATH
變量值: .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
//可以直接復(fù)制這句話到變量值那一欄,注意前面有個“.”不要漏掉
點(diǎn)擊確定泳炉,保存設(shè)置嚎杨,回到桌面“win+R”,輸入“cmd”
輸入命令:java -version
詳細(xì)內(nèi)容見? http://www.reibang.com/p/c9cb3185b221
2.安裝node.js
1. 由于Appium的server端是node.js編寫的所以需要先安裝node.js刨肃。安裝node.js后箩帚,也可以直接按照官方教程通過npm安裝Appium,不推薦這種方式盔然。(注:npm類似于Python的pip愈案,一個非官方包管理器)
2. 官方下載地址:點(diǎn)擊下載 鹅搪,根據(jù)自己的操作系統(tǒng)下載不同版本的node.js
3. node.js的安裝一路傻瓜式next就可以了,注意一點(diǎn)涩嚣,將路徑改下,安裝成功后會自動添加環(huán)境變量顷歌。也就是在cmd下任意目錄都可以使用npm命令幔睬。
4. 檢查是否安裝成功
cmd下輸入:npm
3.安裝Android SDK(安卓軟件開發(fā)包)
1. 安裝Android SDK(安卓軟件開發(fā)包),測試Android手機(jī)必然是要安裝Android SDK赦抖。(只看1.4.5即可)
下載地址:https://www.androiddevtools.cn/ 在sdk下下載(直接下載對應(yīng)版本队萤,解壓至任意目錄即可,注意路徑不能包含中文要尔,否則安裝 SDK Manager.exe 時(shí)不能出來工具包)
安裝后,解壓后包含以下文件:
1)自帶add-ons既绩、platforms还惠、tools、AVA Mnager.exe蚕键、SDK Manager.exe嚎幸、SDK Readme.txt
2)新增文件夾build-tools、extras骑疆、platform-tools
3)點(diǎn)擊SDK Manager.exe進(jìn)入SDK工具下載,自帶tools(自帶AndroidSDK Tools)和extras文件夾
4)手動下載:下載Android SDK Platform-tools解壓后為platform-tools放到 platform-tools 文件下? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 下載 Android SDK Build-tools解壓后為21.0.0放到build-tools 下(多下載幾個版本)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Extras文件夾下的 Google USB Driver
2. 在系統(tǒng)變量中箍铭,新建變量名:ANDROID_HOME诈火,變量值寫解壓后的文件夾路徑冷守。(不建議這么做)
變量:ANDROID_HOME
值:D:\android-sdk-windows
3. 雙擊android-sdk-windows文件夾下的 SDK Manager.exe,選裝工具拍摇。必裝:Tools 文件夾下Android SDK Platform-tools 和 Android SDK Build-tools充活,Android SDK Tools,Extras文件夾下的 Google USB Driver
選擇了以上四個安裝包之后混卵,點(diǎn)擊“Install 4 Packages...”,在License頁面蚁滋,選擇Accept License赘淮,最后點(diǎn)擊 “Install” 開始安裝拥知。
4. 在系統(tǒng)變量 Path 中添加ANDROID_HOME低剔、tools肮塞、platform-tools、build-tools目錄猜欺。保存修改拷窜。
變量Path,值:%ANDROID_HOME%;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\build-tools\28.0.0
建議如下寫法:D:\android-sdk-windows;D:\android-sdk-windows\tools;D:\android-sdk-windows\platform-tools;D:\android-sdk-windows\build-tools\28.0.0
5. 檢查環(huán)境變量是否配置成功
cmd下分別輸入:
adb
andoid
android -h
或者
monkeyrunner? ? ? ? ? ? ? ? ? ? ? ? ? ? 驗(yàn)證tools環(huán)境配置是否成功
adb? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 驗(yàn)證配置platform-tools環(huán)境變量是否成功
aapt? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 驗(yàn)證build-tools的路徑環(huán)境變量是否配置成功
4.安裝Appium-Server
使用appium-desktop來搭建Appium-Server環(huán)境赋荆;appium-desktop是連接appium服務(wù)的桌面應(yīng)用窄潭,可以方便測試人員進(jìn)行連接手機(jī),錄制腳本等工作嫉你。
點(diǎn)擊進(jìn)入下載Appium-desktop進(jìn)行下載,選擇對應(yīng)的版本進(jìn)行下載幽污,下載完成后直接進(jìn)行安裝就可以了其掂。
5.Appium-Python-Client
選擇python作為自動化測試腳本語言:
注:appium-desktop 和 模擬機(jī) 連接時(shí),可以通過錄制深寥,進(jìn)行操作模擬機(jī),然后则酝,把錄制腳本轉(zhuǎn)化為正式python腳本闰集,可以復(fù)制到pycharm編輯器中,通過appium-python-client這個驅(qū)動來自動化模擬機(jī)爽雄。腳本在pycharm中運(yùn)行挚瘟,通過appium-server來操作模擬機(jī)饲梭。
方法一:直接用命令? pip install Appium-Python-Client?
方法二(內(nèi)網(wǎng)下):
1.? 離線下載Appium-Python-Client
2. cd python-client-master
3.? python setup.py install
由于 運(yùn)行 python setup.py install 時(shí)乘盖,提示有錯誤,找不到urllib3等等憔涉,(原因?yàn)楣緝?nèi)網(wǎng)订框,不能下載依賴)!6颠丁4┌狻!9酢纵揍!
故,
1.? 離線? 下載urllib3
2. cd urllib3-master
3.? python setup.py install
4.? 檢測是否成功? ?
import urllib3
此時(shí)议街,再次運(yùn)行 pip install Appium-Python-Client? 仍有報(bào)錯提示
故匾灶,離線 下載 selenium
(2)下載后解壓
(3)進(jìn)入命令行算利,切換到安裝包路徑泊窘,輸入python setup.py install指令執(zhí)行setup.py文件安裝selenium
看到下圖中的Finished processing dependencies for selenium==3.6.0即安裝成功
當(dāng)然丁鹉,你也可以用pip show selenium指令查看selenium安裝情況
再次在python-master文件中運(yùn)行 pip install Appium-Python-Client 無報(bào)錯信息即可
命令運(yùn)行后雳灾,可以發(fā)現(xiàn)python27下的site-packages下已加載了
appium_python_client-0.46-py2.7.egg
selenium-3.141.0-py2.7.egg<from Appium-pYthon-Client>
urllib3-1.25.3-py2.7.egg<from selenium<4,>=3.14.1—>Appium-pYthon-Client>
6.安裝夜神安卓模擬器
點(diǎn)擊下載夜神模擬器,選擇磁盤進(jìn)行安裝匈庭,安裝完成后找到 nox_adb的所在位置阱持,復(fù)制文件路徑,將其添加到環(huán)境變量中,變量名為nox_adb滓窍,變量值為其文件路徑。
7.實(shí)例
(1)安卓應(yīng)用自動化測試
(1)使用adb連接
首先,對SDK中platform-tools里adb版本跺嗽,模擬器nox中bin里adb和 nox_adb的版本進(jìn)行匹配;
如果出現(xiàn)三個版本不一致,將SDK中的adb.exe復(fù)制二份畜挨,一份命名為nox_adb.exe毡咏;另一份為adb.exe血当;然后粘貼到nox中bin里,更替掉原本的哪兩個版本即可离熏。
現(xiàn)在開始,找到Android SDK的文件夾奸鸯,點(diǎn)開platform-tools娄涩,
shift + 右鍵 進(jìn)入CMD,輸入adb devices,會顯示目前處于5037端口球恤,并且進(jìn)程成功啟動的說明。(運(yùn)行前需要后臺結(jié)束adb.exe進(jìn)程)
打開夜神模擬器(一定要打開)之后找到夜神的安裝路徑,點(diǎn)開bin文件夾诵叁,shift + 右鍵? 進(jìn)入CMD碑诉,輸入nox_adb.exe connect 127.0.0.1:62001
之后在輸入? adb devices
打開夜神模擬器(一定要打開)之后找到夜神的安裝路徑恭垦,點(diǎn)開bin文件夾唠帝,shift + 右鍵? 進(jìn)入CMD,輸入nox_adb.exe devices
之后在輸入 adb devices
之后一直打開模擬器瀑晒,打開platform-tools,并進(jìn)入cmd玖详,輸入adb devices劳澄,如下圖所示就表示SDK與模擬器成功連接了
(2)打開appium-desktop連接模擬器
修改? Host: 127.0.0.1
Post 保持默認(rèn)
點(diǎn)擊開始服務(wù)
繼續(xù)點(diǎn)擊如圖所示
在desired capabilities中輸入對應(yīng)參數(shù):
切記:
1)左邊框內(nèi)輸入
2)app? filepath? ? ? F:\Appium\app-debug.apk
3)? autoAcceptAlerts? ? ? boolean? ? ? ? ? true
4)? 我加載automationName時(shí),會報(bào)錯“could not find a driver for automationName'appium' and platformName 'Android'.”
之后保存,并點(diǎn)擊start session即可(保持模擬器打開狀態(tài))
注:點(diǎn)擊 獲得appPackage和appActivity
方法二:把a(bǔ)pk放到android-sdk下build-tools妹懒,使用命令? aapt dump badging F:\Appium\app-debug.apk
之后點(diǎn)擊start session即可(保持模擬器打開狀態(tài))
連接成功后,appium上自動調(diào)整到App頁面瓦宜,如下
(2)真機(jī)自動化測試
下面演示在安卓真機(jī)上的自動登錄Keep(APP)。
獲取設(shè)備名稱假夺。操作流程:開啟手機(jī)的開發(fā)和調(diào)試模式蜻韭,連接電腦授權(quán)認(rèn)證,Window + R輸入并運(yùn)行cmd,用adb devices -l查看:
啟動Appium Server進(jìn)行調(diào)試:
從上圖可以看到娩怎,啟動App Session需要有以下幾個參數(shù)(點(diǎn)擊了解更詳細(xì)的Appium Desired Capabilities):
platformName柬讨,如Android、iOS等
deviceName畴嘶,參考前面是如何獲取的
注:點(diǎn)擊這里獲得appPackage和appActivity
綜上所述窗悯,這里對應(yīng)Keep的信息如下:
{"platformName":"Android","deviceName":"WAS_AL00","appPackage":"com.gotokeep.keep","appActivity":"com.gotokeep.keep.splash.SplashActivity"}
點(diǎn)擊Start Session莲绰,之后可以看到手機(jī)端啟動了Keep,并且在Appium Server端中同步展示:
上述的操作通常只是用來方便獲取控件id及定位的戳晌,下面基于Python編寫完整的Appium-Client以實(shí)現(xiàn)自動登錄操作:
from appium import webdriver?
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
server = 'http://localhost:4723/wd/hub'? ? ? # Appium Server, 端口默認(rèn)為4723desired_capabilities = {
? ? 'platformName': 'Android',
? ? 'deviceName': 'WAS_AL00',? ? ? ? ? # 需替換成你的deviceName
? ? 'appPackage': 'com.gotokeep.keep',
? ? 'appActivity': 'com.gotokeep.keep.splash.SplashActivity'
}
driver = webdriver.Remote(server, desired_capabilities)
wait = WebDriverWait(driver, 10)? ? ? ? ? ? # 最大查找等待超時(shí)時(shí)間:10s
def get_permission():
? ? """允許APP獲取的某些權(quán)限"""
? ? try:
? ? ? ? ask = wait.until(EC.presence_of_element_located((By.ID, 'com.android.packageinstaller:id/do_not_ask_checkbox')))
? ? ? ? ask.click()
? ? ? ? allow = wait.until(? ? ? ? ? ? EC.presence_of_element_located((By.ID, 'com.android.packageinstaller:id/permission_allow_button')))
? ? ? ? allow.click()
? ? except:
? ? ? ? pass
# 允許兩項(xiàng)授權(quán)
get_permission()
get_permission()
# 點(diǎn)擊“立即使用”
welcome = wait.until(EC.presence_of_element_located((By.ID, 'com.gotokeep.keep:id/btn_bottom_in_video_welcome')))
welcome.click()
# 切換“密碼登錄”(同樣可以使用第三方進(jìn)行授權(quán)登錄)
driver.tap([(900, 110)])
# 輸入“手機(jī)號”
phone = driver.find_element_by_accessibility_id('Phone Number In Login')phone.send_keys('13988888888')? # 替換成實(shí)際的賬號
# 輸入“密碼”
password = driver.find_element_by_accessibility_id('Password In Login')password.send_keys('123456')? ? # 替換成實(shí)際的密碼
# 點(diǎn)擊“登錄”
login = driver.find_element_by_id('com.gotokeep.keep:id/btn_action')
login.click()
最后,附上運(yùn)行效果圖:
參考資料如下:
https://www.cnblogs.com/Caiyilong/p/8559394.html
https://www.cnblogs.com/my-blogs-for-everone/p/7751596.html
https://jingyan.baidu.com/article/7f766daffb88334101e1d084.html