Appium 并行测试多个设备的方法

一、前置说明

自动化测试中,经常需要验证多台设备的兼容性,Appium可以用同一套测试运例并行测试多个设备,以达到验证兼容性的目的。

解决思路:

1. 查找已连接的所有设备;

2. 为每台设备启动相应的Appium Server

3. 使用多线程执行 pytest 命令;

二、核心代码

 # test_multi_devices.pyimport pytestfrom driver.appium.manager import port_manager@pytest.fixture(scope="session")def devicename(request):return request.config.getoption("--devicename")@pytest.fixturedef driver(devicename):from driver.appium.driver import WebDriverserver_port = port_manager.get_server_port(devicename)trans_port = port_manager.get_trans_port(devicename)# appium 多设备并行注意事项:# 1. server_port: 必须传值,它是 appium server 的监听端口号,在启动多个 appium server的情况下,用于指定当前driver与哪个 server 进行通信;# 2. uuid: 必须传值,它是每个设备的唯一标识,用于appium server区分与哪台设备在通信,确保测试执行不会混淆;# 3. systemPort: 必须传值,是UiAutomator2 Server的6790端口绑定至本地的端口号,该端口用于在本地监听并接收从 UiAutomator2 Server 发出的请求;appium_server_url = f'http://localhost:{server_port}'capabilities = {"platformName": "Android","automationName": "uiautomator2","deviceName": devicename,"udid": devicename,"app": "D:\\resources\\ApiDemos-debug.apk","systemPort": trans_port}driver = WebDriver(command_executor=appium_server_url, capabilities=capabilities)yield driverdriver.quit()def test_runner(driver):driver.smart_find_element(by='text', value='App').click()driver.smart_find_element(by='text', value='Notification').click()driver.smart_find_element(by='text', value='NotifyWithText').click()driver.smart_find_element(by='text', value='SHOW SHORT NOTIFICATION').click()element = driver.get_toast('Short notification')assert element.text == 'Short notification'
# main.pyimport threadingimport pytestfrom driver.appium.manager import MobileDevicesManager, AppiumServersManager, device_managerfrom driver.appium.manager import port_managerPY_RUNNER = 'tests/test_multi_devices.py'def start_server_and_run_pytest(devicename):"""启动Appium Server,并且执行pytest"""port = port_manager.get_server_port(devicename)# 为每台设备启动一个appium serverserver_manager = AppiumServersManager(port)server_manager.start_server()# 执行pytestpytest.main([PY_RUNNER, '-s', '-v', '--devicename', devicename])def run_multi_devices():"""多设备并行测试"""devices = device_manager.get_connected_devices()threads = []for devicename in devices:thread = threading.Thread(target=start_server_and_run_pytest, args=(devicename,))threads.append(thread)# 启动线程thread.start()# 等待所有线程完成for thread in threads:thread.join()if __name__ == '__main__':import logging.configlogging.config.fileConfig('conf/logging.conf')# 执行并发测试run_multi_devices()

三、Demo验证

当前有3台设备连接,执行代码,会启动3个appium server:

3台设备会同时执行测试(有1台为手机,不方便截图):

 四、appium 多设备并行注意事项

  # 1. server_port: 必须传值,它是 appium server 的监听端口号,在启动多个 appium server的情况下,用于指定当前driver与哪个 server 进行通信;# 2. uuid: 必须传值,它是每个设备的唯一标识,用于appium server区分与哪台设备在通信,确保测试执行不会混淆;# 3. systemPort: 必须传值,是UiAutomator2 Server的6790端口绑定至本地的端口号,该端口用于在本地监听并接收从 UiAutomator2 Server 发出的请求;appium_server_url = f'http://localhost:{server_port}'capabilities = {"platformName": "Android","automationName": "uiautomator2","deviceName": devicename,"udid": devicename,"app": "D:\\resources\\ApiDemos-debug.apk","systemPort": trans_port}driver = WebDriver(command_executor=appium_server_url, capabilities=capabilities)
​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/651210.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7天入门Android开发之第1天——初识Android

一、Android系统 1.Linux内核层: 这是安卓系统的底层,它提供了基本的系统功能,如内存管理、进程管理、驱动程序模型等。安卓系统构建在Linux内核之上,借助于Linux的稳定性和安全性。 2.系统运行库层: 这一层包括了安卓…

