You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pytest中定义异步fixture并用于异步测试?代码执行失败

解决pytest异步fixture的调用问题

你猜的完全没错!问题确实出在pytest默认不会自动await异步fixture上——直接调用的话,你拿到的只是一个协程对象,根本不是fixture实际要返回的api_client和x_id,这自然会导致测试执行失败。

要解决这个问题,你需要借助pytest-asyncio插件来让pytest支持异步fixture和异步测试,具体步骤如下:

1. 安装pytest-asyncio插件

首先通过pip安装这个必要的插件:

pip install pytest-asyncio

2. 修改异步fixture的装饰器

把普通的@pytest.fixture替换成pytest-asyncio提供的@pytest_asyncio.fixture,这样pytest就会自动处理fixture中的异步逻辑,帮你完成await操作:

import pytest_asyncio
# 假设你已经导入了api_client、add_x、web这些依赖

@pytest_asyncio.fixture
async def create_x(api_client):
    x_id = await add_x(api_client)
    return api_client, x_id

async def test_app(create_x, auth):
    api_client, x_id = create_x  # 现在pytest会自动await异步fixture,拿到实际返回值
    resp = await api_client.get(f'my_res/{x_id}', headers=auth)
    assert resp.status == web.HTTPOk.status_code

额外注意事项

  • 确保你的异步测试函数是用async def定义的,pytest-asyncio会自动创建事件循环来运行这些测试
  • 如果你的api_client本身也是异步fixture,同样需要用@pytest_asyncio.fixture装饰它
  • 如果插件没有自动启用,可以在项目根目录的pytest.ini中添加配置:
    [pytest]
    addopts = -p pytest_asyncio
    

内容的提问来源于stack exchange,提问作者Pynchia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:19:51