前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >appium+python自动化59-多台设备并行

appium+python自动化59-多台设备并行

作者头像
上海-悠悠
发布2018-07-25 15:50:05
5.4K1
发布2018-07-25 15:50:05
举报

前言

做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文件去管理,更方便查看

代码语言:javascript
复制
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文件配置如下:

代码语言:javascript
复制
- 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端口号,后面代码会用到

代码语言:javascript
复制
# 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代码

代码语言:javascript
复制
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指令启动

代码语言:javascript
复制
# 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框架就行

代码语言:javascript
复制
# 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)

好书推荐:python初学者强烈推荐Python核心编程(第二版),注意是第二版不是第三版,第三版是接着第二版讲的,虽然第二版是python2语法,不影响的,基础的概念但是一样的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 启动多个手机
  • 启动多个appium服务
  • yaml管理配置
  • 读yaml配置
  • 运行app代码
  • python启动appium服务
  • 多线程运行
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档