# ============================================================================= # 复杂场景重构 — 自动化测试局部 conftest # ============================================================================= # 说明:扩展全局 MockRedis,增加 sadd/srem 方法(session_manager 和 # timeout_cleaner 中使用了 Redis SET 操作)。 # ============================================================================= from typing import Dict, Set from tests.conftest import MockRedis class ExtendedMockRedis(MockRedis): """扩展 MockRedis,支持 sadd/srem/smembers 操作。 session_manager.pause_session 使用 redis.sadd() 向暂停会话集合添加成员, resume_session / agent_close / timeout_cleaner 使用 redis.srem() 移除成员。 基础 MockRedis 不含这些方法,此处扩展。 """ def __init__(self): super().__init__() self._sets: Dict[str, Set[str]] = {} async def sadd(self, name: str, *values) -> int: """模拟 Redis SADD 命令。""" s = self._sets.setdefault(name, set()) count = 0 for v in values: v_str = v.decode("utf-8") if isinstance(v, bytes) else str(v) if v_str not in s: s.add(v_str) count += 1 return count async def srem(self, name: str, *values) -> int: """模拟 Redis SREM 命令。""" s = self._sets.get(name, set()) count = 0 for v in values: v_str = v.decode("utf-8") if isinstance(v, bytes) else str(v) if v_str in s: s.discard(v_str) count += 1 return count async def smembers(self, name: str) -> Set[str]: """模拟 Redis SMEMBERS 命令。""" return set(self._sets.get(name, set())) def reset(self) -> None: """重置所有数据。""" super().reset() self._sets.clear() import pytest @pytest.fixture def mock_redis(): """覆盖全局 mock_redis fixture,返回支持 sadd/srem 的扩展版本。""" return ExtendedMockRedis()