当前位置:   article > 正文

pytest多线程与多设备并发appium_pytest,并发执行同一个函数

pytest,并发执行同一个函数

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

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

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

  • 确定设备个数
  • 每个设备对应一个 appium server 的端口号,并启动 appium
  • 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中的列表。

实现的部分代码为:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

"""

@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的报错。

实现的部分代码:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/649572
推荐阅读
相关标签
  

闽ICP备14008679号