首页/开发/软件测试速查/storageState 复用登录态
自动化测试66 条

storageState 复用登录态

storageState 把登录后的 cookie 与 localStorage 序列化保存,用例启动时加载即可跳过重复登录;生成方式为登录一次后保存,或在 codegen 中导出。

软件测试速查开发更新于 2026-10-13

登录态复用是什么

Playwright 的登录态快照机制:把浏览器上下文的 cookies 与 localStorage 导出为 JSON,后续测试直接从已登录状态启动,跳过 UI 登录流程。省时且天然支持多角色:管理员、普通用户各存一份状态文件即可。注意它是快照——会话过期、后端失效后需要重新录制或刷新。

基本信息

保存方式context.storage_state(path="auth.json") 在登录成功后调用
产物内容cookies 加各 origin 的 localStorage,JSON 明文
复用方式new_context(storage_state="auth.json") 或配置 use.storageState
多角色每个角色存一份:admin.json、user.json 分别加载
过期治理定时任务重录,或单独用接口登录刷新状态
安全文件含会话凭据,必须 gitignore 并限制访问权限

最小示例

最小示例
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    context = browser.new_context()
    page = context.new_page(); page.goto(login_url)
    login(page)                                    # 真实走一次登录
    context.storage_state(path="auth/user.json")   # 导出 cookies+localStorage

# 后续用例:直接带已登录状态启动
# context = browser.new_context(storage_state="auth/user.json")

典型使用场景

  • 跳过 UI 登录:回归用例直接从业务页开始,缩短整体时长
  • 多角色权限测试:管理员与普通用户各加载各自的状态文件
  • CI 定期刷新:独立流水线重录状态,产物作为测试输入分发
  • 调试线上问题:带上真实登录态复现用户看到的界面
  • 减小登录接口压力:全量回归不再每条用例打一遍登录接口
  • 发布验收:验收脚本按角色复用状态,避免验收环境的验证码拦截

文件结构怎么读

字段内容注意
cookies名称、值、domain、path、expires过期时间到点后状态失效
origins每个站点的 localStorage 键值SPA 的令牌常放这里,别漏导
name/value单个 cookie 的键与值含会话凭据,勿提交仓库
expires失效时间戳负值表示会话级 cookie
storageState 是快照不是凭证管理系统:敏感环境用专用测试账号并限制其权限,状态文件不进版本库。
登录态过期表现为突然跳回登录页:在 CI 先跑一条状态自检用例,失效则触发重录任务,而不是让几十条用例一起红。
录制后的状态文件可能包含他人数据片段(localStorage 缓存):分享调试产物前先做脱敏检查。

易错点

  • 状态文件提交进仓库:会话凭据泄露,安全审计直接亮红灯
  • 只导 cookies 忽略 localStorage:SPA 的令牌存在 localStorage,登录态不生效
  • 多 worker 并发写同一状态文件:产生竞态损坏,改为只读复用、单独任务刷新
  • 登录态过期后没有自检:表现为大批用例莫名跳转登录页,排查浪费数小时

数据来源与参考

  • Playwright 官方文档:Authentication 与 storageState(playwright.dev)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