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

Async pytest中FastAPI AsyncClient触发AttributeError问题排查

问题原因与解决方案

错误根源

你遇到的AttributeError: 'async_generator' object has no attribute 'get',本质是异步fixture没有正确返回AsyncClient实例,导致测试函数拿到的是异步生成器对象而非客户端实例。

核心问题点

你的异步fixture大概率存在以下写法错误:

  • 没有在async with上下文管理器中通过yield返回AsyncClient实例
  • 测试函数未添加@pytest.mark.asyncio装饰器,无法正确识别异步逻辑

正确写法示例

1. 正确定义异步fixture

在conftest.py或测试文件中编写fixture:

import pytest
from httpx import AsyncClient
from main import app  # 导入你的FastAPI应用实例

@pytest.fixture(scope="function")
async def async_client():
    # 通过async with管理AsyncClient生命周期,yield将实例传给测试函数
    async with AsyncClient(app=app, base_url="http://testserver") as client:
        yield client

2. 正确编写测试函数

测试函数必须添加@pytest.mark.asyncio装饰器,才能触发异步fixture执行:

@pytest.mark.asyncio
async def test_sample_endpoint(async_client):
    # 此时async_client是真正的AsyncClient实例,可正常调用get/post等方法
    response = await async_client.get("/your-endpoint")
    assert response.status_code == 200

关键说明

  • 直接在测试函数内编写逻辑正常,是因为你在async with块内直接拿到了客户端实例,而fixture如果缺少yield,会被pytest识别为异步生成器而非返回实例的fixture。
  • 使用async with + yield可以自动管理AsyncClient的生命周期,避免资源泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:53:05