Pytest 微服务 FastAPI 在 Docker 中的测试,返回 404

Pytest 微服务 FastAPI 在 Docker 中的测试,返回 404

在本文中,我们将介绍如何使用 Pytest 对基于微服务架构的 FastAPI 应用进行测试,并将其部署在 Docker 中。我们的目标是确保我们的应用在处理请求时返回正确的 404 错误。

阅读更多:Pytest 教程

什么是微服务架构?

微服务架构是一种软件架构风格,它将一个单一的应用程序拆分为一组小型独立服务。每个服务都可以独立地开发、部署和扩展。这样做的好处是可以实现更高的可伸缩性、更快的部署速度以及更好的模块化和可维护性。

什么是 FastAPI?

FastAPI 是一个基于 Python 的高性能 Web 框架,它支持异步、类型注解和自动生成 API 文档等功能。由于它的性能优势和易用性,它成为了构建微服务应用的热门选择。

在本文中,我们将使用 FastAPI 构建一个简单的微服务应用,并使用 Pytest 对其进行测试。

编写 FastAPI 应用

首先,我们需要安装 FastAPI 和 Pytest:

pip install fastapi pytest

接下来,我们创建一个 app.py 文件,编写一个简单的 FastAPI 应用:

from fastapi import FastAPI

app = FastAPI()

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

@app.get("/users/{user_id}")
async def read_user(user_id: int):
    if user_id == 1:
        return {"name": "John Doe"}
    else:
        return {"error": "User not found"}

在上面的代码中,我们定义了两个 API 路由。一个是根路由 /,它返回一个简单的 JSON 响应。另一个是 /users/{user_id},它接受一个用户 ID,如果 ID 是 1,则返回名称为 “John Doe” 的用户信息,否则返回一个错误响应。

编写测试用例

接下来,我们将使用 Pytest 编写测试用例来验证我们的 FastAPI 应用是否正确处理了 404 错误。

首先,我们需要创建一个名为 test_app.py 的文件,并定义我们的测试用例:

import pytest
from fastapi.testclient import TestClient
from app import app

client = TestClient(app)

def test_read_root():
    response = client.get("/")
    assert response.status_code == 200
    assert response.json() == {"Hello": "World"}

def test_read_user():
    response = client.get("/users/1")
    assert response.status_code == 200
    assert response.json() == {"name": "John Doe"}

def test_read_user_not_found():
    response = client.get("/users/2")
    assert response.status_code == 404
    assert response.json() == {"error": "User not found"}

在上面的代码中,我们使用 TestClient 类创建一个测试客户端,并通过发送不同的请求来测试我们的 API 路由。我们验证了根路由和读取用户信息的路由是否返回了正确的响应,并测试了读取不存在用户信息的路由是否返回了 404 错误。

在 Docker 中部署应用

接下来,我们将把我们的 FastAPI 应用部署在 Docker 中。首先,我们需要创建一个名为 Dockerfile 的文件:

FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9

COPY ./app /app

在上面的 Dockerfile 中,我们使用了一个基于 Python3.9 的镜像,并将我们的应用代码复制到容器的 /app 目录中。

接下来,我们使用以下命令构建 Docker 镜像:

docker build -t my-fastapi-app .

构建完成后,我们可以运行以下命令来启动 Docker 容器:

docker run -d --name fastapi-container -p 8000:80 my-fastapi-app

在上面的命令中,我们创建了一个名为 fastapi-container 的容器,并将容器的 80 端口映射到主机的 8000 端口。

现在,我们的 FastAPI 应用已经在 Docker 容器中运行起来了。

运行测试用例

为了运行我们的测试用例,我们需要在 Docker 容器中执行它们。首先,我们需要获取到容器的 IP 地址:

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' fastapi-container

然后,我们可以使用 Docker 容器的 IP 地址运行我们的测试用例:

pytest --host=CONTAINER_IP_ADDRESS

请将上面的 CONTAINER_IP_ADDRESS 替换为你在前一步骤中获取到的 Docker 容器的 IP 地址。

运行测试用例后,Pytest 将会输出测试结果,并告诉我们是否测试通过。

总结

在本文中,我们介绍了如何使用 Pytest 对基于微服务架构的 FastAPI 应用进行测试,并将其部署在 Docker 中。我们编写了测试用例来验证应用返回正确的 404 错误。最后,我们展示了如何构建 Docker 镜像并运行测试用例。

通过使用 Pytest 和 Docker,我们可以更好地测试和部署我们的微服务应用,以确保其正常运行并返回正确的结果。

希望本文对你理解 Pytest、微服务和 FastAPI 应用的测试和部署有所帮助!

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程