Python與Appium實現自動化測試
尊重原創版權: https://www.gewuweb.com/hot/12903.html
Python與Appium實現自動化測試
uQDIgQcZ4qBt2GcZMS_LrCeB/?source=tuwen_detail)
目錄
- 1.什麼是Appium
- 2.啟動一個app自動化程式的步驟
- 3.appium服務介紹
- 4. appium客戶端使用
- 5.adb的使用
- 6.Appium啟動過程分析
1.什麼是Appium
appium是一個開源的測試自動化框架,可以與原生的、混合的和移動的web應用程式一直使用。它使用WebDriver協議驅動IOS(內建的測試引擎xcuitest)、Android(uiautomator2,Espresso)和Windows應用程式
原生應用程式:安卓程式是用JAVA或kotlin開發出來的,這種程式是原生應用程式,原生應用比較流暢,好呼叫,缺點是不同的端需要的開發語言不同
web應用程式:就web應用程式可以直接放到手機端來執行,web是用html+css+js編寫的
混合應用程式:結合原生與web應用程式,有些頁面用原生的,有些頁面使用web應用程式
國內比較出名的框架:
- appium
- airtest 現在是由阿里在維護,最開始是運用在遊戲測試,和appium的功能差不多
- uiautomator2(用法簡單,非常python,只支援原生的,不支援其他)
設計哲學:
- 你沒有必要為了自動化而重新編譯你的應用或者經任何方式修改它(Android/IOS系統自帶框架)
- 你不應該被限制在特定的語言或框架上來編寫執行測試(API呼叫,介面)
- 移動端自動化框架在自動化介面方面不應該重造輪子(WebDriver,appium是在selenium的基礎上開發的)
- 移動端自動化框架應該開源,不但是在名義上而且在精神和實踐上都要實至名歸
2.啟動一個app自動化程式的步驟
開啟模擬器,或者連線上手機(注意開發者模式以及USB除錯模式已經開啟,手機授權要確認,否則是連線不上的)
在命令視窗輸入adb devices(檢視裝置名稱)
開啟appium服務appium客戶端程式碼連線服務
3.appium服務介紹
中文設定
除了簡單設定,還有一些高階設定,我們可以看一下
儲存了可以檢視預設,方便以後使用
編輯配置是進入修改環境變數
主機和埠號不需要設定,直接可以開啟伺服器
開啟後,可以看到伺服器執行中,右邊三個按鈕的功能分別是啟動檢查器會話,獲取原始日誌,停止執行伺服器
點選後自動經記事本開啟,如果安裝了其他編輯軟體,可以選擇開啟方式
服務開啟後,就可以使用python來進行客戶端來連線服務
4. appium客戶端使用
使用前確定已經安裝了,pip install appium-python-client,安裝後,直接匯入使用
看一下Remote的原始碼
同時appium服務端也會顯示500的錯誤
猶豫appium1.20.2版本的,不像之前的版本需要傳入的必須引數多了,現在只需要傳platformName即可,所以具體可以看自己安裝的是什麼版本,不過加上更多引數也不受影響
常用的caps引數:
- platformName 平臺名稱(Android,IOS)
- 必選deviceName 裝置名稱(可選)
- udid (和deviceName作用一樣,在不同版本下這個引數重好用,所以以後用udid代替deviceName)
- app apk的存放路徑(可選)
- appActivity(頁面名稱,相當於web頁面中title) 和 appPackage(包名)
- platformVersion 系統版本號(可選,版本不匹配會報錯)
- noReset 選擇True 不重啟(意思是app的引導頁面,快取資料等不清空,如果選擇False,app相當於重新安裝了,把之前的資料都清空了)
- automationName 驅動名稱
- browserName 直接測web用Chrome
- autoWebview 開機進入webview模式(開機直接進入網頁模式,不需要進入原生頁面)
- chromedriverExecutable 網頁瀏覽器驅動所放路徑(必須是完整路徑)
- chromedriverExecutableDir 網頁瀏覽器驅動所放目錄
- unicodekeyboard 開啟unicode編碼形式的鍵盤
- resetKeyboard 重啟鍵盤 (和上一個一塊配置,兩個都設定成True,就可以開啟中文輸入,相當於我們的電腦安裝輸入法)
- autoGrantPermissions 開啟手機許可權(相當於web端中彈出來的alert彈框,無法定位元素,設定了True,就方便定位元素)
官網上還有很多用法,感興趣的可以參考一下:
通過adb獲取appPackage和appActivity:
方法一:adb shell am monitor 監控操作(在cmd中執行此命令後,然後在手機上或模擬器上操作對應的app,就會顯示對應的包名)
方法二:adb logcat | findStr -i displayed 從日誌進行查詢包名和頁名稱
通過aapt獲取appPackage和appActivity:
aapt dump badging 全路徑.apk
拿到appPackage和appActivity後,可以使用包名的方式來訪問app,程式碼如下:
from appium.webdriver import Remote
# 啟動一次請求
# 1.指明需要連線的服務地址和埠號
# 2.You must include a platformName capability
caps = {"platformName": "Android",
"udid": "emulator-5554",
"appPackage": "com.lemon.lemonban",
"appActivity": ".activity.WelcomeActivity"}
driver = Remote(command_executor='http://127.0.0.1:4723/wd/hub',
desired_capabilities=caps)
執行結果:
總結:
- platformName 必填,其他可選
- deviceName重要
- app安裝apk包,自動開啟(已經安裝過的不會重新安裝),apk包路徑最好不要有中文,不知道為什麼我的電腦用這種方式執行一直報錯,最後也未能解決,所以我使用包名執行
- 在複製appActivity時,注意一定是app的首頁頁面名稱,別複製錯了
5.adb的使用
adb(Android Debug Bridge)安卓除錯橋:作用就是操作安卓手機中的app
相關命令:
adb devices 檢視裝置是否連線(可以手動連線 adb connect 127.0.0.1:5554,網上可以搜尋不同模擬器的埠號)
adb shell 登入裝置 (進入手機系統裡面)
adb shell dumpsys activity | find "mFocusedActivity"
檢視前臺應用activity應用名稱(注意一定要打開了app,再去執行命令,dumpsys下有很多命令,可以檢視幫助文件進行更多瞭解)
adb install 電腦/包名.apk 安裝軟體
adb uninstall 電腦/包名.apk 制裁軟體
adb pull 手機檔案路徑 電腦檔案路徑 從手機下載/拉檔案電腦端
adb push 電腦檔案路徑 手機檔案路徑 從電腦推送/上傳到手機端
adb shell pm list packages 顯示所有的安裝包名
6.Appium啟動過程分析
客戶端通過wd/hub/session傳送請求建立一個會話session
提供了引數就是cpas
服務端接收到caps資訊後,檢驗caps引數是否合法
adb install io.setting.appium
判斷有沒有包名
啟動app
獲取作業系統的版本:
adb.exe -P 5037 -s emulator-5554 shell getprop ro.build.version.release
判斷包名是否已經安裝到手機上:
adb.exe -P 5037 -s emulator-5554 shell dumpsys package com.lemon.lemon
啟用app:
adb.exe -P 5037 -s emulator-5554 shell am start -W -n
com.lemon.lemonban/.activity.WelcomeActivity -S
到此這篇關於python+appium實現自動化測試的示例程式碼的文章就介紹到這了
on+appium實現自動化測試的示例程式碼的文章就介紹到這了
更多內容參考: https://www.gewuweb.com/sitemap.html
尊重原創版權: https://www.gewuweb.com/hot/7563.html
Python與Appium實現自動化測試
uQDIgQcZ4qBt2GcZMS_LrCeB/?source=tuwen_detail)
目錄
- 1.什麼是Appium
- 2.啟動一個app自動化程式的步驟
- 3.appium服務介紹
- 4. appium客戶端使用
- 5.adb的使用
- 6.Appium啟動過程分析
1.什麼是Appium
appium是一個開源的測試自動化框架,可以與原生的、混合的和移動的web應用程式一直使用。它使用WebDriver協議驅動IOS(內建的測試引擎xcuitest)、Android(uiautomator2,Espresso)和Windows應用程式
原生應用程式:安卓程式是用JAVA或kotlin開發出來的,這種程式是原生應用程式,原生應用比較流暢,好呼叫,缺點是不同的端需要的開發語言不同
web應用程式:就web應用程式可以直接放到手機端來執行,web是用html+css+js編寫的
混合應用程式:結合原生與web應用程式,有些頁面用原生的,有些頁面使用web應用程式
國內比較出名的框架:
- appium
- airtest 現在是由阿里在維護,最開始是運用在遊戲測試,和appium的功能差不多
- uiautomator2(用法簡單,非常python,只支援原生的,不支援其他)
設計哲學:
- 你沒有必要為了自動化而重新編譯你的應用或者經任何方式修改它(Android/IOS系統自帶框架)
- 你不應該被限制在特定的語言或框架上來編寫執行測試(API呼叫,介面)
- 移動端自動化框架在自動化介面方面不應該重造輪子(WebDriver,appium是在selenium的基礎上開發的)
- 移動端自動化框架應該開源,不但是在名義上而且在精神和實踐上都要實至名歸
2.啟動一個app自動化程式的步驟
開啟模擬器,或者連線上手機(注意開發者模式以及USB除錯模式已經開啟,手機授權要確認,否則是連線不上的)
在命令視窗輸入adb devices(檢視裝置名稱)
開啟appium服務appium客戶端程式碼連線服務
3.appium服務介紹
中文設定
除了簡單設定,還有一些高階設定,我們可以看一下
儲存了可以檢視預設,方便以後使用
編輯配置是進入修改環境變數
主機和埠號不需要設定,直接可以開啟伺服器
開啟後,可以看到伺服器執行中,右邊三個按鈕的功能分別是啟動檢查器會話,獲取原始日誌,停止執行伺服器
點選後自動經記事本開啟,如果安裝了其他編輯軟體,可以選擇開啟方式
服務開啟後,就可以使用python來進行客戶端來連線服務
4. appium客戶端使用
使用前確定已經安裝了,pip install appium-python-client,安裝後,直接匯入使用
看一下Remote的原始碼
同時appium服務端也會顯示500的錯誤
猶豫appium1.20.2版本的,不像之前的版本需要傳入的必須引數多了,現在只需要傳platformName即可,所以具體可以看自己安裝的是什麼版本,不過加上更多引數也不受影響
常用的caps引數:
- platformName 平臺名稱(Android,IOS)
- 必選deviceName 裝置名稱(可選)
- udid (和deviceName作用一樣,在不同版本下這個引數重好用,所以以後用udid代替deviceName)
- app apk的存放路徑(可選)
- appActivity(頁面名稱,相當於web頁面中title) 和 appPackage(包名)
- platformVersion 系統版本號(可選,版本不匹配會報錯)
- noReset 選擇True 不重啟(意思是app的引導頁面,快取資料等不清空,如果選擇False,app相當於重新安裝了,把之前的資料都清空了)
- automationName 驅動名稱
- browserName 直接測web用Chrome
- autoWebview 開機進入webview模式(開機直接進入網頁模式,不需要進入原生頁面)
- chromedriverExecutable 網頁瀏覽器驅動所放路徑(必須是完整路徑)
- chromedriverExecutableDir 網頁瀏覽器驅動所放目錄
- unicodekeyboard 開啟unicode編碼形式的鍵盤
- resetKeyboard 重啟鍵盤 (和上一個一塊配置,兩個都設定成True,就可以開啟中文輸入,相當於我們的電腦安裝輸入法)
- autoGrantPermissions 開啟手機許可權(相當於web端中彈出來的alert彈框,無法定位元素,設定了True,就方便定位元素)
官網上還有很多用法,感興趣的可以參考一下:
通過adb獲取appPackage和appActivity:
方法一:adb shell am monitor 監控操作(在cmd中執行此命令後,然後在手機上或模擬器上操作對應的app,就會顯示對應的包名)
方法二:adb logcat | findStr -i displayed 從日誌進行查詢包名和頁名稱
通過aapt獲取appPackage和appActivity:
aapt dump badging 全路徑.apk
拿到appPackage和appActivity後,可以使用包名的方式來訪問app,程式碼如下:
from appium.webdriver import Remote
# 啟動一次請求
# 1.指明需要連線的服務地址和埠號
# 2.You must include a platformName capability
caps = {"platformName": "Android",
"udid": "emulator-5554",
"appPackage": "com.lemon.lemonban",
"appActivity": ".activity.WelcomeActivity"}
driver = Remote(command_executor='http://127.0.0.1:4723/wd/hub',
desired_capabilities=caps)
執行結果:
總結:
- platformName 必填,其他可選
- deviceName重要
- app安裝apk包,自動開啟(已經安裝過的不會重新安裝),apk包路徑最好不要有中文,不知道為什麼我的電腦用這種方式執行一直報錯,最後也未能解決,所以我使用包名執行
- 在複製appActivity時,注意一定是app的首頁頁面名稱,別複製錯了
5.adb的使用
adb(Android Debug Bridge)安卓除錯橋:作用就是操作安卓手機中的app
相關命令:
adb devices 檢視裝置是否連線(可以手動連線 adb connect 127.0.0.1:5554,網上可以搜尋不同模擬器的埠號)
adb shell 登入裝置 (進入手機系統裡面)
adb shell dumpsys activity | find "mFocusedActivity"
檢視前臺應用activity應用名稱(注意一定要打開了app,再去執行命令,dumpsys下有很多命令,可以檢視幫助文件進行更多瞭解)
adb install 電腦/包名.apk 安裝軟體
adb uninstall 電腦/包名.apk 制裁軟體
adb pull 手機檔案路徑 電腦檔案路徑 從手機下載/拉檔案電腦端
adb push 電腦檔案路徑 手機檔案路徑 從電腦推送/上傳到手機端
adb shell pm list packages 顯示所有的安裝包名
6.Appium啟動過程分析
客戶端通過wd/hub/session傳送請求建立一個會話session
提供了引數就是cpas
服務端接收到caps資訊後,檢驗caps引數是否合法
adb install io.setting.appium
判斷有沒有包名
啟動app
獲取作業系統的版本:
adb.exe -P 5037 -s emulator-5554 shell getprop ro.build.version.release
判斷包名是否已經安裝到手機上:
adb.exe -P 5037 -s emulator-5554 shell dumpsys package com.lemon.lemon
啟用app:
adb.exe -P 5037 -s emulator-5554 shell am start -W -n
com.lemon.lemonban/.activity.WelcomeActivity -S
到此這篇關於python+appium實現自動化測試的示例程式碼的文章就介紹到這了
on+appium實現自動化測試的示例程式碼的文章就介紹到這了