FastAPI 教程

12.3 单元测试:业务逻辑测试

FastAPI 入门教程:从零学习构建API并掌握业务逻辑单元测试

FastAPI 教程

本教程面向Python初学者,提供详细的FastAPI入门指南,从基础概念到动手实践,包含生活化类比和简单示例,并特别讲解如何对业务逻辑进行单元测试,帮助您快速建立Web开发信心。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

FastAPI 入门教程:为Python初学者打造,轻松学习Web开发与单元测试

欢迎!无论您是刚学完Python基础语法的新手,还是对Web开发感到好奇,本教程都将带您一步一步掌握FastAPI,并学会如何测试核心业务逻辑。我们会用生活化的例子来解释概念,避免复杂的理论,确保您在每一步都能获得“成功时刻”。


第一部分:FastAPI是什么?为什么选择它?

生活比喻: 想象FastAPI就像一家高效的快餐店。您点餐(发送请求),它快速准备食物(处理业务逻辑),然后立即给您(返回响应),而这一切都基于清晰的菜单(API文档)。相比其他Web框架,FastAPI速度极快、自动生成文档,非常适合初学者快速上手。

目标: 学完这一部分,您将理解FastAPI的基本优势。


第二部分:环境设置与第一个“Hello World”应用

安装FastAPI

首先,确保您安装了Python(建议版本3.7+)。然后,在终端或命令行中运行:

pip install fastapi uvicorn
  • fastapi:核心框架。
  • uvicorn:服务器,用来运行您的应用。

成功时刻: 如果安装没有错误,您已经迈出了第一步!

创建并运行第一个应用

新建一个Python文件,比如 main.py,写入以下代码:

from fastapi import FastAPI

app = FastAPI()  # 创建一个FastAPI应用实例

@app.get("/")  # 定义根路径的GET请求路由
def read_root():
    return {"message": "Hello, World!"}  # 返回一个JSON响应

现在,在终端运行:

uvicorn main:app --reload

打开浏览器,访问 http://127.0.0.1:8000,您会看到 {"message": "Hello, World!"}!🎉 这是您的第一个API端点工作了。

解释: @app.get("/") 类似设置一个菜单项,当有人访问根路径时,执行 read_root 函数并返回结果。


第三部分:深入理解:构建一个简单的待办事项API

让我们扩展应用,添加业务逻辑。创建一个简单的待办事项列表。

添加更多端点

更新 main.py

from fastapi import FastAPI
from pydantic import BaseModel  # 用于数据验证
from typing import List  # 用于类型提示

app = FastAPI()

# 定义待办事项的数据模型
class TodoItem(BaseModel):
    id: int
    task: str
    completed: bool = False  # 默认未完成

# 模拟数据库:一个内存中的列表
todo_list = []

@app.get("/todos/", response_model=List[TodoItem])  # 获取所有待办事项
def get_todos():
    return todo_list

@app.post("/todos/")  # 添加新待办事项
def add_todo(todo: TodoItem):
    todo_list.append(todo)
    return {"message": "Todo added successfully!"}

运行服务器,用工具如 Postman 或浏览器测试 POST 请求到 http://127.0.0.1:8000/todos/ 并发送JSON,例如 {"id": 1, "task": "学习FastAPI"}。然后访问 GET 同一URL查看列表。您会看到数据被添加和检索。

生活比喻: 这就像在记事本上写待办事项并查看它。FastAPI自动处理JSON转换和验证。


第四部分:单元测试:为什么和如何测试业务逻辑?

现在,您已经构建了API,但如何确保它一直工作正确?这就是单元测试的作用。

什么是单元测试?

生活比喻: 单元测试就像测试一个食谱的每个步骤。您单独检查切菜是否正确(业务逻辑),而不是等整个菜做完再尝(端到端测试)。这样可以快速发现问题。

设置测试环境

在项目中,创建一个 test_main.py 文件。安装 pytest:

pip install pytest

测试业务逻辑函数

首先,将业务逻辑移到单独函数以便测试。更新 main.py

# 在文件顶部或一个单独模块中

def add_todo_logic(todo: TodoItem, todo_list: List[TodoItem]) -> str:
    """业务逻辑:添加待办事项到列表"""
    if todo.id in [item.id for item in todo_list]:
        return "Error: ID already exists"
    todo_list.append(todo)
    return "Success"

# 在FastAPI端点中使用
@app.post("/todos/")
def add_todo(todo: TodoItem):
    result = add_todo_logic(todo, todo_list)
    if result == "Success":
        return {"message": "Todo added successfully!"}
    else:
        return {"error": result}

现在,在 test_main.py 中编写单元测试:

import pytest
from main import add_todo_logic, TodoItem
from typing import List

# 测试添加待办事项的逻辑
def test_add_todo_logic():
    # 准备数据
    todo_list: List[TodoItem] = []
    todo1 = TodoItem(id=1, task="Test task")
    todo2 = TodoItem(id=2, task="Another task")
    
    # 测试成功添加
    result = add_todo_logic(todo1, todo_list)
    assert result == "Success"
    assert len(todo_list) == 1
    assert todo_list[0].id == 1
    
    # 测试重复ID错误
    result = add_todo_logic(todo1, todo_list)  # 同样ID
    assert result == "Error: ID already exists"
    assert len(todo_list) == 1  # 列表不应改变

运行测试:

pytest test_main.py -v

如果看到“passed”,恭喜!您刚刚成功测试了业务逻辑。这是您的“成功时刻”——确保代码可靠性的关键一步。

测试API端点

对于端点,FastAPI支持测试客户端。添加一个测试:

from fastapi.testclient import TestClient
from main import app  # 导入您的FastAPI应用

client = TestClient(app)

def test_get_todos():
    response = client.get("/todos/")
    assert response.status_code == 200
    assert response.json() == []  # 初始应为空列表

def test_post_todo():
    response = client.post("/todos/", json={"id": 1, "task": "Learn testing"})
    assert response.status_code == 200
    assert response.json()["message"] == "Todo added successfully!"

再次运行 pytest,看到所有测试通过,您就已经掌握了基础的API测试。


第五部分:总结与下一步

您已经学会了:

  1. 安装和运行FastAPI,创建了第一个Hello World应用。
  2. 构建了简单的待办事项API,理解了路由和数据模型。
  3. 引入了单元测试,特别针对业务逻辑,确保代码质量。

信心建立时刻: 回顾一下,您从零开始,现在可以构建API并测试它们了!对于初学者来说,这已经是很棒的成就。

下一步建议: 探索FastAPI的更多功能,如依赖注入、身份验证,或学习数据库集成。始终记得编写测试来维护代码。

保持实践,祝您编程愉快!如有问题,随时查阅FastAPI官方文档。

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包