我們在做app自動化的時候,若要考慮相容性問題,需要跑幾臺裝置,要是一臺一臺的跑比較耗
時,因此需要考慮使用多執行緒來同時操作多臺裝置。
1.我們拿兩臺裝置來模擬操作下,使用:adb devices檢視連線狀況,獲取到裝置名稱。
2.獲取需要操作app的包名和頁面名稱(前提該裝置已經開啟了app)
3.設定初始配置資訊
from appium import webdriver import threading # 裝置一 def run_01(): desired = { "platformName": "Android", # 手機系統 "platformVersion": "7.1.2", # 手機系統版本 "deviceName": '127.0.0.1:62001', # 連線的裝置(adb devices) "automationName": "UiAutomator2", "appPackage": "", # app包名 "appActivity": "", # app的啟動頁面 "autoGrantPermissions": "true", # 預設允許app獲取相關許可權 "noReset": True # 保留登入模式 } driver_01 = webdriver.Remote(command_executor="http://127.0.0.1:4723/wd/hub", desired_capabilities=desired) # driver(driver_01) # 裝置二 def run_02(): desired = { "platformName": "Android", # 手機系統 "platformVersion": "11", # 手機系統版本 "deviceName": '90bf8faf', # 連線的裝置(adb devices) "automationName": "UiAutomator2", # 自動化測試框架 (1.4以上的appium不用寫) "appPackage": "", # app包名 "appActivity": "", # app的啟動頁面 "autoGrantPermissions": "true", # 預設允許app獲取相關許可權 "noReset": True # 保留登入模式 } driver_02 = webdriver.Remote(command_executor="http://127.0.0.1:4720/wd/hub", desired_capabilities=desired) # driver(driver_02)
不同的裝置啟動配置埠號是不一樣的,我這裡一個是4723,一個是4720.
4.開啟頁面後操作元素,這裡只簡單的關閉頁面(具體方法可參考:https://www.cnblogs.com/lihongtaoya/p/16988855.html)
def driver(drivers): # 元素操作方法 time.sleep(5) drivers.quit()
5.使用多執行緒執行多臺裝置
if __name__ == '__main__': threading.Thread(target=run_01).start() threading.Thread(target=run_02).start()
6.啟動appium服務
啟動指令:appium --allow-cors -p 埠號 -U 裝置名稱
我這邊是兩臺裝置,因此需要啟動兩個服務,啟動完之後就可以執行main函式了。
7.以上例項是將配置資訊寫在了程式碼中,若是有十幾二十幾臺裝置的話,這種寫法有點麻煩,我們可以
將配置資訊的產生封裝在json檔案中使用時用load()方法去取引數即可。
1)建立一個json檔案存放配置資訊
[{ "url": "http://127.0.0.1:4723/wd/hub", "desired": { "platformName": "Android", "platformVersion": "7.1.2", "deviceName": "127.0.0.1:62001", "automationName": "UiAutomator2", "appPackage": "", "appActivity": "", "autoGrantPermissions": "true", "noReset": true} }, { "url": "http://127.0.0.1:4720/wd/hub", "desired":{ "platformName": "Android", "platformVersion": "11", "deviceName": "90bf8faf", "automationName": "UiAutomator2", "appPackage": "", "appActivity": "", "autoGrantPermissions": "true", "noReset": true} }]
2)讀取配置資訊,這裡直接貼完整程式碼了。
def test_run(url, desired): driver_02 = webdriver.Remote(command_executor=url, desired_capabilities=desired) driver(driver_02) def driver(drivers): # 元素操作方法 time.sleep(5) drivers.quit() if __name__ == '__main__': with open("./appium.json", mode="r", encoding="utf-8") as f: data = list(json.load(f)) for i in range(0, len(data)): a = threading.Thread(target=test_run, args=(data[i]["url"], data[i]["desired"])) a.start()
文章來源:https://www.cnblogs.com/lihongtaoya/ ,請勿轉載