106 lines
3.1 KiB
Python
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"])
|