finyx_data_ai/tests/test_common.py
2026-01-11 07:48:19 +08:00

106 lines
3.1 KiB
Python

"""
通用接口测试
"""
import pytest
from fastapi.testclient import TestClient
from app.main import app
client = TestClient(app)
def test_health_check():
"""测试健康检查接口"""
response = client.get("/api/v1/common/health")
assert response.status_code == 200
data = response.json()
assert data["success"] is True
assert data["code"] == 200
assert "data" in data
assert data["data"]["status"] == "healthy"
assert "message" in data
def test_get_version():
"""测试获取版本信息接口"""
response = client.get("/api/v1/common/version")
assert response.status_code == 200
data = response.json()
assert data["success"] is True
assert data["code"] == 200
assert "data" in data
assert "app_name" in data["data"]
assert "version" in data["data"]
assert "message" in data
def test_monitor_stats_all():
"""测试获取所有端点的监控统计"""
response = client.get("/api/v1/common/monitor/stats")
assert response.status_code == 200
data = response.json()
assert data["success"] is True
assert data["code"] == 200
assert "data" in data
assert "total_calls" in data["data"]
assert "error_rate" in data["data"]
assert "avg_response_time" in data["data"]
assert "max_response_time" in data["data"]
assert "min_response_time" in data["data"]
def test_monitor_stats_specific_endpoint():
"""测试获取特定端点的监控统计"""
response = client.get("/api/v1/common/monitor/stats?endpoint=/api/v1/common/health")
assert response.status_code == 200
data = response.json()
assert data["success"] is True
assert data["code"] == 200
assert "data" in data
def test_monitor_stats_invalid_endpoint():
"""测试获取不存在端点的监控统计"""
response = client.get("/api/v1/common/monitor/stats?endpoint=/api/v1/nonexistent")
assert response.status_code == 200
data = response.json()
assert data["success"] is True
# 不存在的端点应该返回空统计
assert data["data"]["total_calls"] == 0
def test_monitor_stats_response_types():
"""测试监控统计响应数据类型"""
# 先调用健康检查接口,产生一些数据
client.get("/api/v1/common/health")
client.get("/api/v1/common/version")
# 获取统计
response = client.get("/api/v1/common/monitor/stats")
assert response.status_code == 200
data = response.json()
stats = data["data"]
# 验证数据类型
assert isinstance(stats["total_calls"], int)
assert isinstance(stats["error_rate"], float)
assert isinstance(stats["avg_response_time"], float)
assert isinstance(stats["max_response_time"], float)
assert isinstance(stats["min_response_time"], float)
# 验证数据范围
assert stats["error_rate"] >= 0.0
assert stats["error_rate"] <= 1.0
assert stats["avg_response_time"] >= 0
assert stats["max_response_time"] >= 0
assert stats["min_response_time"] >= 0
if __name__ == "__main__":
pytest.main([__file__, "-v"])