• 移动端自动化openatx开源项目介绍,pytest并发测试框架结合


    开头

    相信不少用过appium的同学,对于使用appium的一些体会与感受是否与我相似

    1. appium启动服务和app程序非常慢

    2. appium多线程并发需要启动多个服务

    3. appium必须连接usb线进行自动化测试

    所以在Testerhome这个共享氛围很好,也有不少大牛的论坛上爬文章,发现了openatx这个开源项目,直接截图github的README介绍一下项目情况

    github地址:https://github.com/openatx

    有兴趣的同学可以去为开源项目添砖加瓦

    总结一下atx:

    1. 快速启动和操作手机端

    2. 基于atx-agent的http协议,通过接口调用手机上的二进制atx程序去进行手机操作,实现WiFi无线连接

    3. codeskyblue还搭建了atx-server集群管理,目前在用Python重写atxserver2,将支持跨网域连接设备和一些结构优化

    4. 因无需启动多appium服务,只是通过http接口发送命令,支持大量终端同步并发操作

    ATX介绍

    atx架构图

    安装

    适用范围
    Android手机 4.3+(sdk 18)

    命令行CMD或Pycharm自己的venv环境中 

    pip install -U --pre uiautomator2

    然后等待安装成功

    初始化设备

    手机连接上usb,运行初始化命令

    python -m uiautomator2 init

    如有atx-server设备集群管理,则可

    python -m uiautomator2 init --server ip:port

    ip和port为atx-server相应ip和端口

    等待初始化成功即可。

    基本操作

    连接设备和操作

    # coding: utf-8
    import uiautomator2 as u2
    
    u = u2.connect_usb()
    或
    u = u2.connect(ip)
    driver = u.session("cn.vsx.vc")

    driver(className="android.widget.Button", resourceId="cn.vsx.vc:id/ptt").long_click(duration=2, timeout=10)
    assert driver(resourceId="cn.vsx.vc:id/ptt", text="按住 说话").exists

    剩下的控制操作可参考官方文档: https://github.com/openatx/uiautomator2

    结合Pytest单元测试框架与并发

    思路:

    之前的文章介绍过pytest单元测试框架如何进行并发,此处可以重复一下:

    通过CMD命令启动pytest的时候,代入并发所需要的参数即可:

    pytest.main(["../TestCases/", f"--cmdopt={Phone['ip']}", "--alluredir"])

    在测试用例目录下的conftest加入cmdopt参数代入方法

    def pytest_addoption(parser):  # 定义命令行传参参数
        parser.addoption("--cmdopt", action="store", default="device", help="None")
    
    
    @pytest.fixture(scope="session")  # 命令行参数传递给pytest
    def cmdopt(request):
        return request.config.getoption("--cmdopt")
    
    
    @pytest.fixture(scope="session")  # 初始化开始连接设备
    def connectDevice(cmdopt):
        address = cmdopt
        d = u2.connect(addr=address)
        d.set_fastinput_ime(True)
        driver = d.session("cn.vsx.vc")
        yield driver
        print("driver finished")
        driver.close()

    然后通过concurrent.future的多线程ProcessPoolExcutor 去并发启动包含pytest.main的方法

    def runnerPool(deviceIP_list):  # 启动多进程运行测试
        with ProcessPoolExecutor(len(getDevices())) as pool:
            pool.map(runPytest, deviceIP_list)

    自此,整体的设计思路完成。 pytest的框架功能以及插件非常丰富,可以自己查找相关资料使用

    如果有需要可仔细查看完整代码

    地址:https://github.com/Grandlulu/atx-pytest

  • 相关阅读:
    三层架构(我了解并详细分析)
    define a class for a linked list and write a method to delete the nth node.
    无阻塞情况connect生产EINPROGRESS错
    辛星和你解读PHP递归
    Android -- Looper.prepare()和Looper.loop() —深度版
    Canvas翻转方法
    BP神经网络的基本原理
    muduo网络图书馆评测
    HBASE
    MySQL
  • 原文地址:https://www.cnblogs.com/grandlulu/p/10478300.html
Copyright © 2020-2023  润新知