FastAPI 应用程序需要经过测试,以确保其端点能够返回正确的响应并按预期运行。在 Python 中,我们可以使用 TestClient 对 FastAPI API 进行自动化测试,也可以使用 requests 库进行手动测试或集成测试。
使用 TestClient
TestClient 是 FastAPI 提供的一个基于 HTTPX 的测试工具。它允许我们在不运行服务器的情况下测试 API 端点,这使其成为单元测试和自动化测试的理想选择。以下是基本语法:
> client = TestClient(app)
>
> def testfunctionname():
> response = client.get("/")
> assert response.status_code == 200
> assert response.json() == {"msg": "Message"}
- 当使用 pytest 时,测试函数名称必须以 test_ 开头,以便 pytest 能够自动发现并执行它。
- response.status_code 用于验证 HTTP 响应状态。
- response.json() 用于检查响应体。
示例: 本示例定义了一个 FastAPI 端点并使用 TestClient 对其进行测试。该测试同时检查了 HTTP 状态码和返回的 JSON 响应。
Python
CODEBLOCK_6e2db395
现在,让我们打开终端并运行以下命令来测试我们创建的 FastAPI 应用程序。
> pytest practice.py
这里,practice.py 是 Python 脚本的名称。
输出
!TestClient终端快照
解释:
- TestClient(app) 为 FastAPI 应用程序创建了一个测试客户端。
- client.get("/") 向根端点发送了一个 GET 请求。
- response.status_code 验证请求是否成功。
- response.json() 检查返回的响应是否与预期输出匹配。
- 函数名 testreadmain 使得 pytest 能够发现并运行该测试。
使用 Requests 库
requests 库用于向正在运行的 FastAPI 服务器发送 HTTP 请求。这种方法适用于手动测试或集成测试,但不适合用于单元测试。
示例: 在本示例中,API 会比较两条消息,如果它们匹配则返回 "Test Passed"(测试通过)。
Python
CODEBLOCK_c5fde54a
解释:
- @app.get("/") 定义了一个 GET 端点。
- msg 和 test_msg 存储了用于比较的样本值。
- 条件检查决定了 API 返回的响应消息。
现在,让我们打开终端并运行以下命令来运行 FastAPI 应用程序。如果应用程序发生更改,此命令还将允许应用重新加载。
> uvicorn practice:app –reload
创建一个名为 test.py 的单独文件来测试正在运行的 FastAPI 应用程序。
Python
CODEBLOCK_8698e8cc
输出
!RequestLib终端快照
解释:
- requests.get() 向正在运行的 FastAPI 服务器发送 HTTP GET 请求。
- URL http://127.0.0.1:8000/ 必须与服务器地址匹配。
- response.json() 打印 API 返回的响应。