前言

做android自动化的时候,启动一个appium服务,只能匹配一个手机去自动化执行。有时候想同一套代码,可以在不同的手机上执行,测下app在不同手机上兼容性。

这就需要启动多个appium服务了,并且android设备和appium要一一对应才行。

启动多个手机

1.这里以夜神模拟器和雷电模拟器为例,先启动这2个设备

2.adb devices查看设备名称,多个设备会显示多行数据

启动多个appium服务

1.启动appium服务,可以用命令行模式,在cmd里面启动,可以参考上一篇 appium命令行参数

比如第一个appium服务,可以指定一个端口4730,然后指定一个设备名称【雷电模拟器】,也就是-U参数(adb devices可以查看)

appium -a 127.0.0.1 -p 4730 -U emulator-5554 --no-reset

2.第二个appium 服务指定设备名称【夜神模拟器】

appium -a 127.0.0.1 -p 4740 -U 127.0.0.1:62001 --no-reset

yaml管理配置

1.运行不同手机时候,desired_caps的参数配置肯定也是需要多个的,如何高效的管理多个desired_caps配置呢?

这里我用yaml文件去管理,更方便查看

desired_caps = {

'platformName': 'Android', # 手机是Android还是ios

'deviceName': 'emulator-5554',

'platformVersion': '5.1.1', # android版本号

'noReset': True,

# apk包名 # aapt工具查看

'appPackage': 'com.taobao.taobao',

# apk的launcherActivity

'appActivity': 'com.taobao.tao.welcome.Welcome'

}

2.yaml文件配置如下:

- desc: 设备名称_雷电,appium启动服务端口号_4723

port: 4730

desired_caps:

platformName: Android

deviceName: emulator-5554

appPackage: com.taobao.taobao

noReset: !!bool True

udid: emulator-5554

appActivity: com.taobao.tao.welcome.Welcome

- desc: 设备名称_夜神,appium启动服务端口号_4724

port: 4740

desired_caps:

platformName: Android

deviceName: 127.0.0.1:62001

appPackage: com.taobao.taobao

noReset: !!bool True

udid: 127.0.0.1:62001

appActivity: com.taobao.tao.welcome.Welcome

读yaml配置

1.读出来多个配置是list类型,desc是设备的描述,可以通过描述来找到对应的设备名称,如:雷电

2.返回desired_caps配置信息和port端口号,后面代码会用到

# coding=utf-8

from appium import webdriver

import time

import yaml

import os

def get_desired_caps(devicesName='雷电'):

'''

从yaml读取desired_caps配置信息

参数name:设备名称,如:夜神/雷电

:return: desired_caps字典格式 和port

'''

curpath = os.path.dirname(os.path.realpath(__file__))

yamlpath = os.path.join(curpath, "taobao.yaml")

print("配置地址:%s" % yamlpath)

f = open(yamlpath, "r", encoding="utf-8")

a = f.read()

f.close()

# 把yaml文件转字典

d = yaml.load(a)

for i in d:

if devicesName in i["desc"]:

print(i)

# 启动服务

start_appium(port=i['port'])

return (i['desired_caps'], i['port'])

运行app代码

def run_app(devicesName):

# 配置参数

desired_caps = get_desired_caps(devicesName)

print(desired_caps)

# 执行代码

driver = webdriver.Remote('http://127.0.0.1:%s/wd/hub' % desired_caps[1], desired_caps[0])

time.sleep(10)

# 点注册登陆

driver.find_element_by_xpath("//*[@text='注册/登录']").click()

time.sleep(6)

# content-desc

driver.find_element_by_xpath("//*[@text='请输入手机号码']").send_keys("15001234000")

driver.find_element_by_xpath("//*[@text='请输入验证码']").send_keys("1111")

python启动appium服务

1.如果嫌手工端口cmd窗口启动服务麻烦,可以用python去启动appium服务,释放你的双手

先判断服务启了没,没启动的话就执行cmd指令启动

# coding=utf-8

from appium import webdriver

import time

import yaml

import os

from tomorrow import threads

# 作者:上海-悠悠 QQ交流群:330467341

def start_appium(port=4723, udid=""):

a = os.popen('netstat -ano | findstr "%s" '% port)

time.sleep(2)

t1 = a.read()

if "LISTENING" in t1:

