appium怎样连接多台设备

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快

我们在做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()

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

相关推荐
YHHLAI1 天前
LeetCode 1.两数之和 | 从暴力枚举到线性优化
算法·leetcode·职场和发展
满怀冰雪1 天前
01_LangChain是什么_带你理解LLM应用框架
python·langchain
酉鬼女又兒1 天前
零基础入门计算机网络网际层核心:IP数据报发送与转发完整流程、静态路由配置方法、路由环路成因与解决方案及历年考研经典例题深度解析
网络·tcp/ip·计算机网络·考研·职场和发展
稷下元歌1 天前
python核心基础,这关于基于Moveltg加 Ros2实战Python编程基础实课
开发语言·python
财经资讯数据_灵砚智能1 天前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年6月10日
大数据·人工智能·python·ai·信息可视化·自然语言处理·灵砚智能
Wonderful U1 天前
Python+Django实战|企业客户关系管理系统(CRM):客户档案、跟进记录、商机管理、合同签约、回款追踪、客户分层、数据分析
python·数据分析·django
Wonderful U1 天前
Python+Django实战|企业办公用品申领管理系统:物资入库、库存预警、申领审批、归还登记、损耗统计、供应商对账
android·python·django
码云骑士1 天前
18-生成器不只是省内存(上)-yield的状态机模型与帧暂停
c语言·开发语言·python
长空任鸟飞_阿康1 天前
RAG 文档摄入全链路,从原理到生产落地
vue.js·人工智能·python
程序猿零零漆1 天前
Python核心进阶三连:闭包装饰器、深浅拷贝、网络编程从原理到实战
网络·python