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

FastAPI单元测试返回422状态码,寻求排查解决建议

解决FastAPI测试返回422状态码的问题

核心原因

422状态码表示请求格式正确但数据语义验证失败,你的问题出在日期格式不匹配:

  • EventCreate类中date字段定义为datetime类型,FastAPI默认只识别ISO 8601格式的日期字符串(如2023-06-15或2023-06-15T00:00:00)。
  • 你测试代码里用my_date.strftime('%m-%d-%Y')生成了06-15-2023这种格式,FastAPI无法自动将其解析为datetime对象,导致验证失败。

解决方法

方法1:修改测试代码的日期格式

直接生成FastAPI能识别的ISO格式日期字符串,修改测试代码如下:

def test_create_event(self):
    my_date = datetime.date(2023, 6, 15)
    data = {
        'title': 'Winter Cooking', 
        'host': 'Steven',
        'ingredients': ['Apples','Pumpkin','Pecans','Oats'], 
        'date': my_date.isoformat(),  # 生成ISO格式:2023-06-15
        'participants': ['Steven','Kyle'], 
        'submitter_id': 1
    }
    response = requests.post(self.url + '/events/', json=data)
    print("response=" + str(response.status_code))
    self.assertEqual(response.status_code, 201)

也可以直接写字符串'2023-06-15'或者带时间的'2023-06-15T12:00:00',都能被正确解析。

方法2:自定义日期格式解析(如果需要支持MM-DD-YYYY)

如果你的业务场景必须接受MM-DD-YYYY格式的日期,可以给EventCreate的date字段添加自定义验证器,用Pydantic的@field_validator来处理:

from pydantic import BaseModel, field_validator
from datetime import datetime
from typing import List

class EventCreate(BaseModel):
    title: str
    host: str
    ingredients: List[str] = []
    date: datetime
    participants: List[str] = []
    submitter_id: int

    @field_validator('date', mode='before')
    def parse_date(cls, value):
        if isinstance(value, str):
            # 尝试解析MM-DD-YYYY格式
            try:
                return datetime.strptime(value, '%m-%d-%Y')
            except ValueError:
                # 如果解析失败,保留原格式让默认验证器处理(比如ISO格式)
                pass
        return value

这样修改后,你的测试代码里的'%m-%d-%Y'格式日期就能被正确解析,同时也兼容默认的ISO格式。

额外检查点

确认你的测试代码中:

  • 没有再传入id字段(因为EventCreate不需要,id是后端通过counter生成的)
  • 已包含submitter_id字段(你已经加上了,这部分没问题)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:17:06