appium--多进程启动多设备
前戏
在前面我们都是使用一个机器进行测试,在做app自动化的时候,我们要测不同的机型,也就是兼容性测试,如果一台一台设备去执行,那就显的太麻烦了。所以经常需要我们启动多个设备,同时跑自动化测试用例,要跑多个设备时,首先要启动多个appium服务。
启动多个appium服务
在之前我们都是在命令行里输入appium来启动appium服务,这样启动的默认端口是4723,我们可以使用-p参数来指定端口号,输入appium等价与appium -p 4723

启动另一个服务
appium -p 4725

这样我们就启动了两个appium服务。
服务要隔一个数字,如端口为4723,则4724为连接安卓设备的端口号,所以下个服务为4725
appium的参数
appium不止一个参数-p,还有其他的参数
| 参数 | 默认值 | 含义 |
| -U,--udid | null | 连接物理设备的唯一设备标识符 |
| -a,--address | 0.0.0.0 | 监听的ip地址 |
| -p,--port | 4723 | 监听的端口 |
| -bp,--bootstrap-port | 4724 | 连接Android设备的端口号(Android-only) |
| -g,--log | null | 将日志输出到指定文件 |
| --no-reset | false | session之间不重置应用状态 |
| --session-override | false | 允许session被覆盖(冲突的话) |
| --app-activity | null | 打开Android应用时,启动的Activity的名字 |
| --app | null | 本地app的路径或远程的安装包 |
其他的参数可以使用appium -h查看

多设备启动
前提条件:
1.连接两个机器

