32 使用pytest进行FastAPI测试

在上一篇文章中,我们探讨了如何编写单元测试,以确保我们的FastAPI应用能够按预期的方式运行。在本篇文章中,我们将进一步深入,研究如何使用pytest进行测试。pytest是一个强大的测试框架,能够方便地编写简单和复杂的测试。

安装pytest

在开始之前,我们需要确保安装了pytesthttpx两个依赖。httpx是一个用于发送HTTP请求的库,我们将用它来测试FastAPI应用。

你可以通过以下命令安装这两个库:

1
pip install pytest httpx

创建测试文件

在FastAPI项目的根目录下,通常会创建一个tests文件夹来存放测试文件。下面是一个测试文件的目录结构示例:

1
2
3
4
5
/your-fastapi-project
├── app
│ └── main.py
└── tests
└── test_main.py

test_main.py中,我们将编写我们的第一个测试。

编写测试

在FastAPI中,我们可以使用TestClient来自fastapi.testclient进行集成测试。以下是一个简单的示例,展示如何使用pytestFastAPI测试框架。

假设我们的main.py文件中有一个简单的API端点:

1
2
3
4
5
6
7
8
9
10
11
12
# app/main.py
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
return {"Hello": "World"}

@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}

我们将为这个API编写测试。

test_main.py中,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# tests/test_main.py
import pytest
from httpx import AsyncClient
from fastapi import FastAPI
from app.main import app # 导入FastAPI应用实例

@pytest.mark.asyncio
async def test_read_root():
async with AsyncClient(app=app, base_url="http://test") as ac:
response = await ac.get("/")
assert response.status_code == 200
assert response.json() == {"Hello": "World"}

@pytest.mark.asyncio
async def test_read_item():
async with AsyncClient(app=app, base_url="http://test") as ac:
response = await ac.get("/items/5?q=somequery")
assert response.status_code == 200
assert response.json() == {"item_id": 5, "q": "somequery"}

解释测试代码

  1. 使用pytest.mark.asyncio: 由于我们的FastAPI端点是异步的,我们需要使用@pytest.mark.asyncio修饰器来标记测试为异步测试。

  2. 使用AsyncClient: 我们用AsyncClient来发起HTTP请求,这个客户端会在事件循环中运行,非常适合测试异步应用。

  3. 使用assert语句: 我们使用assert来验证返回的状态码和响应内容是否符合预期。

运行测试

要运行测试,只需在项目的根目录执行以下命令:

1
pytest

这将会自动发现所有以test_开头的函数并运行它们。

测试覆盖率

在项目中,查看测试覆盖率可以帮助我们了解哪些代码已经得到测试。可以通过安装pytest-cov来实现。

安装命令:

1
pip install pytest-cov

然后,你可以使用以下命令在运行测试时查看测试覆盖率:

1
pytest --cov=app tests/

这条命令将显示在app文件夹下代码的测试覆盖率。

总结

在本篇文章中,我们学习了如何使用pytesthttpx来测试FastAPI应用。我们编写了基本的集成测试,以验证API端点的行为。测试是保证代码稳定性和可维护性的重要手段,希望你能在你的FastAPI项目中积极使用测试。

在下一篇文章中,我们将深入探讨如何使用数据库进行测试,确保我们的数据交互部分也是稳定和可靠的。希望你继续关注接下来的内容。

32 使用pytest进行FastAPI测试

https://zglg.work/python-fastapi-zero/32/

作者

AI免费学习网(郭震)

发布于

2024-08-17

更新于

2024-08-18

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论