12.1 测试环境配置与 pytest
Python FastAPI入门教程:从零开始学习Web开发与pytest测试
本教程面向Python初学者,提供详细的FastAPI入门指南,涵盖基础概念、快速上手步骤和pytest测试环境配置,通过生活化类比和简单示例帮助新手轻松掌握Web开发,建立信心。
Python FastAPI入门教程:从零开始学习Web开发与pytest测试
引言
如果你有基础的Python语法知识,但没有Web开发经验,那么FastAPI是你的完美选择!它就像一辆快速、易于驾驶的跑车,让你轻松上路。本教程将带你从零开始,快速构建你的第一个Web API,并通过pytest确保一切运行顺利。
第一部分:认识FastAPI
想象一下,你正在经营一家咖啡店,顾客通过菜单点餐,而FastAPI就是那个快速响应订单的点餐系统。它能理解顾客的需求(请求),并迅速提供咖啡(响应)。
安装FastAPI
首先,我们需要准备环境。打开你的终端或命令行,运行以下命令来安装FastAPI和uvicorn(一个ASGI服务器):
pip install fastapi uvicorn
这将安装FastAPI框架和uvicorn服务器,让我们能够运行Web应用。
你的第一个FastAPI应用
创建一个新的Python文件,比如 main.py,并添加以下代码:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
保存文件。现在,在终端中运行:
uvicorn main:app --reload
打开浏览器,访问 http://127.0.0.1:8000,你会看到 {"Hello": "World"} 显示在屏幕上!这就是你的第一个成功时刻:一个简单的API已经运行起来了。
第二部分:基础概念
路径操作
在FastAPI中,路径就像是网站的地址。例如,@app.get("/") 对应根路径,处理GET请求。你可以添加更多路径:
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
访问 http://127.0.0.1:8000/items/42,你会看到 {"item_id": 42}。这就像咖啡店有不同菜单项一样。
请求和响应
FastAPI自动处理JSON数据,让你专注于逻辑。尝试发送POST请求或使用参数。例如,添加一个POST端点:
@app.post("/items/")
def create_item(item: dict):
return {"item": item}
通过工具如curl或Postman发送JSON数据来测试。
第三部分:测试环境配置
为了保证你的应用可靠,我们需要设置测试环境。这就像在咖啡店开业前进行试营业,检查一切是否正常。
安装pytest
pytest是Python中流行的测试框架。安装它:
pip install pytest
创建测试文件
在你的项目目录中,创建一个测试文件,比如 test_main.py,并添加以下代码:
from fastapi.testclient import TestClient
from main import app # 假设你的主文件是main.py
client = TestClient(app)
def test_read_root():
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"Hello": "World"}
def test_read_item():
response = client.get("/items/42")
assert response.status_code == 200
assert response.json() == {"item_id": 42}
运行测试:
pytest
如果一切顺利,你会看到测试通过的信息!这是另一个成功时刻,确保你的API按预期工作。
第四部分:建立信心
通过以上步骤,你已经:
- 安装并运行了FastAPI应用。
- 理解了基本概念。
- 设置了测试环境并用pytest验证了功能。
尝试添加更多功能,比如处理POST请求、使用数据库或添加认证。FastAPI的文档清晰,社区支持好,让你轻松进阶。例如,创建一个更复杂的API端点:
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_id": item_id, "item": item}
然后添加相应的测试用例到 test_main.py 中。
结语
本教程旨在让你快速上手FastAPI,通过简单示例建立信心。记住,实践是最好的老师,所以多动手尝试!希望你喜欢这个入门之旅。