使用Appium自动化测试app(五)------实战篇3(线程)

本文介绍了一种使用Appium和Selenium进行多设备自动化测试的方法,通过Python脚本启动多个Appium服务器实例,针对不同设备并行执行测试用例,提高了测试效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在很多时候,我们需要对多台设备进行操控测试!

import os
import unittest
import threading
import re
from time import sleep
from appium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


def start_server(serial, port):
    cmd = 'appium --address 127.0.0.1 --port ' + str(port) + ' --bootstrap-port ' + str(port-2000) + ' -U ' + serial + ' --session-override'
    os.system(cmd)


class Test(object):
    def setup(self, serial, newPort, systemPort):
        desired_caps = {
            'platformName': 'Android',
            'deviceName': 'emulator-5556',
            'appPackage': 'com.facebook.katana',
            'appActivity': '.LoginActivity',
            'autoAcceptAlerts': 'True',
            'noReset': 'True',
            # 连接物理设备的唯一标志符
            'udid': serial,
            'systemPort': systemPort,
        }

        self.driver = webdriver.Remote('http://127.0.0.1:' + str(newPort) + '/wd/hub', desired_caps)
        self.test_start()
        self.tear_down()

    def tear_down(self):
        self.driver.quit()

    def test_start(self):
        sleep(8)
        x = self.driver.get_window_size()['width']
        y = self.driver.get_window_size()['height']
        wait = WebDriverWait(self.driver, 30)
        while True:
            if 'Like button. Double tap and hold to react.' in self.driver.page_source:
                sleep(2)
                wait.until(EC.presence_of_element_located((By.ID, 'Like button. Double tap and hold to react.'))).click()
                sleep(2)
            self.driver.swipe(x * 0.5, y * 0.75, x * 0.5, y * 0.25, 500)
            sleep(2)


if __name__ == '__main__':
    # server线程池
    server_list = []
    # driver线程池
    driver_list = []
    # 初始化默认端口
    port = 4723
    a = 0
    info_out = os.popen('adb devices')
    for info in info_out.readlines():
        if 'List of devices' in info or 'adb' in info or 'daemon' in info or 'offline' in info or 'unauthorized' in info or len(info) < 5:
            pass
        else:
            newPort = port + a
            systemPort = port + a + 4000
            test = Test()
            a = a + 1
            serial_list = re.findall(r'(.*?)	device', info)
            server_list.append(threading.Thread(target=start_server, args=(serial_list[0], newPort)))
            driver_list.append(threading.Thread(target=test.setup, args=(serial_list[0], newPort, systemPort)))
    for server in server_list:
        server.start()
    sleep(30)
    for driver in driver_list:
        driver.start()

在这里需要着重介绍一下这几个参数:

appium -a 127.0.0.1 -p xxxx -bp xxxx --chromedriver-port xxxx -U xxxx --session-override

-a:是指定监听的ip,也可以写成–address,后面127.0.0.1可以改为你需要的ip地址
-p:是指定监听的端口,也可以写成–port,也可以修改为你需要的端口
-bq:是连接Android设备bootstrap的端口号,默认是4724,也可写成–bootstrap-port
–chromedriver-port:是chromedriver运行需要指定的端口号,默认是9515
-U:是连接的设备名称,就是adb devices获取的设备标识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

她最爱橘了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值