背景->我目前的测试场景中存在 异步接口,需要轮训状态去获取最终结果,符合结果,才能校验测试数据。同时我的自动化,都是同步接口偏多。
我基于 pytest 异步断言的逻辑实现,发现标记@pytest.mark.asyncio 的用例,仍然是阻塞进程,导致其他用例无法执行的。
预期->在同一进程内,实现并发运行,多个测试用例。在异步用例执行的同时,同步的测试用例能正常执行。

进程内实现并发测试,基于pytest框架
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 阿里嘎多学长 2025-04-25 15:01关注
阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
进程内实现并发测试,基于pytest框架
你想要实现进程内并发测试,以便在异步接口中轮训状态获取最终结果,然后校验测试数据。同时,你基于 pytest 框架,使用
@pytest.mark.asyncio
标记异步断言逻辑。解决方案:
- 使用
pytest-asyncio
插件,它提供了对 asyncio 的支持,可以在测试中使用异步函数。 - 在测试函数中使用
asyncio.gather
函数来并发执行异步函数。 - 使用
pytest.mark.asyncio
标记异步断言逻辑,以便 pytest 可以正确地处理异步测试。
示例代码:
import asyncio import pytest @pytest.mark.asyncio async def test_concurrent_api(): tasks = [] for i in range(5): task = asyncio.create_task(my_async_api(i)) tasks.append(task) results = await asyncio.gather(*tasks) assert all(result == expected_result for result, expected_result in zip(results, [1, 2, 3, 4, 5]))
在上面的示例代码中,我们使用
asyncio.create_task
创建了 5 个异步任务,然后使用asyncio.gather
函数来并发执行这些任务。最后,我们使用assert
语句来校验测试结果。重要提示
- 在使用
pytest-asyncio
插件时,需要在pytest.ini
文件中添加以下配置:
[pytest] addopts = --asyncio-mode=strict
- 在使用
asyncio.gather
函数时,需要确保所有异步任务都已经完成,否则可能会导致测试失败。
希望这个解决方案能够帮助你实现进程内并发测试!
解决 无用评论 打赏 举报 - 使用