使用 FastApi 测试上传多个文件

Ali*_*nte 1 pytest python-3.x fastapi

我正在尝试测试将文件上传到 FastApi,但我不断收到 422 验证错误。文件上传在OpenApi接口下可以正常上传,但在下面的测试中不行。

路由器:

@router.post("/files")
def file_contents(files: List[UploadFile]):
    return someprocessing(files)
Run Code Online (Sandbox Code Playgroud)

测试(使用TestClientFastApi):

response = client.post(
    url="/files",
    files={"files": ("file.xlsx", open("./test_files/file.xlsx", "rb"))},
    headers={**auth_headers, **{"Content-Type": "multipart/form-data"}},
)
Run Code Online (Sandbox Code Playgroud)

错误:

{"detail":[{"loc":["body"],"msg":"value is not a valid dict","type":"type_error.dict"}]}
Run Code Online (Sandbox Code Playgroud)

更新:很好,我正在将文件发送到不同的网址...

fun*_*man 5

我想这里的问题是传递的内容类型,这个例子有效:

from typing import List

from fastapi import FastAPI, UploadFile

app = FastAPI()


@app.post("/files")
def file_contents(files: List[UploadFile]):
    return {"filenames": [file.filename for file in files]}
Run Code Online (Sandbox Code Playgroud)

测试:

from fastapi.testclient import TestClient

from fast_example import app

client = TestClient(app)
files = [('files', open('so.py', 'rb')), ('files', open('main.py', 'rb'))]
response = client.post(
    url="/files",
    files=files
)

print(response.json())
# {'filenames': ['so.py', 'main.py']}
Run Code Online (Sandbox Code Playgroud)