""" 通用接口测试 """ 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"])