【附源码】pytest多并发实践

本文介绍了一个使用Python编写的自动化测试脚本,通过ProcessPoolExecutor并行启动Appium服务,针对不同设备执行用例,同时利用pytest和allure生成详细的测试报告。通过`kyb_caps.yaml`配置文件,脚本灵活地处理Android和Android 11设备的测试需求。

目录层级结构图

在这里插入图片描述

主执行文件(runner.py)

from concurrent.futures.process import ProcessPoolExecutor
import os
import time
import pytest
import yaml
from meet.public import *
from meet.concurrent_startup import *

devices_list = ['Your device uid', 'Your device uid']


def runnerPool():
    with open('kyb_caps.yaml', 'r', encoding="utf-8")as file:
        data = yaml.load(file, Loader=yaml.FullLoader)
    print(data)
    devices_Pool = data
    with ProcessPoolExecutor(len(devices_Pool)) as pool:
        pool.map(runPytest, devices_Pool)


def runPytest(device):
    print(f"cmdopt is {device}")
    report = f"report-{device['deviceName']}".split(":", 1)[0]
    report_dir = mkdir_dir(report)
    now_time = time.strftime("%H-%M-%S", time.localtime())
    print(f"pool run device is {device['deviceName']}")
    pytest.main(["-s", "./TestCases/", f"--cmdopt={device}", "--alluredir", f"./{report_dir}/{now_time}/xml"])
    time.sleep(1)
    os.system(f"allure generate ./{report_dir}/{now_time}/xml -o ./{report_dir}/{now_time}/html")


if __name__ == '__main__':
    """
    获取服务的端口
    并发启动appium的服务
    多设备启动执行用例
    release端口
    """
    ports = []
    appium_start_sync()
    runnerPool()
    for i in range(len(devices_list)):
        port_num = 4723 + 2 * i
        ports.append(port_num)
    print(ports)
    for t in ports:
        release_port(t)

公有函数(public.py)

import time


def mkdir(path):
    """创建目录函数"""
    import os
    path = path.strip()   # 去除首位空格
    path = path.rstrip("\\")  # 去除尾部 \ 符号
    is_exists = os.path.exists(path)  # 判断路径是否存在
    
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值