"""uvicorn 冒烟测试。 用真实套接字启动 uvicorn 服务并请求 /health,验证应用能脱离 TestClient 在实际 Web 服务环境中正常工作。 """ import threading import time import urllib.request from uvicorn import Config, Server from app.main import app def test_uvicorn_serves_app_over_real_socket() -> None: """验证 uvicorn 监听真实端口后健康检查可用。""" config = Config(app=app, host="127.0.0.1", port=0, log_level="error") server = Server(config) thread = threading.Thread(target=server.run, daemon=True) thread.start() try: deadline = time.monotonic() + 10 while not server.started and time.monotonic() < deadline: time.sleep(0.05) assert server.started port = server.servers[0].sockets[0].getsockname()[1] with urllib.request.urlopen(f"http://127.0.0.1:{port}/health", timeout=5) as response: assert response.status == 200 assert b'"wov-api"' in response.read() finally: server.should_exit = True thread.join(timeout=10)