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

FastAPI异步接口大数据集pytest测试慢,求配置验证与提速方案

FastAPI大规模数据集测试提速方案

1. 复用AsyncClient连接

当前的async_app_client fixture是函数级的,每次测试都会新建并销毁客户端连接,产生大量额外开销。改成会话级fixture,整个测试过程只创建一次客户端:

@pytest_asyncio.fixture(scope="session")
async def async_app_client():
    async with AsyncClient(app=app, base_url='http://localhost') as client:
        yield client

2. 批量异步请求,减少任务调度开销

逐个发起请求会频繁触发异步任务调度,速度很慢。改用asyncio.gather批量执行请求,同时先对term去重,解决重复值导致的结果不一致问题:

import asyncio

@pytest.mark.asyncio
async def test_on_terms_batch(async_app_client):
    # 去重处理,减少无效重复请求
    unique_terms = dataset['value'].unique()
    # 分批次避免一次性请求过多压垮接口
    batch_size = 50
    for batch_start in range(0, len(unique_terms), batch_size):
        current_batch = unique_terms[batch_start:batch_start+batch_size]
        # 批量创建请求任务
        tasks = [async_app_client.get(f"/endpoint?text={term}") for term in current_batch]
        # 并发执行所有请求
        responses = await asyncio.gather(*tasks)
        # 批量校验响应状态
        for term, response in zip(current_batch, responses):
            assert response.status_code == 200, f"{term} 返回非200状态码"

3. 优化数据集加载

针对大规模数据集,加载时可做如下优化:

  • 只加载需要的列:pd.read_csv("data.csv", usecols=["value"])
  • 指定列类型避免自动类型推断:pd.read_csv("data.csv", dtype={"value": str}, low_memory=False)

4. 简化pytest运行参数

运行测试时添加以下参数减少额外开销:

  • --tb=short:缩短错误回溯信息,减少报告生成耗时
  • --no-cache:禁用pytest缓存,避免不必要的IO操作
  • -q:静默模式,减少控制台输出的耗时

5. 优化接口测试环境

如果接口本身处理耗时,测试时可临时简化依赖:

  • 用内存数据库替代真实数据库
  • 禁用非必要中间件(如日志、认证组件)
  • Mock掉接口中的耗时业务逻辑,仅测试路由和响应格式正确性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:05:19