首页 > 其他分享 >【APP自动化进阶】pytest+appium多设备并发

【APP自动化进阶】pytest+appium多设备并发

时间:2024-02-03 11:47:23浏览次数:23  
标签:appium obj 进阶 allure APP 用例 pytest port

并发编程基础

【Python进阶】并发编程方式

APP自动化并发项目实战

项目步骤

  1. 获取设备信息并根据设备数量开启n个进程
  2. appium服务处理
    pytest前置处理开启appium服务
    pytest后置处理关闭appium服务
  3. pytest进行用例执行,并输出报告数据
  4. 等待进程执行完毕
  5. 生成每个设备的allure报告
  6. 开启allure服务,并展示报告内容

项目代码

from multiprocessing import Process
import pytest
from tools.decorator import appium
from tools.manage_devices import ManageDevices
from tools.server import AllureServer, AppiumServer
from tools.unit import file_path, logger


@appium
def run_pytest(obj):
    print(obj)
    port = obj["port"]
    driver = str(obj)  # pytest只接受字符串
    TestCase = file_path("test_case", "test_login.py")  # 指定执行测试用例
    pytest.main(["-s",  # -s打印内容
                 "-q",  # -v输出详细用例执行信息; -q简化输出,只显示整体测试结果
                 # "-W", "ignore::DeprecationWarning",  # 过滤警告
                 "--devices", driver,  # 自定义参数
                 # TestCase,            # 用例文件夹或具体用例文件
                 # "-m", "smoke"        # 只执行标记用例
                 # "--reruns", "2",     # 用例失败重试
                 "--alluredir", f"reports/{port}_result", "--clean-alluredir",  # allure用例数据报告生成及路径和每次清理历史数据
                 # "--junit-xml", f"reports/{name}_result/result.xml",            # xml报告及生成路径
                 "--durations=0"  # 显示执行最慢的用例,n表示显示前几个(n=0表示所有)
                 ])


# @appium           # 进程调用函数无法使用装饰器,可以再后面方法使用
def process_devices(obj):
    run_pytest(obj)


def run_process():
    pool = ManageDevices().devices_pool()   # 获取设备信息列表
    device_port = []
    process = []
    if pool:
        for i in pool:
            device_port.append(i["port"])
            obj = Process(target=process_devices, args=(i,))   # 创建线程
            obj.start()
            process.append(obj)  # 加入线程池
        for t in process:
            t.join()
        logger.info("进程全部执行结束")

        # allure生成报表,并启动程序
        for port in device_port:
            create_path = f"./reports/{port}"
            html_path = f"./reports/{port}_html"
            # 创建html文件
            AllureServer.create_html(create_path)
            # 启动allure服务
            AllureServer.start_allure(port=int(port) + 1000, path=html_path)

        # # 30秒后关闭allure服务
        # time.sleep(30)
        # for port in device_port:
        #     AllureServer.stop_allure(port=int(port) + 1000)
    else:
        logger.info("未获取到设备信息")


if __name__ == '__main__':
    run_process()

标签:appium,obj,进阶,allure,APP,用例,pytest,port
From: https://www.cnblogs.com/upstudy/p/18004473

相关文章

  • 【Python进阶】并发编程方式
    并发编程方式有哪些?threading模块---线程asyncio模块---协程concurrent.futures模块---进程+线程(应用于异步调用)multiprocessing模块---进程进程、线程、协程?进程:运行起来的程序就是进程,是操作系统分配资源的最小单位。线程:线程是进程的组成部分,一个进程可以拥有多个线......
  • 短视频开发app,利用数据压缩加速大文件传输
    短视频开发app,利用数据压缩加速大文件传输当使用HTTP进行大文件传输时,我们可以考虑对大文件进行压缩。通常短视频开发app在发送请求时,都会携带accept和accept-*请求头信息,用于告诉服务器当前短视频开发app所支持的文件类型、支持的压缩格式列表和支持的语言。accept......
  • 【pytest进阶】pytest之hook函数
    什么是hook函数比如说你写了一个框架类的程序,你希望这个框架可以“被其他的代码注入”,即别人可以加入代码对你这个框架进行定制化,该如何做比较好?一种很常见的方式就是约定一个规则,框架初始化时会收集满足这个规则的所有代码(文件),然后把这些代码加入到框架中来,在执行时一并执行......
  • 【自动化基础】pytest详解及进阶使用
    pytest介绍及基本使用【自动化测试框架】pytest和unitttest你知道多少?区别在哪?该用哪个?pytest原理参数化@pytest.mark.parametrize(argnames,argvalues,indirect=False,ids=None,scope=None))参数说明argnames必传,参数名,以逗号分隔的字符串,表示一个或多个......
  • 外卖跑腿app开发:重塑都市生活的便捷与效率
    随着现代生活节奏的加快,人们对外出就餐和日常用品的需求日益增长,外卖和跑腿服务应运而生,逐渐成为日常生活中不可或缺的一部分。而这种需求的满足在很大程度上得益于外卖跑腿app的开发与应用。本文将对外卖跑腿app的发展历程、市场需求、功能特点、以及未来趋势进行深入探讨。一、外......
  • docker命令介绍-进阶学习
    启动停止docker相关命令systemctlstartdockersystemctlstatusdockersystemctlstopdockersystemctlenabledockersystemctlrestartdocker查看docke信息dockerinfodocker-version列出所有命令docker--hlep镜像相关命令查看本地所有镜像dockerimages搜索镜像:线......
  • uniapp sqlite方法封装
    vardbName='xxx'//数据库名称vardbPath='_doc/xxx.db'//数据库地址,推荐以下划线为开头_doc/xxx.db//判断数据库是否打开constisOpen=(plus:any)=>{//数据库打开了就返回true,否则返回falsevaropen=plus.sqlite.isOpenDatabase({name:......
  • 依赖注入之IConfiguration 访问appSetting.json
    (1)创建NET6Webapi(2)appsettings.json{"Logging":{"LogLevel":{"Default":"Information","Microsoft.AspNetCore":"Warning"}},"AllowedHosts":"*&q......
  • 应用--WebApplication
    应用--Program中的WebApplication在6.0,微软团队对于NetCore做了很大的改变,其中有一个改变就是推出了新的托管模型--最小托管模型,使用该模型可以创建最小的web应用。(最小webapi请查看官网)需要掌握:什么是最小托管模型?以及他的作用什么是WebApplication和WebApplicationBuilde......
  • uniapp在H5中排除底部和顶部导航栏
    在app和小程序中,uniapp的100vh不会将底部和顶部导航栏的高度放进去,所以100vh就是整个中间内容的高度,但是在H5中100vh是把顶部和底部导航栏一起放进去的高度,所以为了要在顶部和顶部导航栏排除在H5应用中,需要在内容的高度里设置一下,减去顶部和底部的导航栏高度,为此在uniapp中使用了-......