公司动态
Playwright登录状态复用全解:storageState让多测试共享认证,E2E提速一倍
Playwright登录状态复用全解storageState让多测试共享认证E2E提速一倍【免费下载链接】playwrightPlaywright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API.项目地址: https://gitcode.com/GitHub_Trending/pl/playwright在 Playwright 端到端E2E测试中登录是最拖慢速度的环节之一——每个用例都重复走一遍登录流程既慢又不稳定。Playwright 登录状态复用正是为解决这个问题而生借助内置的storageState机制只需登录一次把认证状态保存到文件后续所有测试都能共享这份已登录状态直接跳过登录步骤。据 Playwright 官方统计合理使用登录状态复用可以让 E2E 测试套件提速一倍以上还能减少因登录页变动导致的偶发失败。 本文用最短路径带你掌握 storageState 的完整用法从入门到进阶一次讲透。为什么需要登录状态复用先看一下没有状态复用时的痛点问题表现 速度慢每条用例前都要填账号、点登录、等跳转几十秒起步 不稳定登录页改版、验证码、网络抖动都会让测试随机失败 干扰多并行跑测试时多个用例抢同一个账号状态互相污染Playwright 的官方 docs/src/auth.md 明确说每个测试运行在隔离的浏览器上下文中可以预先加载已认证的登录状态从而免除每个测试都认证的需要加快执行速度。这正是登录状态复用的价值所在。storageState 是什么一个文件打包全部认证信息Web 应用的登录态通常保存在这几种地方Cookie、localStorage、IndexedDB以及较新的 passkeyWebAuthn 凭据。storageState就是把这些信息一次性全部打包成一个 JSON 文件✅ 保存时用context.storageState({ path: user.json })把当前认证状态写到文件✅ 恢复时创建新上下文时传入storageState: user.json测试一开始就已经处于登录状态 妙处在于这份状态文件可以跨浏览器复用。在 Chromium 里登录保存的状态可以直接给 Firefox 和 WebKit 使用不需要每个浏览器都跑一遍登录。快速上手三步实现多测试共享认证第一步创建一个 setup 项目负责登录新建tests/auth.setup.ts完成登录流程后把状态存盘setup(authenticate, async ({ page }) { await page.goto(https://example.com/login); await page.getByLabel(Username).fill(username); await page.getByLabel(Password).fill(password); await page.getByRole(button, { name: Sign in }).click(); // 等登录完成、cookie 设置好 await page.waitForURL(https://example.com/); // 把登录状态保存到文件 await page.context().storageState({ path: playwright/.auth/user.json }); });第二步在配置中声明依赖并共享状态在 playwright.config.ts 中加入setup项目并让其他项目声明依赖、指定storageStateprojects: [ { name: setup, testMatch: /.*\.setup\.ts/ }, { name: chromium, use: { ...devices[Desktop Chrome], storageState: playwright/.auth/user.json, // 共享认证状态 }, dependencies: [setup], // 测试前总是先跑登录 }, ]项目依赖机制的详细说明见 docs/src/test-projects-js.mdstorageState作为测试选项的完整定义见 docs/src/test-use-options-js.md。第三步测试代码零改动天生已登录test(has title, async ({ page }) { // page 已经处于登录状态直接开测 await page.goto(https://example.com/dashboard); });在 VSCode 的 Playwright 测试面板中你会看到 setup 项目先执行、再运行所有依赖它的测试登录状态文件自动在幕后流转进阶每个并行 Worker 一个账号上面共享一个账号的方案适合只读场景。如果你的测试会修改服务端状态比如一个测试在改设置、另一个测试在验证设置页并行时共享账号会互相干扰。Playwright 官方推荐的进阶做法是每个并行 Worker 登录一次、各用一个独立账号Worker 内所有测试复用同一份状态。核心是用test.info().parallelIndex区分 Worker再配合 Worker 级 Fixture 把认证动作提到 Worker 作用域执行完整代码可参考 docs/src/auth.md 中的 one account per parallel worker 章节。同样的思路还支持多角色测试在 setup 项目里登录 admin 和 user 两个账号分别存成admin.json和user.json不同测试文件通过test.use({ storageState: .../admin.json })指定各自的身份甚至可以在同一条用例里开两个上下文模拟两个角色的实时互动。避坑指南5 个最佳实践状态文件绝不提交到仓库playwright/.auth里可能包含能冒充你的敏感 Cookie 和凭据务必加入.gitignore。♻️过期就重新生成登录状态有时效过期后删除文件重跑 setup 即可若无需跨次运行保留可把状态存到outputDir它每次运行前会自动清理。️UI Mode 下手动刷新认证UI Mode 默认不跑 setup 项目为了速度认证过期时勾选 setup 项目、手动点一次运行即可。注意 sessionStorage 不包含在内storageState 覆盖 Cookie、localStorage、IndexedDB 和 passkey但不含sessionStorage它不跨页面持久化。极少数依赖它的登录体系需要用addInitScript手动搬运docs/src/auth.md 给出了现成片段。测试未登录页面要显式重置某些用例如注册流程需要未登录环境在该文件里用test.use({ storageState: { cookies: [], origins: [] } })清空状态即可无需改动全局配置。配置好storageState后同一份登录状态可以直接驱动多浏览器测试——在 VSCode 的项目选择器中勾选 Chromium、Firefox、WebKit它们都会带着认证状态同时起跑总结场景推荐方案测试只读、不修改服务端数据共享一个账号的 setup 项目 storageState测试会修改服务端状态每 Worker 一个账号的 Worker Fixture多角色协作测试多份状态文件 test.use()按文件指定一句话总结登录一次、存成文件、处处复用。掌握storageState后你的 Playwright E2E 套件将更快、更稳也更省心。更多细节请深入阅读官方文档 docs/src/auth.md 与 docs/src/browser-contexts.md。【免费下载链接】playwrightPlaywright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API.项目地址: https://gitcode.com/GitHub_Trending/pl/playwright创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考