当前位置: 首页 > news >正文

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

同时,在这我准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看,或者直接关注VX公众号:互联网杂货铺,免费领取

软件测试视频教程观看处:

字节大佬教你逼自己如何在15天内掌握自动化测试(接口自动化/APP自动化/Web自动化/性能测试),内含项目实战

技术上的一点帮助

PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近500个G。如需要软件测试学习资料,关注公众号(互联网杂货铺),后台回复1,整理不易,给个关注点个赞吧,谢谢各位大佬!

☑ 240集-零基础到精通全套视频课程
☑ [课件+源码]-完整配套的教程
☑ 18套-测试实战项目源码
☑ 37套-测试工具软件包
☑ 268道-真实面试题
☑ 200个模板-面试简历模板、测试方案模板、软件测试报告模板、测试分析模版、测试计划模板、性能测试报告、性能测试报告、性能测试脚本用例模板(信息完整)

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

相关文章:

appium如何连接多台设备

我们在做app自动化的时候,若要考虑兼容性问题,需要跑几台设备,要是一台一台的跑比较耗时,因此需要考虑使用多线程来同时操作多台设备。 1.我们拿两台设备来模拟操作下,使用:adb devices查看连接状况&#…...

VUE el-form组件不绑定model时进行校验

在el-form中如果要使用:rules规则校验时,需要在el-form标签绑定 :model 如何不绑定model而进行校验字段: 思路: 1.假设规则为非空判断 2.获取该字段,进行非空判断,记录该字段是否校验完成,添加到校验标识中 3.表单或数据提交时,判断校验标识 required 红星星 :error 提示项 …...

计算机视觉的监督学习与无监督学习

什么是监督学习? 监督学习是一种机器学习算法,它从一组已标记的 合成数据生成器中生成的训练数据中学习。这意味着数据科学家已经用正确的标签(例如,“猫”或“狗”)标记了训练集中的每个数据点,以便算法可…...

Linux-lvds接口

lvds接口 单6 单8 双6 双8...

Android 自定义View一

1.继承已有VIew,改写尺寸:重写onMeasure SquareImageView 2.完全自定义重写onMeasure 3.自定义Layout 重写onMeasure onLayout 1.继承已有VIew,改写尺寸:重写onMeasure 流程: 重写onMeasure 用getmeasureedWidth …...

11、电路综合-集总参数电路结构的S参数模型计算与Matlab

11、电路综合-集总参数电路结构的S参数模型 电路综合专栏的大纲如下: 网络综合和简化实频理论学习概述 前面介绍了许多微带线电路综合的实际案例,如: 3、电路综合原理与实践—单双端口理想微带线(伪)手算S参数与时域…...

计算机网络--真题

因特网上专门用于传输文件的协议是 因特网上专门用于传输文件的协议通常是 FTP(File Transfer Protocol)。FTP 是一种标准的网络协议,用于在计算机之间传输文件。它允许用户在客户端和服务器之间传输文件,上传文件到服务器或从服务…...

java毕业设计基于ssm的招聘求职网站

项目介绍 本前途招聘求职网站是针对目前仓库的实际需求,从实际工作出发,对过去的前途招聘求职网站存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确…...

【JavaEE初阶】 初识网络原理

文章目录 🌲网络发展史🚩独立模式🚩网络互连📌局域网LAN🎈基于网线直连🎈基于集线器组建🎈基于交换机组建🎈基于交换机和路由器组建 📌广域网WAN 🍀网络通信基…...

LeetCode题解:993. 二叉树的堂兄弟节点,BFS,JavaScript,详细注释

原题链接: https://leetcode.cn/problems/cousins-in-binary-tree/ 解题思路: 使用队列进行BFS搜索,同时保存每个节点,以及其深度和父节点信息。当搜索到x和y时,对比深度和父节点,如果满足要求&#xff0…...

在python中加载tensorflow-probability模块和numpy模块

