我们在做app自动化的时候,若要考虑兼容性问题,需要跑几台设备,要是一台一台的跑比较耗
时,因此需要考虑使用多线程来同时操作多台设备。

1.我们拿两台设备来模拟操作下,使用:adb devices查看连接状况,获取到设备名称。

多台Android 設備操作一個表避免死鎖 操作多台手机_Android

 2.获取需要操作app的包名和页面名称(前提该设备已经打开了app)

多台Android 設備操作一個表避免死鎖 操作多台手机_配置信息_02

 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.打开页面后操作元素,这里只简单的关闭页面(具体方法可参考:)

def driver(drivers): # 元素操作方法

time.sleep(5)

drivers.quit()

5.使用多线程运行多台设备

def driver(drivers): # 元素操作方法

time.sleep(5)

drivers.quit()

6.启动appium服务

启动指令:appium --allow-cors -p 端口号 -U 设备名称

多台Android 設備操作一個表避免死鎖 操作多台手机_appium_03

 我这边是两台设备,因此需要启动两个服务,启动完之后就可以运行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()