windows7 + Appium + 夜游安卓模擬器 + Python
像Selenium可以操控Web瀏覽器,手機APP平臺也有類似的自動化測試工具:Appium;
全文分基礎介紹、環境搭建和案例演示三部分介紹Appium,以幫助Learner快速的上手。
基礎介紹
詳細原理介紹請點擊
Appium是一個開源的自動化測試框架,用于原生,混合和移動Web應用程序。 它使用WebDriver協議驅動iOS,Android和Windows應用程序。關于它的運作流程,用圖來介紹會更加生動形象一些:
在上圖中,左邊這部分是Appium-Client,通俗點來說,是用于間接驅動最右邊的設備執行預定的自動化測試流程,支持使用多種主流的編程語言進行編寫,這也是測試開發人員需要關注的核心部分;中間的Appium-Server是銜接左邊客戶端以及右邊APP設備端的重要橋梁,一般僅需要配置好環境及啟動運行;右邊這塊,當然就是實際執行自動化測試的終端,如IOS真機、Android真機,或者是模擬器。
工具:
? ? 1.使用Java開發時才需要下載? JDK
? ? 2. node.js
? ? 3. Android SDK
? ? 4.Appium-Server:下載appium-desktop即可
? ? 5.Appium-Python-Client? (編寫測試腳本用)
? ? 6.終端:下載夜神安卓模擬器
? ? 7.實例:(1)模擬機安卓應用自動化測試(2)真機自動化化測試
1.安裝JDK
(1) 官網下載地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html
(2) 選擇Java SE 8u201/ 8u201,點擊JDK下載
(3) 安裝下載的JDK
(4)配置系統環境變量
在“系統變量”一欄中,進行新建或編輯操作
(1)新建JAVA_HOME變量
變量名:JAVA_HOME
變量值:填寫JDK安裝目錄(我的是 D:\Program Files (x86)\Java\jdk1.8.0_181)
(2)找到Path變量進行編輯,沒有的話就新建一個
變量名:Path
變量值: ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
(原有變量值不要刪除,直接在末尾添加)
//注意前面有個英文的分號,不要漏掉,這是為了跟前面的變量值間隔開的
(3)新建CLASSPATH變量
變量名:CLASSPATH
變量值: .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
//可以直接復制這句話到變量值那一欄,注意前面有個“.”不要漏掉
點擊確定,保存設置,回到桌面“win+R”,輸入“cmd”
輸入命令:java -version
詳細內容見? http://www.lxweimin.com/p/c9cb3185b221
2.安裝node.js
1. 由于Appium的server端是node.js編寫的所以需要先安裝node.js。安裝node.js后,也可以直接按照官方教程通過npm安裝Appium,不推薦這種方式。(注:npm類似于Python的pip,一個非官方包管理器)
2. 官方下載地址:點擊下載 ,根據自己的操作系統下載不同版本的node.js
3. node.js的安裝一路傻瓜式next就可以了,注意一點,將路徑改下,安裝成功后會自動添加環境變量。也就是在cmd下任意目錄都可以使用npm命令。
4. 檢查是否安裝成功
cmd下輸入:npm
3.安裝Android SDK(安卓軟件開發包)
1. 安裝Android SDK(安卓軟件開發包),測試Android手機必然是要安裝Android SDK。(只看1.4.5即可)
下載地址:https://www.androiddevtools.cn/ 在sdk下下載(直接下載對應版本,解壓至任意目錄即可,注意路徑不能包含中文,否則安裝 SDK Manager.exe 時不能出來工具包)
安裝后,解壓后包含以下文件:
1)自帶add-ons、platforms、tools、AVA Mnager.exe、SDK Manager.exe、SDK Readme.txt
2)新增文件夾build-tools、extras、platform-tools
3)點擊SDK Manager.exe進入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. 在系統變量中,新建變量名: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
選擇了以上四個安裝包之后,點擊“Install 4 Packages...”,在License頁面,選擇Accept License,最后點擊 “Install” 開始安裝。
4. 在系統變量 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. 檢查環境變量是否配置成功
cmd下分別輸入:
adb
andoid
android -h
或者
monkeyrunner? ? ? ? ? ? ? ? ? ? ? ? ? ? 驗證tools環境配置是否成功
adb? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 驗證配置platform-tools環境變量是否成功
aapt? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 驗證build-tools的路徑環境變量是否配置成功
4.安裝Appium-Server
使用appium-desktop來搭建Appium-Server環境;appium-desktop是連接appium服務的桌面應用,可以方便測試人員進行連接手機,錄制腳本等工作。
點擊進入下載Appium-desktop進行下載,選擇對應的版本進行下載,下載完成后直接進行安裝就可以了。
5.Appium-Python-Client
選擇python作為自動化測試腳本語言:
注:appium-desktop 和 模擬機 連接時,可以通過錄制,進行操作模擬機,然后,把錄制腳本轉化為正式python腳本,可以復制到pycharm編輯器中,通過appium-python-client這個驅動來自動化模擬機。腳本在pycharm中運行,通過appium-server來操作模擬機。
方法一:直接用命令? pip install Appium-Python-Client?
方法二(內網下):
1.? 離線下載Appium-Python-Client
2. cd python-client-master
3.? python setup.py install
由于 運行 python setup.py install 時,提示有錯誤,找不到urllib3等等,(原因為公司內網,不能下載依賴)!!!!!!
故,
1.? 離線? 下載urllib3
2. cd urllib3-master
3.? python setup.py install
4.? 檢測是否成功? ?
import urllib3
此時,再次運行 pip install Appium-Python-Client? 仍有報錯提示
故,離線 下載 selenium
(2)下載后解壓
(3)進入命令行,切換到安裝包路徑,輸入python setup.py install指令執行setup.py文件安裝selenium
看到下圖中的Finished processing dependencies for selenium==3.6.0即安裝成功
當然,你也可以用pip show selenium指令查看selenium安裝情況
再次在python-master文件中運行 pip install Appium-Python-Client 無報錯信息即可
命令運行后,可以發現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.安裝夜神安卓模擬器
點擊下載夜神模擬器,選擇磁盤進行安裝,安裝完成后找到 nox_adb的所在位置,復制文件路徑,將其添加到環境變量中,變量名為nox_adb,變量值為其文件路徑。
7.實例
(1)安卓應用自動化測試
(1)使用adb連接
首先,對SDK中platform-tools里adb版本,模擬器nox中bin里adb和 nox_adb的版本進行匹配;
如果出現三個版本不一致,將SDK中的adb.exe復制二份,一份命名為nox_adb.exe;另一份為adb.exe;然后粘貼到nox中bin里,更替掉原本的哪兩個版本即可。
現在開始,找到Android SDK的文件夾,點開platform-tools,
shift + 右鍵 進入CMD,輸入adb devices,會顯示目前處于5037端口,并且進程成功啟動的說明。(運行前需要后臺結束adb.exe進程)
打開夜神模擬器(一定要打開)之后找到夜神的安裝路徑,點開bin文件夾,shift + 右鍵? 進入CMD,輸入nox_adb.exe connect 127.0.0.1:62001
之后在輸入? adb devices
打開夜神模擬器(一定要打開)之后找到夜神的安裝路徑,點開bin文件夾,shift + 右鍵? 進入CMD,輸入nox_adb.exe devices
之后在輸入 adb devices
之后一直打開模擬器,打開platform-tools,并進入cmd,輸入adb devices,如下圖所示就表示SDK與模擬器成功連接了
(2)打開appium-desktop連接模擬器
修改? Host: 127.0.0.1
Post 保持默認
點擊開始服務
繼續點擊如圖所示
在desired capabilities中輸入對應參數:
切記:
1)左邊框內輸入
2)app? filepath? ? ? F:\Appium\app-debug.apk
3)? autoAcceptAlerts? ? ? boolean? ? ? ? ? true
4)? 我加載automationName時,會報錯“could not find a driver for automationName'appium' and platformName 'Android'.”
之后保存,并點擊start session即可(保持模擬器打開狀態)
注:點擊 獲得appPackage和appActivity
方法二:把apk放到android-sdk下build-tools,使用命令? aapt dump badging F:\Appium\app-debug.apk
之后點擊start session即可(保持模擬器打開狀態)
連接成功后,appium上自動調整到App頁面,如下
(2)真機自動化測試
下面演示在安卓真機上的自動登錄Keep(APP)。
獲取設備名稱。操作流程:開啟手機的開發和調試模式,連接電腦授權認證,Window + R輸入并運行cmd,用adb devices -l查看:
啟動Appium Server進行調試:
從上圖可以看到,啟動App Session需要有以下幾個參數(點擊了解更詳細的Appium Desired Capabilities):
platformName,如Android、iOS等
deviceName,參考前面是如何獲取的
注:點擊這里獲得appPackage和appActivity
綜上所述,這里對應Keep的信息如下:
{"platformName":"Android","deviceName":"WAS_AL00","appPackage":"com.gotokeep.keep","appActivity":"com.gotokeep.keep.splash.SplashActivity"}
點擊Start Session,之后可以看到手機端啟動了Keep,并且在Appium Server端中同步展示:
上述的操作通常只是用來方便獲取控件id及定位的,下面基于Python編寫完整的Appium-Client以實現自動登錄操作:
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, 端口默認為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)? ? ? ? ? ? # 最大查找等待超時時間:10s
def get_permission():
? ? """允許APP獲取的某些權限"""
? ? 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
# 允許兩項授權
get_permission()
get_permission()
# 點擊“立即使用”
welcome = wait.until(EC.presence_of_element_located((By.ID, 'com.gotokeep.keep:id/btn_bottom_in_video_welcome')))
welcome.click()
# 切換“密碼登錄”(同樣可以使用第三方進行授權登錄)
driver.tap([(900, 110)])
# 輸入“手機號”
phone = driver.find_element_by_accessibility_id('Phone Number In Login')phone.send_keys('13988888888')? # 替換成實際的賬號
# 輸入“密碼”
password = driver.find_element_by_accessibility_id('Password In Login')password.send_keys('123456')? ? # 替換成實際的密碼
# 點擊“登錄”
login = driver.find_element_by_id('com.gotokeep.keep:id/btn_action')
login.click()
最后,附上運行效果圖:
參考資料如下:
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