返回知识中心
入门

Playwright BrowserContext 生命周期与存储状态

为授权浏览器测试设计确定性的 BrowserContext 生命周期、隔离存储状态和清晰的清理边界。

文档中心

想直接进入 入门 文档吗?

这篇文章属于博客内容库。若你要步骤化配置、参考说明和持续更新,请直接进入对应 docs 分区。

浏览器上下文从创建、隔离存储、授权复用到确定性关闭的生命周期

生命周期概览

Playwright 的 BrowserContext 是隔离的浏览环境。每个上下文拥有自己的 cookie、本地存储、会话存储、权限和 service worker 状态,同时多个上下文可以共享浏览器进程。可靠的测试应在最小范围内创建上下文,执行授权流程,记录有限结果,并在 finally 中关闭。context.close() 释放浏览器资源,但不会删除服务端账户、撤销其他设备会话或清除数据库记录。

请区分三个所有者:Playwright 管理上下文对象和浏览器状态;应用管理内存状态、清理代码和会话解释;服务管理服务端会话、撤销、记录和保留期限。Playwright 的 BrowserContext 文档 和认证文档说明 API 边界,BotBrowser 多账户隔离文档说明产品提供的隔离能力。

创建是测试契约

只设置场景所需的语言、时区、权限、代理、视口和 storageState。把浏览器版本、配置用途和合成测试账户写入外部元数据,不要把真实凭据放在源代码、截图、trace 或日志中。上下文选项不是服务端一定接受某值的保证。

隔离与授权账户

同一浏览器中的两个上下文可以访问同一 origin,同时不共享 cookie 和 Web Storage。这适合账户切换、角色检查和独立结账流程,但不授权访问他人账户。使用合成账户或明确获准的测试账户,并让账户边界成为已知输入,而不是从目标站点推断。

隔离有边界。服务端可以使用自身标识符关联请求,应用也可能向其他 origin 发送数据。上下文不会隔离邮箱、支付服务、共享数据库或测试运行器写入的文件。并行测试应为每个 worker 使用独立上下文、合成账户和状态文件,避免共享文件读写竞态。

账户切换是状态转换,不是刷新页面。按应用支持的登出流程结束第一账户会话,清理需要清理的客户端状态,然后创建第二个上下文或加载第二个授权状态。验证下一次请求和可见回退,而不只检查登录按钮。service worker、内存状态、离线队列或第二个标签页可能仍保留旧视图。

隔离不等于删除

关闭上下文不会删除服务端记录、其他设备会话或上传的测试数据。删除本地 storageState 文件也不会撤销服务器会话。断言应限定为上下文关闭、新上下文没有预期客户端状态,以及应用下一次请求按契约要求未认证。

storageState 的输入与输出

storageState 是可在创建上下文时加载的序列化快照,通常包含 cookie 和 origin 存储。它是带有授权能力的敏感工件,应限制文件权限、放在公共工件之外、只使用获准的合成状态,并按团队保留策略删除或隔离。它不是完整备份,可能不含内存状态、service worker 缓存、稍后创建的 IndexedDB、原生凭据或其他 origin 的状态。

并行 worker 应写入独立输出路径,不要覆盖共享基线。登录 fixture 刷新 cookie 时生成新工件,失败则隔离候选文件。加载成功只说明浏览器能解析工件,不证明服务器仍接受 cookie,也不证明所有工作流前置条件存在。应使用无害的授权请求验证已知起始页,不打印 token、账户标识或完整响应。

加载状态能证明什么

只验证测试真正需要的契约:预期合成账户被识别、受保护路由按测试策略响应、应用能够到达已知起始页。状态缺失、过期、被阻止或被拒绝时,使用批准的登录 fixture 或在授权边界失败,不要枚举账户或静默替换状态。

页面、worker 与确定性关闭

上下文可以包含多个页面、frame、service worker 和后台请求。关闭前等待测试拥有的操作,捕获有限状态,并确保断言失败不会跳过清理。辅助函数应能处理上下文已关闭的情况,同时保留最初的断言错误。service worker 可能继续处理队列;账户切换测试应先执行应用记录的消息或缓存失效路径。

资源清理属于正确性。关闭测试创建的页面、释放下载和文件句柄、停止录制,并只删除测试拥有的临时文件。保留包含场景、结果、浏览器版本和清理结果的最小收据,不要保留凭据或用户内容。

失败与重试边界

只有文档化的临时网络失败才适合重试。每次重试都创建新上下文并使用相同的授权合成输入。区分 setup、应用断言和基础设施失败,避免重试掩盖真实的账户或清理缺陷。

不采集数据的可观察性

证据描述状态转换而不收集私人数据。BotBrowser 支持用于授权流程的隔离上下文,但不撤销服务端会话、不清理应用,也不管理秘密。

BotBrowser 能力与限制

在受控测试中,记录浏览器版本、上下文用途和合成账户标签,可以让结果可复现而不暴露凭据。

如果状态文件缺失或过期,应回到获准的登录 fixture,而不是静默替换为未知账户。

BotBrowser 提供 cookie、存储和会话状态分离的 BrowserContext,可用于重复授权工作流、比较两个已知测试账户以及验证新上下文不会继承旧客户端状态。Playwright 仍负责在测试代码中创建、使用和关闭上下文。

相关边界见浏览器存储模型和网站数据清理指南。

BotBrowser 不替代 Playwright 生命周期管理、应用清理、服务端会话撤销或秘密处理。它不能保证目标站点接受过期 cookie,不能保证 service worker 删除缓存,不能删除供应商数据库,也不能授权访问账户。测试负责人必须提供合成或明确授权的输入。

实用检查清单

为场景命名所有者,列出上下文、页面、worker、cookie、存储状态、服务端会话、离线队列和临时文件。创建新上下文并加载最小授权状态;在转换账户时执行明确登出或使用第二上下文;不记录 token 或完整响应;在 finally 中等待工作、关闭页面和上下文;隔离并行状态文件;在浏览器或应用版本变化后重跑隔离、过期、切换、worker 和失败关闭案例。

核心规则是:窄化创建、明确隔离、只序列化获准的合成状态、验证应用边界并确定性关闭。上下文是可重复客户端测试的单元,但不是服务端删除机制。

保持所有权可见的 fixture 结构

让创建、操作、断言和关闭位于清晰分开的代码段。

测试使用获准的合成账户。

上下文只接收所需参数。

每个 worker 写入独立文件。

关闭操作保留初始错误。

服务端仍是会话所有者。

本地清理不会删除远程账户。

日志只按批准期限保留。

版本更新后重新执行检查。

离线队列单独验证。

新上下文拥有已知起始状态。

setup 失败不会搜索账户。

状态快照不是完整备份。

报告只包含必要字段。

关闭放在 finally 中。

结果不含用户内容。

账户切换验证下一次请求。

测试目录只清理自有文件。

来源

#Playwright#BrowserContext#存储状态#测试隔离#清理

让 BotBrowser 从研究走向生产

先用这些指南理解模型,再进入跨平台验证、隔离上下文和面向规模化的浏览器部署。