news 2026/6/20 4:16:41

appium如何连接多台设备

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
appium如何连接多台设备

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

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

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)

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()

最后作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些软件测试的学习资料和我花了3个月整理的软件测试自学全栈,这些资料希望能给你前进的路上带来帮助。

视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/20 13:46:12

Qwen3-VL-8B大模型微调指南:定制你的专属视觉模型

Qwen3-VL-8B大模型微调指南:定制你的专属视觉模型 在智能客服上传一张商品图并提问“这是正品吗?”的瞬间,系统能否自动识别LOGO细节、比对工艺特征,并给出有理有据的回答?这曾是多模态AI落地的一大挑战。如今&#x…

作者头像 李华
网站建设 2026/6/20 9:32:00

国家自然科学基金申请书:从0到1的实战指南

构思和撰写国自然课题申请书,是一个将创新想法转化为严谨研究方案的系统性工程。其核心是“讲一个引人入胜的科研故事”——让评审专家确信你的研究非做不可,且只有你能做好。一份成功的国自然申请书精准的科学问题扎实的研究基础清晰的逻辑表达。结构化…

作者头像 李华
网站建设 2026/6/17 15:55:04

8、DB2 数据库对象操作指南(上)

DB2 数据库对象操作指南(上) 在数据库管理中,了解和操作各种数据库对象是非常重要的。下面将详细介绍 DB2 数据库中的一些常见对象,包括模式、公共同义词、表等。 1. 模式(Schemas) 模式是数据库对象集合的命名空间,主要用于以下两个方面: - 表明对象的所有权或与应…

作者头像 李华
网站建设 2026/6/18 8:14:14

测试中如何构建模拟器--以单元测试、浏览器模拟为例

本文为Algolia公司软件工程师的实践分享,Algolia公司总部位于旧金山,打造“搜索即服务”平台,为商家提供站内搜索引擎定制。 以下为作者观点: 不久前,我(作者)看到社区里有个说:你…

作者头像 李华
网站建设 2026/6/18 15:41:48

别废话了!AI绘画科技风提示词万能模板(直接抄作业)

😅 前言:提示词工程真的有用吗?(后面有直接的总结模版)说实话,作为一个折腾了半年AI绘画的开发者,我得承认:提示词工程80%是玄学,20%是运气。那些动辄几千字的教程,看完你还是不会写…

作者头像 李华
网站建设 2026/6/19 1:51:18

东阳全屋定制,我的实践亲测分享

东阳全屋定制实践亲测分享行业痛点分析全屋定制领域在近年来得到了快速发展,但技术挑战依然存在。当前,全屋定制面临的主要技术挑战包括设计复杂性、生产效率低下、材料选择有限以及安装精度问题。数据表明,超过60%的全屋定制企业在设计阶段会…

作者头像 李华