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

FastAPI文件上传接口pytest测试未触发预期HTTPException问题排查

测试中的错误及修复方案

你的测试存在两个核心问题:

1. 错误使用pytest.raises捕获异常

FastAPI的TestClient发送请求时,后端抛出的HTTPException会被框架自动转换为HTTP响应对象返回,而非直接在客户端代码中抛出异常。因此用pytest.raises(HTTPException)无法捕获到预期异常,这是测试失败的主要原因。

2. 文件参数名不匹配

接口定义中接收文件的参数名为upload_file,但测试代码里用'file'作为files字典的键。FastAPI会根据参数名匹配上传文件,这会导致后端无法正确接收文件,触发非预期的422错误,而非你要验证的格式检查逻辑。


修复后的测试代码

import pytest
from fastapi.testclient import TestClient
from io import BytesIO

def test_upload_file(client: TestClient):
    # 用BytesIO创建临时测试内容,避免依赖本地真实文件
    test_content = b"dummy file content"
    # 参数名与接口定义的upload_file保持一致
    files = {'upload_file': ('test_file.docx', BytesIO(test_content))}
    
    # 发送请求并获取响应对象
    response = client.post('/api/v1/upload-file/', files=files)
    
    # 验证响应状态码和错误详情
    assert response.status_code == 422
    assert response.json()['detail'] == 'Only .txt file allowed'

额外优化建议

  • 测试S3上传逻辑时,建议用mock替代真实的S3客户端,避免测试依赖外部云服务,提升测试稳定性和速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:54:28