1. 项目背景与核心挑战
在企业级测试体系中,多租户场景下的自动化测试一直是个棘手问题。想象一下,你负责的测试框架需要同时支持A、B、C三个租户的API测试,每个租户都有独立的认证体系和测试数据。更麻烦的是:
- 本地开发时可能需要单独测试某个租户
- CI流水线需要全量执行所有租户用例
- 为了提升效率还要支持pytest-xdist分布式执行
最要命的是——当多个worker同时跑不同租户的测试时,token管理一旦出问题,就会导致:
- 租户A的测试误用了租户B的token
- 并发登录导致token被异常刷新
- 测试结果互相污染
我在金融级SaaS产品的测试中,就曾因为token串用导致错误测试数据写入生产环境(幸亏是预发环境)。这次分享的解决方案,正是从那次事故中沉淀出来的实战经验。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 多租户Token管理方案
2.1 线程安全的Token缓存设计
先看核心的TokenManager实现:
python复制from threading import Lock
from common.auth import login
class TokenManager:
_cache = {} # 类变量存储所有租户token
_lock = Lock() # 线程安全锁
@classmethod
def get_token(cls, tenant_key):
with cls._lock: # 保证线程安全
if tenant_key not in cls._cache:
tenant_id, token = login(tenant_key)
cls._cache[tenant_key] = (tenant_id, token)
return cls._cache[tenant_key]
@classmethod
def refresh_token(cls, tenant_key):
with cls._lock:
tenant_id, token = login(tenant_key)
