Browse Source

refactor(middleware): 移除慢请求监控中间件及其测试

移除SlowRequestMiddleware及其相关测试文件,简化中间件堆栈
pull/15387/head
Lgf 3 months ago
parent
commit
27983ffaef
  1. 4
      fastapi/applications.py
  2. 53
      tests/test_slow_request_middleware.py

4
fastapi/applications.py

@ -13,7 +13,6 @@ from fastapi.exception_handlers import (
from fastapi.exceptions import RequestValidationError, WebSocketRequestValidationError from fastapi.exceptions import RequestValidationError, WebSocketRequestValidationError
from fastapi.logger import logger from fastapi.logger import logger
from fastapi.middleware.asyncexitstack import AsyncExitStackMiddleware from fastapi.middleware.asyncexitstack import AsyncExitStackMiddleware
from fastapi.middleware.slow_request import SlowRequestMiddleware
from fastapi.openapi.docs import ( from fastapi.openapi.docs import (
get_redoc_html, get_redoc_html,
get_swagger_ui_html, get_swagger_ui_html,
@ -1030,8 +1029,7 @@ class FastAPI(Starlette):
exception_handlers[key] = value exception_handlers[key] = value
middleware = ( middleware = (
[Middleware(SlowRequestMiddleware)] [Middleware(ServerErrorMiddleware, handler=error_handler, debug=debug)] # ty: ignore[invalid-argument-type]
+ [Middleware(ServerErrorMiddleware, handler=error_handler, debug=debug)] # ty: ignore[invalid-argument-type]
+ self.user_middleware + self.user_middleware
+ [ + [
Middleware( Middleware(

53
tests/test_slow_request_middleware.py

@ -1,53 +0,0 @@
import asyncio
import logging
import time
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…
Cancel
Save