pytest并发(xdist)模块下的async异步

在pytest-xdist下配合异步能实现对服务的自动化压测
因为在项目里,需要并发去执行测试用例,但是xdist在windows只能使用多进程,并且资源消耗比较大,本机20g内存,i5 8500cpu,在可用10g内存下,最多只能开十个左右的进程,就会内存溢出然后崩溃,所以在需要对服务进行自动化压测时,采用多进程是不可取的,而后又改为跑一个进程,在该进程下使用threading多线程,这样就可以极大节省系统资源,但是多线程也会加载整个目标函数,在同时执行自动化用例测试和压测(pytest多开)的情况下也容易出现内存溢出,所以直接将多线程部分改为异步执行,这样压测时,想开多少开多少(理想情况),因为压测需要执行指定时长,所以异步也可以单另开一个线程,在该线程下执行,下面贴上异步封装的代码:

封装异步

#这里直接对异步进行了二次封装,方便调用
import json
import asyncio
from aiohttp import ClientSession, ClientTimeout


def get_newloop():
    return asyncio.new_event_loop()


async def tasks(datas, logger, message):
    tasks = [asyncio.ensure_future(send_request(data, logger, message)) for data in datas]
    return await asyncio.gather(*tasks)


async def send_request(data, logger, message):
    try:
        async with ClientSession() as conn:
            async with conn.request(data['method'],data['url'],data=json.dumps(data['data'] if data.get('data') else None),
                                 timeout=ClientTimeout(total=8)) as res:
                return res.status
    except:
        logger.error(message)


def main(datas, logger, message,loop):
    asyncio.set_event_loop(loop)
    return loop.run_until_complete(tasks(datas, logger, message))
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pytest-xdist是pytest的一个插件,它可以用于在多个进程或者多个机器上并行执行pytest测试用例,从而加速测试运行速度。以下是pytest-xdist的具体使用方法: 1. 安装pytest-xdist插件:可以使用pip命令进行安装,命令如下: ``` pip install pytest-xdist ``` 2. 运行pytest测试用例:在运行pytest命令时,需要添加`-n`选项来指定要使用的进程或者机器数量,例如: ``` pytest -n 2 # 使用2个进程并行执行测试用例 ``` 3. 设置运行模式:pytest-xdist支持多种运行模式,包括load, loadscope, loadfile, loadfileglob和no. - load模式:在所有进程或机器上加载测试用例集,然后在每个进程或机器上执行它们。 - loadscope模式:在所有进程或机器上加载指定作用域的测试用例,然后在每个进程或机器上执行它们。 - loadfile模式:在所有进程或机器上加载指定的测试文件,然后在每个进程或机器上执行它们。 - loadfileglob模式:在所有进程或机器上加载符合指定glob表达式的测试文件,然后在每个进程或机器上执行它们。 - no模式:不使用xdist插件,单进程执行测试用例。 可以使用`-n`选项后面加上一个模式名称来指定运行模式,例如: ``` pytest -n 2 --dist=loadfile # 使用2个进程并行执行指定的测试文件 ``` 4. 设置分布式测试环境:如果要在多个机器上执行pytest测试用例,需要先设置好分布式测试环境。可以使用`-n`选项后面加上一个地址列表来指定分布式测试环境,例如: ``` pytest -n 2 --dist=load --tx tcp://192.168.1.10:8888 --tx tcp://192.168.1.11:8888 # 在两台机器上执行测试用例 ``` 其中,`--tx`选项后面跟的是一个TCP地址,可以是IP地址或者域名和端口号,用于指定要连接的机器和端口号。 5. 其他选项:除了上述选项外,pytest-xdist还支持其他选项,例如`--boxed`选项可以在每个进程或机器上使用独立的虚拟环境,`--max-worker-restart`选项可以指定最大重启次数等。 以上就是pytest-xdist的具体使用方法,通过并行执行测试用例,可以大大提高测试运行速度,特别是对于测试用例较多、运行时间较长的情况,效果更加明显。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值