mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-20 00:11:50 +00:00
The sequential version sent one request at a time, so a Redis outage never reached the concurrency where the failed-tracking alert body actually grows. This drives the proxy with locust against one model group of three mock deployments, two failing at order 1 and one serving at order 2, so every request spends its retries on the failing pair and lands on the serving deployment through the order-based fallback. Two phases, a healthy baseline and a CLIENT PAUSE WRITE window, and every request must succeed in both. Latency, RSS and CPU are reported as p50/p90/p99 per phase rather than asserted on: RSS and CPU come from psutil on the proxy's process tree, since a multi-worker proxy serves /metrics from the prometheus multiprocess collector and that drops the process collector's series. Thresholds stay open until weekly runs give real baselines. Co-Authored-By: Claude Code <noreply@anthropic.com>
28 lines
913 B
Python
28 lines
913 B
Python
from __future__ import annotations
|
|
|
|
import os
|
|
|
|
import pytest
|
|
|
|
from e2e_config import REDIS_CHAOS_OPT_IN_ENV, WEEKLY_ANOMALY_OPT_IN_ENV
|
|
from load_client import LoadClient, build_client
|
|
from proxy_client import ProxyClient
|
|
|
|
_OPT_IN_MARKERS = (
|
|
("weekly", WEEKLY_ANOMALY_OPT_IN_ENV),
|
|
("redis_chaos", REDIS_CHAOS_OPT_IN_ENV),
|
|
)
|
|
|
|
|
|
def pytest_collection_modifyitems(config: pytest.Config, items: list[pytest.Item]) -> None:
|
|
opted_out = {marker for marker, opt_in_env in _OPT_IN_MARKERS if not os.environ.get(opt_in_env)}
|
|
deselected = [item for item in items if any(item.get_closest_marker(marker) is not None for marker in opted_out)]
|
|
if not deselected:
|
|
return
|
|
config.hook.pytest_deselected(items=deselected)
|
|
items[:] = [item for item in items if item not in deselected]
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def client(proxy: ProxyClient) -> LoadClient:
|
|
return build_client(proxy)
|