欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 使用Pytest-Asyncio进行异步测试的实用指南之常见异步场景

使用Pytest-Asyncio进行异步测试的实用指南之常见异步场景

2025/6/18 22:35:33 来源:https://blog.csdn.net/lyy51/article/details/148704670  浏览:    关键词:使用Pytest-Asyncio进行异步测试的实用指南之常见异步场景

关注开源优测不迷路

大数据测试过程、策略及挑战

测试框架原理,构建成功的基石

在自动化测试工作之前,你应该知道的10条建议

在自动化测试中,重要的不是工具

异步(asynchronous,简称 async)技术允许程序高效执行任务(在等待某一任务时执行其他任务),这也被称为并发(concurrency)。

当涉及测试异步代码时,事情可能会变得有些棘手。

如何确保异步代码按预期运行?如何测试不同异步任务和函数的交互,同时避免陷入事件循环(event loop)和 await 语句的复杂性中?

这正是 Pytest Asyncio 发挥作用的地方。

pytest-asyncio 插件简化了事件循环的处理、异步 fixture 的管理,并架起了异步编程与全面测试之间的桥梁。

在本系列中,我们将深入探讨如何使用 pytest-asyncio 插件测试异步函数、编写异步 fixture,以及通过简单示例使用异步模拟(async mocking)测试外部服务。

什么是异步函数 —— 快速概览

互联网上充斥着关于异步的信息,因此我们在此不做过多细节展开。

需要明确的是:异步并非并行执行,而是计算资源的高效分配。

我们将在下文探讨实际案例,但请记住:当某个任务处于挂起(pending)或休眠(sleeping)状态时,系统会执行另一个任务。

例如,文件上传、数据库写入、I/O 操作或调用外部 API 等任务,由于网络或服务器开销而耗时。

系统会智能决定在此期间执行另一任务,从而节省时间和资源。

异步 —— 应用场景

既然你已对异步有了基本了解,或许会好奇它在实际中应用于哪些场景?

这是个好问题,其应用场景多种多样:

非阻塞 I/O(网络)

I/O 操作例如:

  • 文件 / 图像上传或下载

  • 本地磁盘或云存储的读写

  • 数据库读写

所有这些任务都存在网络或服务器开销(即执行速度取决于网络或服务器速度)。

因此,当程序等待响应时,它可以启动或完整执行另一任务(而非闲置)。

调用外部 API 或服务


与上述场景类似,调用外部服务可能因服务器响应速度和网络状况产生开销。

外部 API 调用耗时较长,会浪费宝贵的执行时间,因此良好的设计实践是让程序在等待时执行其他有用操作,而非单纯等待。

音频 / 图像处理与计算机视觉


如果程序需要进行图像、音频处理或计算机视觉来检测实体或转录文字,这些操作通常耗时。

编写优化的异步代码以便在此期间执行其他任务是更佳选择。

机器学习 / 模型训练


机器学习和模型训练耗时较长。

高性能模型通常基于数百万甚至数十亿参数进行训练 —— 例如,GPT-4 基于超过 1.7 万亿参数训练。

在模型训练期间,可能可以执行其他关键或非关键任务,如文件 / 图像处理、状态变更、轮询、数据库读写等。

服务器响应与聊天机器人


服务器响应和聊天机器人可能需要同时处理多个请求,且这些请求大多相互独立。

异步代码在这些场景中极为有用,可降低响应延迟。

数据 ETL 或 ELT 操作


数据同步或 ELT(提取、加载、转换)操作可能耗时,且通常可异步执行。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词