2.7设计模式——Proxy 代理模式(结构型)

意图 为其它对象提供一种代理以控制这个对象的访问。 结构 Proxy保存一个引用使得代理可以访问实体;提供一个与Subject的接口相同的接口,使代理可以用来替代实体;控制实体的存取,并可能负责创建和删除它;其他功能依赖…

2024年世界排名TOP250医院榜单发布|医学访学/博后/联培博士参考

作为医学类的访问学者、博士后及联合培养博士们,都希望到世界知名医院进行临床研修交流及科研学习。2024年世界最佳医院排行榜的发布为申请者提供了可选目标,现知识人网小编整理刊出。 近日,美国《新闻周刊》(Newsweek&#xff09…

IDEA生成测试类

方法一 具体流程: 选中要生成的测试类------------>选择code选项------------>选择Generate选项---------->选择test选项---------->选择要生成的方法 第一步: 光标选中需要生成测试类的类 找到code选项 选中Generate选项 选中test选项 选中你要生成的测试…

Web前端一套全部清晰 ③ day2 HTML 标签综合案例

别让平淡生活&#xff0c;耗尽所有向往 —— 24.4.26 综合案例 —— 一切都会好的 网页制作思路&#xff1a;从上到下&#xff0c;先整体到局部&#xff0c;逐步分析制作 分析内容 ——> 写代码 ——>保存——>刷新浏览器&#xff0c;看效果 <!DOCTYPE html> &l…

PyQt6 优化操作:建立侧边栏,要求可拖拽改变宽度,可用按钮控制侧边栏的展开和收起

1. 官方文档 QSplitter — PyQt Documentation v6.6.0 2. 效果展示 可拖拽改变宽度比例 点击按钮快速收起或展开侧边栏 点击按钮&#xff0c;侧边栏收起&#xff0c;同时按钮图标变为向左箭头 (对应展开功能)&#xff0c;再次点击按钮&#xff0c;侧边栏展开&#xff0c;同…

python批量删除文件

python批量删除文件 1、查询与删除2、添加模块到地址中3、批量删除多个路径中不需要导出的文件 1、查询与删除 mport osdef get_files_in_folder(folder_path):files []for file in os.listdir(folder_path):if os.path.isfile(os.path.join(folder_path, file)):files.appen…

【调研分析】机器视觉及其系统

机器视觉 定义 机器视觉主要利用计算机模拟人的视觉功能&#xff0c;但不仅限于人眼的简单延伸&#xff0c;而是具备人脑的部分功能&#xff0c;即从客观事物的图像中提取信息、进行处理并加以理解&#xff0c;从而应用于实际的检测识别、测量和控制过程。 机器视觉系统组成 …

[NSSCTF]prize_p5

前言 之前就学过反序列化的字符串逃逸 但是没怎么做题 补一下窟窿 题目 <?phperror_reporting(0);class catalogue{public $class;public $data;public function __construct(){$this->class "error";$this->data "hacker";}public functi…

全国省级金融发展水平数据集(2000-2022年)

01、数据简介 金融发展水平是一个国家或地区经济实力和国际竞争力的重要体现。它反映了金融体系的成熟程度和发展水平&#xff0c;是衡量一个国家或地区经济发展质量的重要指标。金融发展水平的提高&#xff0c;意味着金融体系能够更好地服务实体经济&#xff0c;推动经济增长…

计算机组成原理实验(一)--可控加减法电路设计实验

一、一位全加器的设计 视频学习链接&#xff1a;3-2-4 定点数的加法和减法运算 — 一位全加器的硬件逻辑实现_哔哩哔哩_bilibili 仿真电路图&#xff1a; 总结&#xff1a;奇数个1时Si输出为1&#xff0c;偶数个1输出为0&#xff1b;1的个数大于等于2时&#xff0c;Ci输出1 实…

探索设计模式的魅力:AI赋能分层模式,解构未来,智领风潮

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 探索设计模式的魅力&#xff1a;AI赋能分层模式&#xff0c;解构未来&#xff0c;智领风潮 ✨欢迎…