我们在做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()
文章来源:https://www.cnblogs.com/lihongtaoya/ ,请勿转载

appium如何连接多台设备的更多相关文章

  1. Appium同时连接多台手机进行测试(多线程)

    作为测试小白,当时遇到了N多问题: 开启多线程后,发现app启动后,用例就停止了:且启动app对应的手机不能正确对应,用例中是A手机跑A用例,结果启动了B手机跑A用例报错. 主要原因:Appium S ...

  2. appium自动化测试框架——自动化启动多台设备思路梳理

    今天,我们聊一聊如果自动化实现在多台设备上运行脚本. 一.首先我们回忆一下如何在一台设备上运行python脚本,一般分为三步 1.启动appium服务 2.创建驱动 3.运行python脚本 同样的, ...

  3. 000 - 准备工作ADB wifi连接多台鸿蒙设备进行调试

    首先将两台鸿蒙设备插入电脑的usb上 查看两台鸿蒙设备的deviceid C:\Users\Administrator>adb devices * daemon not running; sta ...

  4. ios如何一个证书多台设备测试

    在苹果开发者网站申请的证书,是授权mac设备的开发或者发布的证书,这意味着一个设备对应一个证书,但是99美元账号只允许生成3个发布证书,两个开发证书,这满足不了多mac设备的使用,使用p12文件可以解 ...

  5. Android-monkey稳定性测试(多台设备同时进行)

                                       1.目的(原创文章,转载请注明出处-) 主要为指引开展android平台应用的稳定性测试,尽可能地在应用发布前发现crash及an ...

  6. XMPP资源绑定(Resource Binding)与单台设备登录控制

    原文:http://blog.csdn.net/brasbug/article/details/26353511 一个XMPP的账号由三部分组成: 用户名(user/node),域名(domain)和 ...

  7. appium desktop连接模拟器

    1.adb准备好,我建议,下载Androidstudio,因为这样adb是最新的,可能会避免很多问题 2.adb connect 127.0.0.1:xxxx (网易mumu是7555,别的模拟器自行 ...

  8. BluetoothLE-Multi-Library 一个能够连接多台蓝牙设备的库,它可以作为client端,也可以为server端。支持主机/从机,外围设备连接。

    github地址:https://github.com/qindachang/BluetoothLE-Multi-Library BluetoothLE-Multi-Library 一个能够连接多台蓝 ...

  9. Appium自动化如何控制多设备并行执行

    前言: 如何做到,控制多设备并行执行测试用例呢. 思路篇 我们去想下,我们可以获取参数的信息,和设备的信息,那么​我们也可以针对每台设备开启不一样的端口服务.那么每个服务都对应的端口,我们在获取设备列 ...

  10. 【用PS3手柄在安卓设备上玩游戏系列】连接手柄和设备

    背景 硬件要求1:PS3 手柄 + 手柄配套的USB线 硬件要求2:已经获得 ROOT 权限并且支持蓝牙的安卓设备 软件要求1:Sixaxis Compatibility Checker PS3 手柄 ...

随机推荐

  1. c++算法竞赛常用板子集合(持续更新)

    前言 本文主要包含算法竞赛一些常用的板子,码风可能不是太好,还请见谅. 后续会继续补充没有的板子.当然我太菜了有些可能写不出来T^T 稍微有些分类但不多,原谅我QwQ 建议 Ctrl + F 以快速查 ...

  2. 基于数组或链表的学生信息管理系统(小学期C语言程序实训)

    1.基于数组的学生信息管理系统 实验内容: 编写并调试程序,实现学校各专业班级学生信息的管理.定义学生信息的结构体类型,包括:学号.姓名.专业.班级.3门成绩. 实验要求: (1) main函数:以菜 ...

  3. XAF新手入门 - 前言

    很多小伙伴在第一次接触XAF时,会被它的丰富功能及开箱即用的特点所吸引,即使在不了解XAF的情况下,也能够依葫芦画瓢创建一个功能丰富的应用,但当应用到实际项目中时,你会发现与之前的愿景差距很大,很多都 ...

  4. 一键生成CA证书

    create_cert () { cd /etc/openvpn/easy-rsa ./easyrsa gen-req ${NAME} nopass <<EOF EOF cd /etc/o ...

  5. Java集合精选常见面试题

    前言 博主只是这篇文章的搬运工,为了加强记忆自己梳理了一遍并扩展了部分内容. 集合拓展链接:集合概述&集合之Collection接口 - 至安 - 博客园 (cnblogs.com) Java ...

  6. 关于Docker的一些事--Docker概述

    为什么会出现docker? 背景 以一个食品工厂为例子,有一款食品产品,从研发到包装,需要分别两套生产线,虽然感觉说很好,符合SOP,但是吧,产能很慢,这是为什么呢? 研发:食品搭配.颜色搭配.荤素搭 ...

  7. KMP算法,匹配字符串模板(返回下标)

    //KMP算法,匹配字符串模板 void getNext(int[] next, String t) { int n = next.length; for (int i = 1, j = 0; i & ...

  8. Kubernetes核心技术Pod

    Kubernetes核心技术Pod Pod概述 Pod是K8S系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型,也是在K8S上运行容器化应用的资源对象,其它的资源对象 ...

  9. 论文翻译:2022_DeepFilterNet2: Towards Real-Time Speech Enhancement On Embedded Devices For Fullband Audio

    博客地址:凌逆战 论文地址:DeepFilternet2: 面向嵌入式设备的全波段音频实时语音增强 论文代码:https://github.com/Rikorose/DeepFilterNet 引用格 ...

  10. EdgeCore初学习

    ### 前提 初学edgeCore,有不足之处,欢迎指正 ### 大纲 1. 日志查看2. 重启3. 在线编译4. sftp同步代码5. 整体架构6. 通信协议7. 模拟实现(待实现) ### 步骤 ...