print("appium服务已经启动:%s" % t1)

# s = t1.split(" ")

# s1 = [i for i in s if i != '']

# pip = s1[-1].replace("\n", "")

else:

# 启动appium服务

# appium -a 127.0.0.1 -p 4740 -U emulator-5554 127.0.0.1:62001 --no-reset

os.system("appium -a 127.0.0.1 -p %s -U %s --no-reset" % (port, udid))

多线程运行

1.多线程用一个很简单的tomorrow框架就行

# coding=utf-8

from appium import webdriver

import time

import yaml

import os

from tomorrow import threads

# 作者:上海-悠悠 QQ交流群:330467341

def start_appium(port=4723, udid=""):

a = os.popen('netstat -ano | findstr "%s" '% port)

time.sleep(2)

t1 = a.read()

if "LISTENING" in t1:

print("appium服务已经启动:%s" % t1)

# s = t1.split(" ")

# s1 = [i for i in s if i != '']

# pip = s1[-1].replace("\n", "")

else:

# 启动appium服务

# appium -a 127.0.0.1 -p 4740 -U emulator-5554 127.0.0.1:62001 --no-reset

os.system("appium -a 127.0.0.1 -p %s -U %s --no-reset" % (port, udid))

def get_desired_caps(devicesName='雷电'):

'''

从yaml读取desired_caps配置信息

参数name:设备名称,如:夜神/雷电

:return: desired_caps字典格式

'''

curpath = os.path.dirname(os.path.realpath(__file__))

yamlpath = os.path.join(curpath, "taobao.yaml")

print("配置地址:%s" % yamlpath)

f = open(yamlpath, "r", encoding="utf-8")

a = f.read()

f.close()

# 把yaml文件转字典

d = yaml.load(a)

for i in d:

if devicesName in i["desc"]:

print(i)

# 启动服务

devicesName = i['desired_caps']['udid']

print(devicesName)

start_appium(port=i['port'], udid=devicesName)

return (i['desired_caps'], i['port'])

@threads(2)

def run_app(devicesName):

# 配置参数

desired_caps = get_desired_caps(devicesName)

print(desired_caps)

# 执行代码

driver = webdriver.Remote('http://127.0.0.1:%s/wd/hub' % desired_caps[1], desired_caps[0])

time.sleep(10)

# 点注册登陆

driver.find_element_by_xpath("//*[@text='注册/登录']").click()

time.sleep(6)

# content-desc

driver.find_element_by_xpath("//*[@text='请输入手机号码']").send_keys("15001234000")

driver.find_element_by_xpath("//*[@text='请输入验证码']").send_keys("1111")

# driver.find_element_by_accessibility_id("帮助").click()

if __name__ == "__main__":

# 作者:上海-悠悠 QQ交流群:330467341

devices = ["夜神", "雷电"]

for i in devices:

run_app(devicesName=i)

上海-悠悠 QQ交流群:330467341

