0

0

Python 异步代码的测试策略

舞夢輝影

舞夢輝影

发布时间:2026-02-14 15:22:03

|

844人浏览过

|

来源于php中文网

原创

应使用适配异步模型的测试策略:一、pytest-asyncio插件自动管理事件循环;二、手动控制asyncio事件循环;三、unittest.isolatedasynciotestcase类;四、asyncmock模拟异步依赖;五、httpx与aresponses测试异步http。

python 异步代码的测试策略

如果您编写了 Python 异步函数(如使用 async def 定义的协程),但测试时出现挂起、超时或事件循环未正确管理等问题,则可能是由于测试框架未适配异步执行模型。以下是针对 Python 异步代码的多种测试策略:

一、使用 pytest-asyncio 插件运行协程测试

pytest-asyncio 提供了对 async/await 语法的原生支持,能自动管理事件循环并允许直接在测试函数中使用 await 表达式。

1、通过 pip 安装插件:pip install pytest-asyncio

2、在测试文件或 conftest.py 中添加配置标记:pytest_plugins = "pytest_asyncio"

立即学习Python免费学习笔记(深入)”;

3、将测试函数声明为异步,并使用 @pytest.mark.asyncio 装饰器:async def test_fetch_data(): ...

4、在函数体内直接 await 被测异步函数,无需手动创建或关闭事件循环。

二、手动管理 asyncio 事件循环进行单元测试

在不依赖第三方插件的情况下,可通过显式获取、运行和关闭事件循环来控制异步执行流程,适用于需要精确控制生命周期的场景。

1、在测试方法开头调用 asyncio.get_event_loop() 获取当前事件循环实例。

2、使用 loop.run_until_complete() 执行被测协程并获取返回值。

3、若需重置循环状态,调用 loop.close() 并在后续测试前重新创建新循环。

4、注意在 Python 3.12+ 中,get_event_loop() 已弃用,应改用 asyncio.new_event_loop() 并显式设置。

三、使用 unittest 的 AsyncTestCase 类

Python 3.8+ 内置的 unittest 框架提供了 AsyncTestCase 子类,专用于编写异步测试用例,其 setUp 和 tearDown 方法也支持异步定义。

1、继承 unittest.IsolatedAsyncioTestCase(推荐)或 unittest.AsyncTestCase(旧版别名)。

Windsurf
Windsurf

Codeium团队打造的AI编程助手

下载

2、将测试方法定义为 async def test_xxx(self): 形式。

3、在方法内直接 await 被测协程及异步断言逻辑。

4、setUpAsync 和 tearDownAsync 方法可选定义,用于异步前置/后置操作。

四、模拟异步依赖以隔离测试边界

当异步函数依赖外部服务(如 HTTP 请求、数据库查询)时,需替换真实协程为可控的模拟对象,避免网络延迟与状态干扰。

1、使用 unittest.mock.AsyncMock 替代普通 Mock,使其支持 await 调用。

2、将 AsyncMock 实例赋值给被测对象的属性或作为参数传入,例如:mock_client.get = AsyncMock(return_value=response)

3、在测试中 await 调用该模拟方法,并验证调用次数与参数:mock_client.get.assert_awaited_once_with("https://api.example.com")

4、若需返回异常,设置 side_effect 为一个 Exception 实例或可 await 的异常抛出协程。

五、使用 httpx 或 aresponses 进行异步 HTTP 接口测试

对于涉及 HTTP 客户端调用的异步函数,需确保测试环境能拦截真实请求并返回预设响应,同时保持异步行为一致。

1、安装 httpx(支持异步客户端)和 aresponses(异步响应模拟库)。

2、在测试中创建 aresponses.Responses() 实例,并使用 add() 注册匹配规则与响应体。

3、使用 httpx.AsyncClient() 发起请求,确保所有调用均经由 aresponses 拦截。

4、验证响应内容与状态码,确认异步请求路径未触发实际网络 I/O。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pip安装使用方法
pip安装使用方法

安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。

348

2023.10.09

更新pip版本
更新pip版本

更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。

424

2024.12.20

pip设置清华源
pip设置清华源

设置方法:1、打开终端或命令提示符窗口;2、运行“touch ~/.pip/pip.conf”命令创建一个名为pip的配置文件;3、打开pip.conf文件,然后添加“[global];index-url = https://pypi.tuna.tsinghua.edu.cn/simple”内容,这将把pip的镜像源设置为清华大学的镜像源;4、保存并关闭文件即可。

784

2024.12.23

python升级pip
python升级pip

本专题整合了python升级pip相关教程,阅读下面的文章了解更多详细内容。

356

2025.07.23

pip安装使用方法
pip安装使用方法

安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。

348

2023.10.09

更新pip版本
更新pip版本

更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。

424

2024.12.20

pip设置清华源
pip设置清华源

设置方法:1、打开终端或命令提示符窗口;2、运行“touch ~/.pip/pip.conf”命令创建一个名为pip的配置文件;3、打开pip.conf文件,然后添加“[global];index-url = https://pypi.tuna.tsinghua.edu.cn/simple”内容,这将把pip的镜像源设置为清华大学的镜像源;4、保存并关闭文件即可。

784

2024.12.23

python升级pip
python升级pip

本专题整合了python升级pip相关教程,阅读下面的文章了解更多详细内容。

356

2025.07.23

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

23

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号