stf+appium app 真機自動化平臺實現
一、背景
之前搭建過一套stf的真機雲測平臺,最近在搞app自動化,想將stf與appium結合起來,搭建app真機自動化平臺
二、架構圖
【備註】:android-provider功能已實現,ios-provider功能待實現
【github地址】:https://github.com/xglh/stf-appium-github三、前期準備
1、手機上安裝Appium setting等appium工具
2、部署stf服務,將手機接入stf網路,配置stf-openapi token。注意,一定要先安裝Appium setting.apk再接入stf,不然會被stf還原
stf部署參考文件:Android部署 、IOS部署
stf openapi參考文件:stf-openapi
3、在stf-provider節點啟動appium程式,一個appium程式繫結一臺手機
#/bin/bash
nohup appium -p 4725 -U a32a6a4e --session-override > appium_a32a6a4e.log &
nohup appium -p 4726 -U b046c875 --session-override > appium_b046c875.log &
4、更改driver.config相應配置
四、基本工作流程
1、ftp上傳app到provider伺服器
2、獲取到可用的裝置號serial_no
# 裝置連線狀態
@unique
class DeviceStatusEnum(Enum):
# adb連線正常
ADB_READY = 'ADB_READY'
# appium連線正常
APPIUM_READY = 'APPIUM_READY'
# stf連線正常
STF_READY = 'STF_READY'
# stf被佔用
STF_LOCKED = 'STF_LOCKED'
定義裝置連線狀態,APPIUM_READY,STF_READY狀態的裝置才可用,優先返回STF_READY狀態的裝置
存在問題:
stf暫時無法連線android 10系統的手機,但是繫結appium程式後也可以執行自動化指令碼,故優先取STF_READY狀態的裝置,再取APPIUM_READY狀態的裝置
3、啟動driver,不指定package和activity
desired_caps = {
"platformName": self.platform,
# appium setting不需要重複安裝
"skipServerInstallation": True,
"skipDeviceInitialization": True,
"deviceName": serial_no,
}
driver = webdriver.Remote(appium_hub, desired_caps)
4、另開執行緒執行adb install命令,主程式通過appium點選繼續安裝按鈕
def _confirm_install_app(self, ssh_client: SSHClient, driver, serial_no):
'''
確認安裝apk,需要根據不同機型適配
:param ssh_client:ssh物件
:param driver: driver物件
:param serial_no: 裝置編號
:return: start_activity的opts引數,解決啟動的activity不是指定的activity場景
{
'app_wait_package': 'com.android.packageinstaller',
'app_wait_activity': '.permission.ui.GrantPermissionsActivity'
}
'''
opts = {}
# Redmi K20點選繼續安裝按鈕
if serial_no == 'ca352a47':
# 啟動後的activity與目標的不一樣,需要設定start_activity方法的app_wait_package,app_wait_activity
opts = {
'app_wait_package': 'com.lbe.security.miui',
'app_wait_activity': 'com.android.packageinstaller.permission.ui.GrantPermissionsActivity'
}
# 點選繼續安裝按鈕
WebDriverWait(driver, driver_wait_timeout, driver_wait_poll_frequency).until(
EC.element_to_be_clickable((By.ID, "android:id/button2"))
).click()
return opts
需要根據不同的機型適配確認安裝操作和啟動後的app_wait_package,app_wait_activity引數
5、啟動app
# 啟動app
driver.start_activity(package_name, activity_name, appWaitDuration=10000, **opts)
time.sleep(1)
driver.switch_to.alert.accept()
備註:此狀態為裝置佔用狀態,可以點選進去檢視實時執行效果
以上流程實現apk安裝到啟動的流程
五、具體使用
from driver.driver_manager import DriverManager
app_path = 'xxx'
package_name, activity_name = 'xxx', 'xxx'
# 初始化並上傳app
mDriverManager = DriverManager('android', app_path)
# 1、獲取任意一個可用裝置
driver_info = mDriverManager.get_driver(package_name, activity_name)
# 2、獲取指定標號的裝置
driver_info = mDriverManager.get_driver(package_name, activity_name, serial_no='ca352a47')
# 3、獲取所有可用裝置
driver_info = mDriverManager.get_driver(package_name, activity_name, acquire_all_device=True)
print(driver_info)
# 獲取driver物件
for serial_no in driver_info:
driver = driver_info[serial_no]['driver']
# 釋放裝置
mDriverManager.close()
'''
driver_info示例
{
'ca352a47': {
'device_status': 'STF_LOCKED',
'appium_hub': 'http://1.1.1.1:4727/wd/hub',
'ssh_client': < driver.ssh_manager.SSHClient object at 0x000001EAD52CA860 > ,
'release': '9',
'sdk': '28',
'manufacturer': 'Xiaomi',
'model': 'Redmi K20',
'wm_size': '1080x2340',
'driver': < appium.webdriver.webdriver.WebDriver(session = "246646ac-bf0a-49a8-8b99-7a68b40a7444") >
}
}
'''
六、當前進展&後續開發擴充計劃
當前完成度:
android接入5臺裝置,完成測試app簡單的登入退出demo
後續開發擴充計劃:
1、接入ios-provider
2、完善框架日誌和錄屏功能
3、編寫文件,準備團隊內推廣
相關文章
- TRONex智慧合約APP開發平臺(真實平臺)APP
- app 自動化 (真機)+jenkins 進行執行問題APPJenkins
- API自動化測試平臺,高效實現對API的自動化測試API
- 基於 Springboot+layui 實現介面自動化平臺Spring BootUI
- 自動化測試平臺設計與實現(一)
- 活動運營自動化平臺實踐
- 自動化測試平臺
- 小紅書 app 效能自動化測試平臺 - 湯偉奇APP
- 自動化運維平臺的實施計劃運維
- UI 自動化測試平臺UI
- 自動化測試平臺設計與實現(二、自動化測試用例物件設計實現、關鍵字物件設計與實現)物件
- [記錄] STF+Appium 自動化 WDA 埠報錯,解決方法!APP
- Android 實現開機自啟APPAndroidAPP
- Django 介面自動化測試平臺Django
- Selenium自動化實現web自動化-1Web
- 短視訊平臺搭建,實現banner自動滑動展示效果
- 設計多裝置或者跨平臺的 app 如何進行自動化?APP
- 基於信創運維平臺,實現國產化網路自動巡檢運維
- 自動化平臺開發小結(六)
- 自動化平臺開發小結(五)
- 自動化平臺開發小結(四)
- 自動化平臺開發小結(三)
- 建設 TiDB 自動化平臺:轉轉 DBA 團隊實踐TiDB
- 救救孩子吧,實在不想用自動化測試平臺了
- 物流平臺如何與電商平臺進行自動化流程管理
- 如何使用瀏覽器自動化框架Playwright開發“萬媒易發”實現多平臺自動釋出文章?瀏覽器框架
- 使用Robot機器人框架實現自動化操作機器人框架
- IT 自動化:如何去實現
- 用於工業自動化的高精度直線電機平臺
- Mac 上 iOS 真機已處理完成 APP inspector,如何能讓測試 APP 執行自動化測試呢?MaciOSAPP
- 雷神 Thor —— TiDB 自動化運維平臺TiDB運維
- Linux下搭建介面自動化測試平臺Linux
- 自動化平臺的幾個小計劃
- 自動化運維平臺的流程草圖運維
- APP是如何實現自動續費的?APP
- 如何實現 AppStore App 的自動下載APP
- Linux平臺Oracle開機自啟動設定LinuxOracle
- 請問大家,自動化測試可以實現一個指令碼測試全部平臺嗎?指令碼