python操作模拟器多开操作_appium+python自动化60-windows上同时启动多个appium服务,让多个android机器并行运行...相关推荐

  1. python open文件被另一个进程打开怎么办,在Windows上,如何打开一个已经被另一个进程打开进行写入的文件?...

    我试图打开另一个进程打开的日志文件并删除前几行. 在Unix上,我只需做一个os.open('/tmp/file.log', os.O_NONBLOCK),这样就可以更接近我的目标.在 现在我被Win ...

  2. 模拟器真机环境_Appium+python自动化(二)- 环境搭建—下(超详解)

    上一篇android测试开发环境已经准备好, 那么接下来就是appium的环境安装和搭建了. 菲哥和小伙伴们开个玩笑,不要觉得自人品不好,就不会成功那都是骗人的.搭建环境和人品半毛钱关系也没有,搭建环 ...

  3. 基于python的压测工具_基于Python和SIPp的自动化压力测试系统设计和实现

    信斌 王桂花 摘要:首先,分析了现有测试系统的不足,之后,介绍了软件组成和运行环境说明,最后,设计了基于Python和SIPp的自动化压力测试系统,并给出了相关代码.新的测试系统克服了现有测试系统的不 ...

  4. 如何在PyCharm上配置Python解释器,以及解决Windows上PyCharm不能识别C:\Users\Me\AppData路径的问题。

    最近遇到这么一个问题.在Windows上安装Python解释器后,我在PyCharm上却不能找到相应的路径.我花了一些时间去解决这个问题,将解决方案记录于此. 1 如何在PyCharm上配置Pytho ...

  5. 学python电脑要装什么_初学 Python 需要安装哪些软件?

    KDnuggets2018年的一个博客发起了一项投票:数据科学中最好用的Python IDE是什么? 本次调查共有1900多人参与,调查结果如下图所示.前5个选择是: Jupyter,57% PyCh ...

  6. python32位 最大内存_64位windows上的Python 32位内存限制

    我不知道你为什么认为你的进程应该能够访问4GB.根据MSDN的Memory Limits for Windows Releases,在64位Windows 7上,一个默认的32位进程得到2GB.*这正 ...

  7. android 模拟器 ryzen,锐龙安卓模拟器多开:是否开启虚拟化,结果是天上地下

    此文发表于2018年9月15日 安卓模拟器多开账号用锐龙行不行? intel的虚拟化技术(intel VT)这个都知道,AMD也很早就有虚拟化技术,名称为AMD-V,不过由于以前的AMD处理器身体太差 ...

  8. 写字机器人开发之:python opencv linux下合作操作摄像头

    2019独角兽企业重金招聘Python工程师标准>>> 设想 之前使用C#控制摄像头的,现在厌烦了windows,决定转移到linux下玩耍.感觉能够python语言特有的好入手,正 ...

  9. python 安卓模拟器 操作_Python+Appium自动化测试-使用Android模拟器

    做APP的UI自动化测试时,我们往往会使用真机跑自动化测试脚本,因为这样才是最真实的使用场景.但前期调试脚本的话,可以先使用模拟器,这样相对更加方便. 不推荐使用Android SDK里自带模拟器,太 ...

  10. windows下Appium测试环境搭建, 并配合python操作模拟器

    环境搭建 安装JDK 1. Java Downloads | Oracle 下载JDK安装包,按照默认方式无脑按照即可 2. 设置系统环境变量,系统环境变量添加JAVA_HOME, 路劲是jdk安装路 ...

最新文章

  1. 百度智能小程序正式开源,开发方案详解
  2. eclipse java8报错_eclipse4.3安装支持Java8插件,之后就报错无法打开eclipse,求解?
  3. 商丘高中计算机考试成绩查询系统,2019商丘中考招生成绩查询时间及网站公布...
  4. 用python做一个简单的投票程序_以一个投票程序的实例来讲解Python的Django框架使...
  5. 王者荣耀服务器未响应8月5日苹果,王者荣耀:世冠小组赛8月5日前瞻预测
  6. 从零开始的LCA(最近公共祖先)
  7. R语言 朴素贝叶斯分类预测
  8. 阿里登顶毕马威全球企业创新榜 AliOS引领智能网联汽车产业发展
  9. Sigmod/Softmax变换
  10. matlab 分水岭法,matlab中的分水岭算法
  11. db powerdesigner mysql-odbc连接注意事项
  12. python从入门到实践答案第十章_Python编程:从入门到实践——【作业】——第十章(文件和异常)...
  13. WINDOWS镜像概述
  14. EDA与VHDL题目——38译码器
  15. html5怎么把图片置顶,html/css如何让图片上下居中(居中垂直)?
  16. 深度学习研究基因组学
  17. BZOJ3837 : [Pa2013]Filary
  18. ORAN专题系列-30:5G基站如何升级到O-RAN基站 - FHGW(FrontHaul Gateway)的时钟同步系统
  19. TSC打印机,利用javascript实现连续扫码自动打印,配置说明
  20. sublime3生成html头部按tab键没反应

热门文章

  1. 你应该懂得的关于电脑配置冷知识
  2. #Linux中的GCC编程# 20170731 C培训作业
  3. Golang 基础:接口使用、实现原理(eface iface)和设计模式
  4. matlab p值 z值,显著性水平 p值 z值
  5. love~LBJ,奥布莱恩神杯3
  6. c语言程序设计课设简单,北京工业大学C语言程序设计课设报告.docx
  7. docker build stress命令
  8. 微信小程序表单必填项设置
  9. code runner 运行配置
  10. python访问陌生人qq空间_自己的QQ空间怎么不让陌生人进入—设置访问权限