登录态复用是什么
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 缓存):分享调试产物前先做脱敏检查。