目录 操作步骤: 注意: 问题: 解决办法: 操作步骤: 在虚拟环境的文件夹中,找到Scripts文件夹,点击进去,找到地址栏,在地址栏中输入cmd,进入如下界面。 输…...

t2017递推2猴子摘桃

2、猴子摘桃(nhoi2005xx1) Description 果园里种了很多桃树,当桃树开始结果的时候,猴子便会成群结队地前来摘桃。 猴子们第一天会摘掉桃子的一半还多一个,第二天再摘第一天剩下的一半还多一个,以后每天均摘掉上一天剩下的一半还…...

呼吸灯【FPGA】

晶振50Mhz 1us 等于 计0~49 1ms等于 0~999us 1s等于 0~999ms //led_outalways(posedge FPGA_CLK_50M_b5 or negedge reset_e8) //【死循环】敏感【触发条件:上升沿 clk】【运行副本】if(reset_e81b0)begin //50Mhz晶振, 49_999_999 是 1秒…...

Codeforces 1855E 数学期望 + DP

题意 传送门 Codeforces 1855E Expected Destruction 题解 将 S i S_i Si​ 运动至 S i 1 S_{i1} Si1​ 的情况看作后者消失,则 S i S_i Si​ 在碰到 S i 1 S_{i 1} Si1​ 前, S i 1 S_{i 1} Si1​ 必然存在。 根据数学期望的线性性质&…...

5-1CComplex运算符重载为友元

以下是一个用运算符重载为友元重载的方法重做复数加减法的运算&#xff0c;请填空完成程序。 #include <iostream> using namespace std; class CComplex { private:double real; double imag; public:CComplex(double r0.0,double i0.0){ real(r), imag(i)}friend…...

Vue3.0 watch和watchEffect监听器:VCA

简介 在项目中&#xff0c;有时候检测一个变量的值是否反升了变化。通常使用的watch或者使用低效的循环判断。 在次vue中给我们设置了深度监测数据繁盛变化的方法。 1.vue中提供了在watch监听时设置deep:true 就可以实现对对象的深度监听; 2.immediate:true,代表watch里面声明了…...

1360. 日期之间隔几天

1360. 日期之间隔几天 Java代码&#xff1a; 【DateFormat】DateFormat用于实现日期的格式化 import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; // 好像已过时class Solution {public int daysBet…...

ubuntu配置 Conda 更改默认环境路径

我的需求是以后凡是新建一个虚拟环境都需要安装在一个挂载了大容量的分区/data里面 /home里面的是即将爆满但是还能塞点东西的硬盘. 如果您想要永久更改 Conda 的默认环境路径&#xff0c;可以编辑 Conda 的配置文件。首先&#xff0c;找到 Conda 的配置文件通常是 .condarc 文…...

华山编程培训中心——工业相机飞拍

飞拍功能是一种高速运动图像采集技术&#xff0c;通过降低相机的曝光时间来拍摄快速移动的对象&#xff0c;以提高工作效率和加快生产速度。下面视频演示工业相机飞拍&#xff1a; 上位机控制工业相机飞拍演示 一. 飞拍对相机硬件的要求 全局快门相机&#xff1a;飞拍要求相机…...

linux 释放缓存命令并做成定时任务

这个命令组合可以实现将待写入的数据同步到磁盘中&#xff0c;然后释放页面缓存。具体命令为&#xff1a; sync; echo 1 > /proc/sys/vm/drop_caches 第一个命令 sync 是将所有待写入磁盘的数据刷新到磁盘中&#xff0c;确保数据写入完成。第二个命令 echo 1 > /proc/…...

重塑AI代理的数据智能:Wren AI如何构建开放上下文层

重塑AI代理的数据智能&#xff1a;Wren AI如何构建开放上下文层 【免费下载链接】WrenAI Turn any AI Agents into world-class data analysts through the open context layer that gives AI agents grounded, governed memory, context, SQL across 20 data sources, that he…...

Lean版本管理革命:3步搞定多版本Lean开发环境

