1. 项目背景与核心挑战
最近在重构公司测试平台时遇到一个典型的企业级需求:需要支持多租户隔离的同时,保证pytest测试用例能够高效并发执行。这个需求听起来简单,但实际落地时踩了不少坑。多租户意味着每个租户的数据、环境、配置必须严格隔离,而pytest并发则要求测试执行过程既要高效又要稳定。这两者结合后,问题复杂度呈指数级上升。
我们最初尝试直接用pytest-xdist做并发,结果发现不同租户的测试用例会互相干扰,甚至出现数据污染。后来调研了市面上几种方案,要么性能不达标,要么隔离性不够彻底。最终通过组合pytest插件、资源池管理和租户上下文隔离,实现了一套稳定运行的生产级方案。这套方案目前支撑着日均10万+测试用例的执行,平均执行效率提升300%以上。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计
2.1 整体架构分层
系统采用三层架构设计:
- 调度层:负责接收测试请求,根据租户ID路由到对应执行队列
- 执行层:由多个隔离的worker组成,每个worker绑定特定资源池
- 资源层:包含数据库、中间件、测试环境等隔离的物理资源
关键设计点在于:
- 每个租户有独立的数据库schema
- 测试环境通过Docker容器动态分配
- pytest执行器加载不同的fixture配置
2.2 并发模型选择
对比了三种并发方案:
-
多进程模式:使用pytest-xdist
- 优点:原生支持,开发成本低
- 缺点:进程间隔离不彻底,共享资源可能冲突
-
多机模式:通过Kubernetes调度
- 优点:资源隔离彻底
- 缺点:网络开销大,启动延迟高
-
混合模式(最终采用):
- 跨机器做租户级隔离
- 单机器内用xdist做用例级并发
- 通过redis实现分布式锁控制关键资源
实测发现混合模式在隔离性和性能之间取得了最佳平衡。单个物理节点可以同时运行3-5个租户的测试任务,每个租户内部又能并行执行20+测试用例。
3. 关键实现细节
3.1 租户上下文管理
核心是通过自定义pytest插件实现租户隔离:
python复制# conftest.py
class TenantContext:
def _
