2 changed files with 59 additions and 2 deletions
@ -1,3 +1,2 @@ |
|||
from starlette.middleware import Middleware as Middleware |
|||
|
|||
from fastapi.middleware.slow_request import SlowRequestMiddleware |
|||
from starlette.middleware import Middleware as Middleware |
|||
|
|||
@ -0,0 +1,58 @@ |
|||
import asyncio |
|||
import logging |
|||
|
|||
from fastapi import FastAPI |
|||
from fastapi.testclient import TestClient |
|||
|
|||
app = FastAPI() |
|||
|
|||
|
|||
@app.get("/fast") |
|||
async def fast_endpoint(): |
|||
return {"message": "Fast response"} |
|||
|
|||
|
|||
@app.get("/slow") |
|||
async def slow_endpoint(): |
|||
await asyncio.sleep(0.6) |
|||
return {"message": "Slow response"} |
|||
|
|||
|
|||
def test_slow_request_logging(caplog): |
|||
caplog.set_level(logging.WARNING) |
|||
client = TestClient(app) |
|||
|
|||
# 测试快速请求,不应记录警告 |
|||
response = client.get("/fast") |
|||
assert response.status_code == 200 |
|||
assert "Slow request" not in caplog.text |
|||
|
|||
# 测试慢速请求,应记录警告 |
|||
response = client.get("/slow") |
|||
assert response.status_code == 200 |
|||
|
|||
# 检查日志是否包含预期的警告信息 |
|||
slow_request_logs = [ |
|||
record for record in caplog.records if "Slow request" in record.message |
|||
] |
|||
assert len(slow_request_logs) == 1 |
|||
|
|||
log_message = slow_request_logs[0].message |
|||
assert "GET" in log_message |
|||
assert "/slow" in log_message |
|||
# 检查是否包含两位小数的时间 |
|||
import re |
|||
|
|||
match = re.search(r"took (\d+\.\d{2})s", log_message) |
|||
assert match is not None, ( |
|||
f"Log message should contain time with two decimal places: {log_message}" |
|||
) |
|||
|
|||
print("✅ 慢请求监控中间件测试通过!") |
|||
print(f" 日志消息: {log_message}") |
|||
|
|||
|
|||
if __name__ == "__main__": |
|||
import pytest |
|||
|
|||
pytest.main([__file__, "-v", "-s"]) |
|||
Loading…
Reference in new issue