appium如何連線多臺裝置

餘生沒有餘生發表於2023-01-18

我們在做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/ ,請勿轉載

相關文章