• python+Appium自动化:基于多进程启动多设备


    先分享一个appium参数

    参数  默认值 含义
    -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服务

    appium -p 4723

    appium -p 4725

    再基于这些服务来启动设备。

    • 设备1:127.0.0.1:62001
    • 设备2:127.0.0.1:62025

    以启动淘宝app为例子

    multi_devices

    from appium import webdriver
    import yaml
    from time import ctime


    #多设备名称
    devices_list = ['127.0.0.1:62001', '127.0.0.1:62025']
    def Desired_caps(udid,port):
    with open('multidevice.yaml',"r") as file:
    data = yaml.load(file,yaml.FullLoader)
    desired_caps={
    "platformName": data["platformName"],
    "platformVersion": data["platformVersion"],
    "deviceName": data["deviceName"],
    "udid":udid,
    "appPackage": data["appPackage"],
    "appActivity": data["appActivity"],
    "unicodeKeyboard":data["unicodeKeyboard"],
    "resetKeyboard":data["resetKeyboard"],
    "noReset": data["noReset"],

    }
    print("appium port:%s start run %s at %s"%(port,udid,ctime()))
    driver = webdriver.Remote('http://' + str(data['ip']) + ':' + str(port)+ '/wd/hub', desired_caps)
    driver.implicitly_wait(10)
    return driver
    if __name__ == '__main__':
    Desired_caps(devices_list[0],4723)
    Desired_caps(devices_list[1],4725)

    多进程并发启动设备

    多进程优势

    • 多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响;
    • 而多线程中,所有变量都由所有线程共享,所以,任何一个变量都可以被任何一个线程修改,因此,线程之间共享数据最大的危险在于多个线程同时改一个变量,容易把内容给改乱了

    multiprocess_devices.py

    # -*- coding: utf-8 -*-#

    from appium import webdriver
    import yaml
    from time import ctime
    import multiprocessing


    #多设备名称
    devices_list = ['127.0.0.1:62001', '127.0.0.1:62025']
    def Desired_caps(udid,port):
    with open('multidevice.yaml', "r") as file:
    data = yaml.load(file, yaml.FullLoader)
    desired_caps = {
    "platformName": data["platformName"],
    "platformVersion": data["platformVersion"],
    "deviceName": data["deviceName"],
    "udid": udid,
    "appPackage": data["appPackage"],
    "appActivity": data["appActivity"],
    "unicodeKeyboard":data["unicodeKeyboard"],
    "resetKeyboard":data["resetKeyboard"],
    "noReset": data["noReset"],

    }
    print("appium port:%s start run %s at %s" % (port, udid, ctime()))
    driver = webdriver.Remote('http://' + str(data['ip']) + ':' + str(port)+ '/wd/hub', desired_caps)
    return driver

    # 构建线程组
    desired_process = []

    # 加载desired进程
    for i in range(len(devices_list)):
    port = 4723 + 2*i
    desired = multiprocessing.Process(target=Desired_caps, 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()

      

    参考转载:https://sutune.me/2018/05/15/appium-sync/

    转载请附上原文链接。
  • 相关阅读:
    appium 方法整理
    appium_获取元素状态
    Locust性能测试_参数关联
    Locust性能测试-参数化批量注册
    pytest_命令行传参
    pytest_函数传参和firture传参数request
    pytest_用例a失败,跳过测试用例b和c并标记失败xfail
    pytest_skip跳过用例
    pytest_使用自定义标记mark
    算法:迷宫问题
  • 原文地址:https://www.cnblogs.com/bugbreak/p/12533333.html
Copyright © 2020-2023  润新知