pytest-asyncio:协程异步测试案例

简介:pytest-asyncio是一个pytest插件。它便于测试使用异步库的代码。具体来说,pytest-asyncio提供了对作为测试函数的协同程序的支持。这允许用户在测试中等待代码。

历史攻略:

asyncio并发访问websocket

Python:协程 - 快速创建三步骤

Python:获取协程返回值的四种方式

Python:多进程,多线程,协程基础案例

Python:aiomultiprocess实现协程与多进程的强强联合

安装:

复制代码
pip install pytest-asyncio

使用案例:aysncio_demo.py

复制代码
# -*- coding: utf-8 -*-
# time: 2024/4/5 12:06
# file: asyncio_demo.py
# 公众号: 玩转测试开发

import asyncio
import datetime


async def do_somethings(user):
    # 1、定义协程函数
    print(f"{user} is do_somethings. the time is {datetime.datetime.now()}")
    await asyncio.sleep(0.1)
    return user + " is finish do_somethings."


async def do_another(user):
    print(f"{user} is do_another. the time is {datetime.datetime.now()}")
    await asyncio.sleep(0.2)
    return user + " is finish do_another."


async def do_others(user):
    print(f"{user} is do_others. the time is {datetime.datetime.now()}")
    return user + " is finish do_others."


if __name__ == '__main__':
    # 3、加入事件循环。
    tasks = []
    for i in range(3):
        tasks.append(do_somethings("tom"))
        tasks.append(do_another("ken"))
        tasks.append(do_others("lily"))

    asyncio.run(asyncio.wait(tasks))

test_demo.py

复制代码
# -*- coding: utf-8 -*-
# time: 2024/3/31 10:34
# file: test_demo.py
# 公众号: 玩转测试开发
import sys
import pytest
from lib.asyncio_demo import do_somethings, do_another, do_others
from logger import log


@pytest.mark.asyncio
async def test_do_somethings():
    user = "tom"
    res = await do_somethings(user)
    log.info(f"{res}")
    pytest.assume(user + " is finish do_somethings." in res)


@pytest.mark.asyncio
async def test_do_another():
    user = "ken"
    res = await do_another(user)
    log.info(f"{res}")
    pytest.assume(user + " is finish do_another." in res)


@pytest.mark.asyncio
async def test_do_others():
    user = "lily"
    res = await do_others(user)
    log.info(f"{res}")
    
    # 此次故意放一个错误试试。
    pytest.assume(user + " is finish do_others." not in res)

运行结果:

相关推荐
岁月宁静42 分钟前
LangChain + LangGraph 实战:构建生产级多模态 WorkflowAgent 的完整指南
人工智能·python·agent
爱丽_1 小时前
深入理解 Java Socket 编程与线程池:从阻塞 I/O 到高并发处理
java·开发语言
多敲代码防脱发2 小时前
为何引入Spring-cloud以及远程调用(RestTemplate)
java·开发语言
第二只羽毛2 小时前
主题爬虫采集主题新闻信息
大数据·爬虫·python·网络爬虫
plmm烟酒僧2 小时前
TensorRT 推理 YOLO Demo 分享 (Python)
开发语言·python·yolo·tensorrt·runtime·推理
天才测试猿2 小时前
Postman中变量的使用详解
自动化测试·软件测试·python·测试工具·职场和发展·接口测试·postman
sailing-data2 小时前
【SE】接口标准化
java·开发语言
无名3872 小时前
RTPEngine 官方自带的 perl 测试程序
开发语言·perl·通信
帕巴啦2 小时前
Arcgis计算面要素的面积、周长、宽度、长度及最大直径
python·arcgis
fruge2 小时前
接口 Mock 工具对比:Mock.js、Easy Mock、Apifox 的使用场景与配置
开发语言·javascript·ecmascript