2.启动两个服务
yaml文件
platformName: Android
platforVersion: 6.1.1
deviceName: 127.0.0.1:62001
appPackage: com.jgw.csca
appActivity: com.jgw.csca.view.activity.LoginActivity
unicodeKeyboard: True
resetKeyboard: True
noReset: False
ip: 127.0.0.1
port: 4723
脚本
from appium import webdriver
import yaml devices_list = ['127.0.0.1:62001', '127.0.0.1:62025'] # 两个设备 '''
udid是设备的,如果是真机,这个必须有,有udid后deviceName就可以随便写一个
port是appium服务的端口,我启动的是4723和4725
'''
def desiredCaps(udid, port):
with open('../conf/capability.yaml', 'r', encoding='utf-8') as file:
data = yaml.load(file, Loader=yaml.FullLoader)
desired_caps = {}
desired_caps['platformName'] = data['platformName']
desired_caps['platforVersion'] = data['platforVersion']
desired_caps['deviceName'] = data['deviceName']
desired_caps['udid'] = udid
desired_caps['appPackage'] = data['appPackage']
desired_caps['appActivity'] = data['appActivity']
desired_caps['unicodeKeyboard'] = data['unicodeKeyboard']
desired_caps['resetKeyboard'] = data['resetKeyboard']
desired_caps['noReset'] = data['noReset']
driver = webdriver.Remote('http://' + str(data['ip']) + ':' + str(port)+ '/wd/hub', desired_caps)
'''
第一次启动
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
第二次启动
driver = webdriver.Remote('http://127.0.0.1:4725/wd/hub', desired_caps)
'''
return driver if __name__ == '__main__':
desiredCaps(devices_list[0], 4723)
desiredCaps(devices_list[1], 4725)
这样,第一台设备执行结束之后就会在第二台设备上执行
多进程启动多个设备
可以使用python的多线程或者多进程实现,推荐使用多进程,原因如下
多进程中,同一个变量,各自有一份拷贝存在于每个进程中, 互不影响。而多线程中,所有变量都由所有线程共享,所以,任何一个变量都可以被任何一个线程修改, 因此,线程之间共享的数据量最大的危险在于多个线程同一时间修改一个变量,容易把数据给改乱了
前置条件,和上面的一样
from appium import webdriver
import yaml
import multiprocessing devices_list = ['127.0.0.1:62001', '127.0.0.1:62025'] # 两个设备 def desiredCaps(udid, port):
with open('../conf/capability.yaml', 'r', encoding='utf-8') as file:
data = yaml.load(file, Loader=yaml.FullLoader)
desired_caps = {}
desired_caps['platformName'] = data['platformName']
desired_caps['platforVersion'] = data['platforVersion']
desired_caps['deviceName'] = data['deviceName']
desired_caps['udid'] = udid
desired_caps['appPackage'] = data['appPackage']
desired_caps['appActivity'] = data['appActivity']
desired_caps['unicodeKeyboard'] = data['unicodeKeyboard']
desired_caps['resetKeyboard'] = data['resetKeyboard']
desired_caps['noReset'] = data['noReset']
driver = webdriver.Remote('http://' + str(data['ip']) + ':' + str(port)+ '/wd/hub', desired_caps) return driver desired_process = [] # 存储多设备 for i in range(len(devices_list)):
port = 4723 + 2*i
desired = multiprocessing.Process(target=desiredCaps, args=(devices_list[i], port))
desired_process.append(desired) # 将设备添加到里面,ip和端口 if __name__ == '__main__':
for desired in desired_process:
desired.start() for desired in desired_process:
desired.join()
appium--多进程启动多设备的更多相关文章
- Appium+python自动化(三十六)- 士兵突击许三多 - 多个appium服务启动,多个设备启动,多进程并发启动设备-并发测试 - 上(超详解)
简介 前面课程只是启动了单个appium服务,只能控制单台设备.如果需要针对多台设备测试那么该如何处理?而且发现群里的小伙伴们也在时不时地在讨论这个问题,想知道怎么实现的,于是宏哥就决定写一片这样的文 ...
- Appium+python自动化(三十七)- 士兵突击许三多 - 多个appium服务启动,多个设备启动,多进程并发启动设备-并发测试 - 下(超详解)
简介 接着上一篇继续看一下如何并发测试以及并发测试的过程中,可能遇到的问题,在这里宏哥把宏哥遇到的和小伙伴或者童鞋们,一起分享一下. Appium端口检测 问题思考 经过前面学习,我们已经能够使用py ...
- appium+Python 启动app(一)
当我们appium和Python环境都配置好了,如何启动我们第一个app呢?下面介绍appium+Python启动app的操作步骤,为了能够详细查看,我们这里使用夜游神模拟器进行示范. 测试项目:QQ ...
- appium+python 启动一个app步骤
询问度娘搭好appium和python环境,开启移动app自动化的探索(基于Android),首先来记录下如何启动待测的app吧! 如何启动APP?1.获取包名:2.获取launcherActivit ...
- appium+Python 启动app(二)
我们上步操作基本完成,下面介绍编写Python脚本启动app 打开我们pycharm新建.py文件 第一步:输入Python脚本代码: #coding=utf-8 from appium import ...
- Appium自动获取 Android 设备 id 和包名等信息(python)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/zhusongziye/article/d ...
- Appium(二)---启动App+模拟滑动
环境搭建好了,就可以实现基本的操作,比如启动App和模拟滑动.这里我实现的是在真机(乐视1s)上启动抖音App,并滑动抖音的视频列表,代码如下: from appium import webdrive ...
- Appium之启动第一个App
搭建appium自动化环境真是各种问题呀. 如何启动在真机上启动App? 执行操作:操作Android真机上打开手机淘宝app,并搜索“熊猫”. 脚本源码如下: from appium import ...
- Tornado学习笔记(一) helloword/多进程/启动参数
前言 当你觉得你过得很舒服的时候,你肯定没有在进步.所以我想学习新的东西,然后选择了Tornado.因为我觉得Tornado更匹配目前的我的综合素质. Tornado学习笔记系列主要参考<int ...
随机推荐
- MYSQL5.6免安装版在windows下的使用
一.去MYSQL官网下载MYSQL免安装版,由于我的系统是64位的,所以就下载了64位的Mysql版本 http://cdn.mysql.com//Downloads/MySQL-5.6/mysql- ...
- 一位IT民工的十年风雨历程
距离2020年只有30天了,转眼毕业快10年. 回首自己,已三十有三,中年危机. 古人云三十而立,我却还在测试途中摸爬滚打. 创业,自由职业永远是一个梦,白日梦. 焦虑.迷茫.看不到希望. 这两天一场 ...
- 尽解powershell的workflow
尽解powershell的workflow -------1[简介]--------- Microsoft .NET Framework 4.0 发布于2010年4月左右..net4 的新特性,是并行 ...
- vuex无法获取getters属性this.$store.getters.getCurChildId undefined
问题描述 this.$store.getters.getCurChildId undefined 这是因为我们设置了命名空间namespaced: true, 在vuex官网中对命名空间的描述如下: ...
- 『CSP2019初赛后的总结』
初赛已经过去了,分数大概也已经知道了,接下来的一个月停课应该就是全部准备复赛. 联赛前几次讲课的内容是组合计数,计数\(dp\),字符串,概率期望,数论,数据结构,多数知识点难度都是大于联赛难度的,不 ...
- MVC三层架构搭建
MVC三层架构搭建 项目主要是用三层来搭建项目,三层分为表现层,数据层和业务层.项目用了目前比较流行的IOC架构.目前流行的IoC 框架有AutoFac,Unity,Spring.NET等,项目中选用 ...
- Win10 手动安装 WSL 并修改默认登录用户为 root
首先要在"程序和功能"里面开启这个服务 然后重启系统使其生效. 然后打开 PowerShell,输入: Invoke-WebRequest -Uri https://aka.ms/ ...
- python3之利用字典和列表实现城市多级菜单
利用字典和列表实现城市多级菜单 #coding:utf-8 #利用字典和列表实现城市多级菜单 addrIndex = {":"福建"} addrDict = {" ...
- spring cloud 框架源码 activiti工作流 vue.js html 跨域 前后分离 springboot
1.代码生成器: [正反双向](单表.主表.明细表.树形表,快速开发利器)freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本.处理类.service等完整模块2. ...
- 前端开发CSS3——使用方式和选择器
CSS是Cascading Style Sheets(层叠样式表)的简写,用于修饰文档的语言,可以修饰HTML.XML.SVN.每个语言都有每个语法的规则:CSS声明.CSS声明块.CSS选择器.CS ...