Lean版本管理革命&#xff1a;3步搞定多版本Lean开发环境 【免费下载链接】elan The Lean version manager 项目地址: https://gitcode.com/gh_mirrors/el/elan 还在为不同Lean项目需要不同版本而头疼吗&#xff1f;还在手动下载、配置、切换Lean版本吗&#xff1f;今天…...

乡村景区智慧垂钓破局增收!巨有科技激活乡村“渔乐”经济

垂钓作为国民级休闲活动&#xff0c;拥有超1.2亿爱好者&#xff0c;是乡村文旅中极具潜力的黄金业态。然而&#xff0c;多数乡村钓场仍停留在“一根竿、一个塘”的粗放运营阶段&#xff0c;面临计费混乱、管理成本高、体验同质化、增收乏力等困境。巨有科技聚焦乡村场景&#x…...

NVIDIA Profile Inspector完整指南:免费解锁显卡隐藏性能的终极工具

NVIDIA Profile Inspector完整指南&#xff1a;免费解锁显卡隐藏性能的终极工具 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 你是否曾经想过&#xff0c;为什么你的NVIDIA显卡明明性能不错&#xff…...

129、运动控制中的软件架构:分层设计

运动控制中的软件架构:分层设计 从一次半夜的电机啸叫说起 凌晨两点,车间里只剩示波器的荧光。我盯着那根诡异的电流波形——电机在低速运行时发出刺耳的啸叫,像指甲划过黑板。PID参数调了无数遍,滤波器换了好几种,问题依旧。直到我打开同事留下的代码,发现他把电流环、…...

Mos:macOS 鼠标滚轮太生硬?这款免费开源工具让你的滚轮爽如触控板

如果你刚从 Windows 转到 macOS&#xff0c;或者习惯了 MacBook 触控板丝滑的滚动体验&#xff0c;再插上鼠标用滚轮时&#xff0c;大概率会觉得哪里不对劲——网页一顿一顿地跳&#xff0c;代码编辑器里翻行像在打碟&#xff0c;哪怕是在备忘录里上下滑动&#xff0c;那种生涩…...

25款经典老芯片回顾:从运放、逻辑门到MCU,重温电子工程基石

1. 引言&#xff1a;一场跨越时代的芯片“认亲大会”最近在整理工作室的旧物料箱&#xff0c;翻出了一堆尘封已久的芯片&#xff0c;从布满灰尘的DIP封装到早已停产的早期逻辑门&#xff0c;每一片都像一张泛黄的老照片&#xff0c;记录着电子工业发展的一个脚印。我随手拍了几…...

Java SSRF漏洞深度解析:从URLConnection安全风险到多层防御实战

1. 项目概述&#xff1a;从两个看似简单的API说起在Java开发中&#xff0c;URLConnection和openStream()这两个方法几乎是每个开发者入门网络编程时最早接触的API。它们简单、直观&#xff0c;几行代码就能实现从网络获取数据的功能。然而&#xff0c;正是这种“简单易用”的特…...

ROS Noetic下,5分钟搞定Hector SLAM建图(附避坑指南与完整launch文件)

ROS Noetic下Hector SLAM极速建图实战&#xff1a;从零到地图生成的避坑全指南 刚接触ROS和SLAM的开发者往往被复杂的配置和概念淹没&#xff0c;而Hector SLAM作为最轻量级的激光建图方案&#xff0c;却能在5分钟内让你看到实实在在的建图效果。本文将采用逆向教学法——先带你…...

瑞芯微RK3568音频调试实战:从procfs到i2cset,手把手教你排查I2S无声问题

RK3568音频调试实战&#xff1a;从无声到有声的完整排查指南 当你在RK3568平台上遇到音频输出无声的问题时&#xff0c;那种挫败感是每个嵌入式工程师都深有体会的。本文将以一个真实的调试案例为线索&#xff0c;带你走完从问题定位到最终解决的完整流程&#xff0c;而不仅仅是…...