使用pytest测试FastAPI的GET接口时如何给client.get正确传递参数
问题根源
- GET请求不会携带JSON请求体,你使用
client.get的json参数传值是错误用法。FastAPI中GET路由下未指定位置的参数默认是查询参数,需要通过URL查询串传递,对应TestClient的params传参字段。 - 测试代码中的断言语法错误,单等号
=是赋值操作,判断相等需要用双等号==。 - 你提供的
main.py代码中@app.get('/purpose')行末尾多了多余的冒号,属于Python语法错误,需要先删除。
正确修改方案
1. 修正test.py测试代码
将json参数替换为params传递查询参数,同时修正断言语法:
client = TestClient(app) def test_purpose(): # params参数会自动将字典内容拼接为URL查询串 response = client.get("/purpose", params={"name":"test_name", "date":"01.01.2020"}) assert response.status_code == 200
2. 可选:优化main.py参数声明(更规范)
给参数增加类型标注后,FastAPI会自动完成参数校验和类型转换,降低出错概率:
from fastapi import FastAPI from datetime import date app = FastAPI() # 移除原代码多余的末尾冒号 @app.get('/purpose') async def read_purpose(name: str, date: date): """some logic""" return {'ok':'ok'}
如果使用date类型标注,建议日期传值使用YYYY-MM-DD格式(例如2020-01-01),FastAPI会自动将字符串解析为日期对象。
内容的提问来源于stack exchange,提问作者dmitriy_one
相关产品推荐
相关产品推荐

