app 自动化测试 - 多设备并发 -appium+pytest+ 多线程 | 干货

1、appium+python 实现单设备的 app 自动化测试

  1. 启动 appium server,占用端口 4723
  2. 电脑与一个设备连接,通过 adb devices 获取已连接的设备
  3. 在 python 代码当中,编写启动参数,通过 pytest 编写测试用例,来进行自动化测试。

2、若要多设备并发,同时执行自动化测试,那么需要:

  1. 确定设备个数
  2. 每个设备对应一个 appium server 的端口号,并启动 appium
  3. pytest 要获取到每个设备的启动参数,然后执行自动化测试。

在这里插入图片描述

3、实现策略

第一步:从设备池当中,获取当前连接的设备。若设备池为空,则无设备连接。

第二步:若设备池不为空,启动一个线程,用来启动appium server.与设备个数对应。
起始server端口为4723,每多一个设备,端口号默认+4

第三步:若设备池不为空,则启用多个线程,来执行app自动化测试。

4、具体实现步骤

4.1 通过 adb 命令,获取当前已连接的设备数、设备名称、设备的安卓版本号。
定义一个 ManageDevices 类。

  1. 重启adb服务。
  2. 通过adb devices命令获取当前平台中,已连接的设备个数,和设备uuid.
  3. 通过adb -P 5037 -s 设备uuid shell getprop ro.build.version.release获取每一个设备的版本号。
  4. 将所有已连接设备的设备名称、设备版本号存储在一个列表当中。
  5. 通过调用get_devices_info函数,即可获得4中的列表。

实现的部分代码为:

"""
@Title   : app多设备并发-appium+pytest
@Author  : 柠檬班-小简
@Email   : lemonban_simple@qq.com
"""

class ManageDevices:
    """
       1、重启adb服务。
       2、通过adb devices命令获取当前平台中,已连接的设备个数,和设备uuid.
       3、通过adb -P 5037 -s 设备uuid shell getprop ro.build.version.release获取每一个设备的版本号。
       4、将所有已连接设备的设备名称、设备版本号存储在一个列表当中。
       5、通过调用get_devices_info函数,即可获得4中的列表。
    """

    def __init__(self):
        self.__devices_info = []
        # 重启adb服务
        self.__run_command_and_get_stout("adb kill-server")
        self.__run_command_and_get_stout("adb start-server")

    def get_devices_info(self):
        """
        获取已连接设备的uuid,和版本号。
        :return: 所有已连接设备的uuid,和版本号。
        """
        self.__get_devices_uuid()
        print(self.__devices_info)
        self.__get_device_platform_vesion()
        return self.__devices_info

4.2 定义一个设备配置池。

设备启动参数管理池。
每一个设备:对应一个启动参数,以及appium服务的端口号。

  1. desired_caps_config/desired_caps.yaml文件中存储了启动参数模板。
  2. 从1中的模板读取出启动参数。
  3. 从设备列表当中,获取每个设备的设备uuid、版本号,与2中的启动参数合并。
  4. 每一个设备,指定一个appium服务端口号。从4723开始,每多一个设备,默认递增4
  5. 每一个设备,指定一个本地与设备tcp通信的端口号。从8200开始,每多一个设备,默认递增4.
    在启动参数当中,通过systemPort指定。
    因为appium服务会指定一个本地端口号,将数据转发到安卓设备上。
    默认都是使用8200端口,当有多个appium服务时就会出现端口冲突。会导致运行过程中出现socket hang up的报错。

实现的部分代码:

def devices_pool(port=4723,system_port=8200):
    """
    设备启动参数管理池。含启动参数和对应的端口号
    :param port: appium服务的端口号。每一个设备对应一个。
    :param system_port: appium服务指定的本地端口,用来转发数据给安卓设备。每一个设备对应一个。
    :return: 
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Appium是一个用于移动应用自动化测试的开源工具,而Pytest是一个Python的测试框架。结合使用AppiumPytest,可以搭建一个强大的移动应用自动化测试框架。 使用AppiumPytest进行自动化测试时,首先需要安装AppiumAppium Python客户端。然后,编写测试脚本,可以使用Pytest提供的各种断言和测试装置。 下面是一个简单的例子,演示了如何使用AppiumPytest进行自动化测试: ```python import pytest from appium import webdriver @pytest.fixture def driver(): desired_caps = { 'platformName': 'Android', 'deviceName': 'your_device_name', 'appPackage': 'your_app_package', 'appActivity': 'your_app_activity' } driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) yield driver driver.quit() def test_login(driver): # 执行登录操作 # ... # 使用Pytest进行断言 assert driver.find_element_by_id('login_success_element').is_displayed() def test_logout(driver): # 执行退出操作 # ... # 使用Pytest进行断言 assert driver.find_element_by_id('logout_success_element').is_displayed() ``` 在上面的例子中,我们使用了`@pytest.fixture`装饰器来创建一个测试驱动程序实例。通过将`driver`作为参数传递给测试函数,我们可以在每个测试用例中共享同一个驱动程序实例。 然后,我们编写了两个测试函数`test_login`和`test_logout`,分别测试登录和退出功能。在每个测试函数中,我们使用Appium提供的API执行相应的操作,并使用Pytest提供的断言来验证测试结果。 最后,使用Pytest运行测试脚本即可进行自动化测试。 需要注意的是,上述示例代码只是一个简单的示例,实际项目中可能需要更复杂的操作和断言。同时,还可以结合其他的测试工具和框架,例如Allure报告、数据驱动等,来提升测试效果和维护性。 希望以上信息对你有帮助!如有更多问题,请继续提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值