Browse Source

🎨 [pre-commit.ci] Auto format from pre-commit.com hooks

pull/13938/head
pre-commit-ci[bot] 2 weeks ago
parent
commit
e6164a272b
  1. 48
      tests/test_custom_api.py

48
tests/test_custom_api.py

@ -2,12 +2,13 @@
自定义API测试 自定义API测试
这是一个示例测试文件展示如何在FastAPI项目中编写测试 这是一个示例测试文件展示如何在FastAPI项目中编写测试
""" """
from typing import Optional
import pytest import pytest
from fastapi import FastAPI from fastapi import FastAPI
from fastapi.testclient import TestClient from fastapi.testclient import TestClient
from pydantic import BaseModel from pydantic import BaseModel
from typing import Optional
# 创建一个简单的FastAPI应用用于测试 # 创建一个简单的FastAPI应用用于测试
app = FastAPI() app = FastAPI()
@ -53,32 +54,28 @@ client = TestClient(app)
# 测试用例 # 测试用例
class TestCustomAPI: class TestCustomAPI:
"""自定义API测试类""" """自定义API测试类"""
def test_read_root(self): def test_read_root(self):
"""测试根路径""" """测试根路径"""
response = client.get("/") response = client.get("/")
assert response.status_code == 200 assert response.status_code == 200
assert response.json() == {"message": "Hello Custom API"} assert response.json() == {"message": "Hello Custom API"}
def test_read_item_with_params(self): def test_read_item_with_params(self):
"""测试带参数的商品查询""" """测试带参数的商品查询"""
response = client.get("/items/5?q=somequery") response = client.get("/items/5?q=somequery")
assert response.status_code == 200 assert response.status_code == 200
assert response.json() == {"item_id": 5, "q": "somequery"} assert response.json() == {"item_id": 5, "q": "somequery"}
def test_read_item_without_params(self): def test_read_item_without_params(self):
"""测试不带查询参数的商品查询""" """测试不带查询参数的商品查询"""
response = client.get("/items/10") response = client.get("/items/10")
assert response.status_code == 200 assert response.status_code == 200
assert response.json() == {"item_id": 10, "q": None} assert response.json() == {"item_id": 10, "q": None}
def test_create_item(self): def test_create_item(self):
"""测试创建商品""" """测试创建商品"""
item_data = { item_data = {"name": "Test Item", "price": 99.99, "is_offer": True}
"name": "Test Item",
"price": 99.99,
"is_offer": True
}
response = client.post("/items/", json=item_data) response = client.post("/items/", json=item_data)
assert response.status_code == 200 assert response.status_code == 200
response_data = response.json() response_data = response.json()
@ -86,35 +83,38 @@ class TestCustomAPI:
assert response_data["item"]["name"] == "Test Item" assert response_data["item"]["name"] == "Test Item"
assert response_data["item"]["price"] == 99.99 assert response_data["item"]["price"] == 99.99
assert response_data["item"]["is_offer"] is True assert response_data["item"]["is_offer"] is True
def test_get_user(self): def test_get_user(self):
"""测试获取用户信息""" """测试获取用户信息"""
response = client.get("/users/123") response = client.get("/users/123")
assert response.status_code == 200 assert response.status_code == 200
assert response.json() == {"user_id": 123, "username": "user_123"} assert response.json() == {"user_id": 123, "username": "user_123"}
@pytest.mark.parametrize("item_id,expected_id", [ @pytest.mark.parametrize(
(1, 1), "item_id,expected_id",
(42, 42), [
(999, 999), (1, 1),
]) (42, 42),
(999, 999),
],
)
def test_read_item_parametrized(self, item_id, expected_id): def test_read_item_parametrized(self, item_id, expected_id):
"""参数化测试:测试不同的商品ID""" """参数化测试:测试不同的商品ID"""
response = client.get(f"/items/{item_id}") response = client.get(f"/items/{item_id}")
assert response.status_code == 200 assert response.status_code == 200
assert response.json()["item_id"] == expected_id assert response.json()["item_id"] == expected_id
def test_invalid_item_id(self): def test_invalid_item_id(self):
"""测试无效的商品ID""" """测试无效的商品ID"""
response = client.get("/items/not_a_number") response = client.get("/items/not_a_number")
assert response.status_code == 422 # 验证错误 assert response.status_code == 422 # 验证错误
def test_create_item_invalid_data(self): def test_create_item_invalid_data(self):
"""测试创建商品时的无效数据""" """测试创建商品时的无效数据"""
invalid_data = { invalid_data = {
"name": "Test Item", "name": "Test Item",
# 缺少必需的price字段 # 缺少必需的price字段
"is_offer": True "is_offer": True,
} }
response = client.post("/items/", json=invalid_data) response = client.post("/items/", json=invalid_data)
assert response.status_code == 422 # 验证错误 assert response.status_code == 422 # 验证错误
@ -139,11 +139,7 @@ def test_openapi_schema():
@pytest.fixture @pytest.fixture
def sample_item(): def sample_item():
"""测试用的示例商品数据""" """测试用的示例商品数据"""
return { return {"name": "Sample Item", "price": 50.0, "is_offer": False}
"name": "Sample Item",
"price": 50.0,
"is_offer": False
}
def test_with_fixture(sample_item): def test_with_fixture(sample_item):

Loading…
Cancel
Save