Appium顺序执行多个设备

1.startAppiumserver.py

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

import random
import subprocess

from utils.LogUtil import my_log


class Start:
    def __init__(self, device=None):
        self.device = device
        self.log = my_log(__file__)
    def __start_driver(self, aport, bpport,udid):
        """
        清理logcat与appium所有进程
        :return:
        """

        # appium = subprocess.Popen("appium -p %s -bp %s -U %s" %
        #                (aport, bpport, self.device))  # 启动appium
        self.log.info("appium -p %s -bp %s  -U %s --session-override" %
                       (aport, bpport,udid))
        appium = subprocess.Popen("appium -p %s -bp %s  -U %s --session-override" %
                       (aport, bpport,udid),shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,bufsize=1,close_fds=True)  # 启动appium
        while True:
            appium_line = str(appium.stdout.readline().strip(),"utf-8")
            # U.Logging.debug(appium_line)
            # U.sleep(1)
            print(appium_line)
            if 'Error: listen' in appium_line :
                message = '--------启动port端口为%s,bport端口为%s,设备udid为%s的appium服务失败!!!---------\n' \
                          'error_message:%s' % (aport, bpport, udid,appium_line.stderr)
                self.log.info(message)
                break
            elif 'listener started' in appium_line:
                message = '--------启动port端口为%s,bport端口为%s,设备udid为的appium服务成功!!!---------\n' \
                          % (aport, bpport,udid)

                self.log.info(message)
                break

    def start_appium(self,udid):
        """
        启动appium
        p:appium port
        bp:bootstrap port
        :return: 返回appium端口参数
        """

        aport = random.randint(4700, 4900)
        bpport = random.randint(4700, 4900)
        self.__start_driver(aport, bpport,udid)

        return aport

    def main(self,udid):
        """
        :return: 启动appium
        """
        return self.start_appium(udid)

    def stop_appium(self):
        res = subprocess.Popen("killall node" , shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                                  bufsize=1, close_fds=True)



if __name__ == '__main__':
    s = Start()
    s.main(udid)
  1. run.py
  • 通过自动获取设备方法,获取设备列表/自定义设备列表
  • 按获取设备,顺序执行脚本
import time

from common.StartAppium import Start
from common.desire_caps import appium_desired
from utils.AdbUtil import get_devices


def do(port, udid):
    driver = appium_desired(port, udid)
    driver.find_element_by_xpath("//*[@text='更多']").click()
    time.sleep(1)
    driver.find_element_by_xpath("//*[@text='移动网络']").click()
if __name__ == '__main__':
    s = Start()
    devices_list = get_devices()

    for uuid in devices_list:
        port  = s.main(uuid)
        appium_desired(udid=uuid, appserver_port=port)
    print(devices_list)
    ```

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Appium 中运行多个设备,您需要使用 Appium Server Grid,这是一个分布式系统,可以同时在多个设备上运行多个测试。您需要启动一个 Appium Hub 和多个 Appium Nodes 来实现多设备测试。 以下是一些步骤: 1. 启动一个 Appium Hub: ``` appium --hub ``` 2. 启动多个 Appium Nodes,每个节点对应一个设备: ``` appium --nodeconfig /path/to/node/config.json ``` 3. 在您的测试代码中,指定要使用的设备的 `udid`: ```python from appium import webdriver desired_caps = { 'platformName': 'Android', 'deviceName': 'device1', 'udid': 'device1-udid', # 其他的 desired capabilities } driver = webdriver.Remote('http://localhost:4444/wd/hub', desired_caps) ``` 在上面的代码中,`deviceName` 是您指定的设备名称,`udid` 是您在启动节点时指定的设备 ID。 注意,您需要在每个节点的配置文件中指定设备 ID,例如: ``` { "capabilities": [ { "platformName": "Android", "browserName": "", "maxInstances": 1, "platform": "ANDROID", "version":"7.1.1", "deviceName": "device1", "udid": "device1-udid", "appPackage": "com.example.app", "appActivity": ".MainActivity" } ], "configuration": { "cleanUpCycle": 2000, "timeout": 30000, "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", "url": "http://localhost:4723/wd/hub", "maxSession": 1, "port": 4723, "host": "localhost" } } ``` 在上面的配置文件中,`udid` 是您要连接设备的唯一 ID。 希望这些信息能帮助到您。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值