☰
接口自动化token过期问题解决
2026/9/30 2:40:27 网站建设 项目流程

直接跑 combo_02 的8种组合全部返回 code: 0。pytest 中看到的 403 可能是 token 在跑完 combo_01(33秒/32个请求)后接近过期。建议:

  1. 跑前先登录刷新 token:执行 python testcase/xxx/auto_login_test.py

  2. combo_01 跑了 33秒/32个请求,token 刚好在这之后过期

  3. combo_02 开始就全线 403都返回权限错误

Token 是 _load_token() 在 conftest.py 加载时一次性获取的,跑完整套用例期间不会刷新。如果 token 有效期较短(比如 30 分钟),跑完前几组组合后就会失效。

每个组合测试开始前等待 2秒。效果:

combo_01 (33s) → sleep(2s) → combo_02 (17s) → sleep(2s) → combo_03 …

登录接口需要租户 header 才能直接调用。Token 是通过 Playwright UI 登录获取的(走 登录 SSO),有效期由后端 SSO 控制,登录响应中未返回过期时间字段。

从企业 SSO 的常见配置来看,这类 token 一般 30分钟~2小时。你的测试跑了:

  • combo_01: 33秒
  • combo_02: 17秒(开始403)

✽间隔太短不太可能是 token 自然过期。更可能是 combo_01 大量请求触发了频率限制,后续请求被服务端拦截返回 403。

建议:跑测试前加个小间隔,●Token 有效期是 SSO 服务端控制的,客户端无法延长。但可以加一个 自动续期机制:每次测试前检查 token 是否有效,无效时自动重新登录。

通过账号密码登录,更新全局 TOKEN,直接去读conftest.py文件

总结一下 conftest.py 的 Token 自动续期机制:

核心变更:

┌───────────────────────────────┬────────────────────────────────────────────────────────────┐
✽│ 机制 ↓ │ 说明 │
├───────────────────────────────┼────────────────────────────────────────────────────────────┤
│ TOKEN_REFRESH_INTERVAL = 1200 │ 每 20分钟 自动重新登录刷新 │
├───────────────────────────────┼────────────────────────────────────────────────────────────┤
│ _get_token() │ 获取 token 时检查是否超时,超时自动刷新 │
├───────────────────────────────┼────────────────────────────────────────────────────────────┤
│ _refresh_token() │ 清除模块缓存,强制重新加载 auto_login_test.py 获取新 token │
├───────────────────────────────┼────────────────────────────────────────────────────────────┤
│ _verify_token() │ 调用轻量接口验证 token 是否有效 │
├───────────────────────────────┼────────────────────────────────────────────────────────────┤
│ ensure_valid_token() │ 对外暴露的方法,测试方法可调用确保 token 有效 │
└───────────────────────────────┴────────────────────────────────────────────────────────────┘

工作流程:
测试启动 →首次加载 token
↓
每个组合测试前 sleep(2s)
↓
_get_token() 检查: 距上次登录 > 20分钟?
├─ 否 →返回缓存 token
└─ 是 →自动重新登录,刷新 token

build_headers() 现在每次调用都通过 _get_token() 动态获取最新 token,不再依赖模块加载时的静态值。

**

conftest.py 的 token 管理逻辑已优化为三步走:

阶段1: 验证现有 token
├─ 有效 → 直接使用(复用缓存)✅
└─ 无效 → 阶段2
├─ 有效 → 直接使用(复用缓存)✅
└─ 无效 → 阶段2

阶段2: 刷新 token
├─ 成功 → 使用新 token ✅
└─ 失败 → 阶段3

阶段3: 重新登录
└─ 强制调用 auto_login_test.get_token() 重新登录

触发时机:

  • conftest.py 模块加载时自动执行 _init_token()
  • 测试运行前调用 ensure_valid_token()
  • build_headers() 每次请求前调用 _get_token()(20分钟内复用缓存)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询