如何在 FastAPI Pytest 中断言预期的 HTTPExceptions?

时间:2021-03-28 14:58:44

标签: python pytest fastapi

我有一个简单的路由器,旨在抛出一个 HTTPException

@router.get('/404test')
async def test():
    raise HTTPException(HTTP_404_NOT_FOUND, "404 test!")

我想根据 FastaAPI docs 声明异常被抛出:

def test_test():
    response = client.get("/404test")
    assert response.status_code == 404

在评估断言之前抛出异常,将测试标记为失败:

>       raise HTTPException(HTTP_404_NOT_FOUND, "404 test!")
E       fastapi.exceptions.HTTPException: (404, '404 test!')

在我的测试中正确预测 HTTPExceptions 缺少什么?

1 个答案:

答案 0 :(得分:0)

也许您可以使用以下示例代码来做到这一点。

~/Desktop/fastapi_sample  $ cat service.py                                 
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.get("/wrong")
async def wrong_url():
    raise HTTPException(status_code=400, detail="404 test!")

~/Desktop/fastapi_sample $ cat test_service.py                            
from fastapi.testclient import TestClient
from fastapi_sample.service import app
client = TestClient(app)


def test_read_item_bad_token():
    response = client.get("/wrong")
    assert response.status_code == 400
    assert response.json() == {"detail": "404 test!"}%                                                                                                        
    
~/Desktop/fastapi_sample $ pytest                                         
==================================================================== test session starts ====================================
platform darwin -- Python 3.7.9, pytest-6.1.0, py-1.9.0, pluggy-0.13.1
rootdir: /Users/i869007/Desktop/workspace/SAP/cxai/fastapi_postgres_tutorial
collected 1 item

test_service.py .                                                                                                                                      [100%]

===================================================================== 1 passed in 0.78s ======================================