
本文参考视频:
Playwright 提速秘籍:只需登录一次,运行所有测试
对于测试自动化工程师来说,最令人沮丧的经历莫过于在测试套件中为每一个测试用例重复相同的登录步骤。这种做法不仅缓慢、低效,还会给认证系统带来不必要的压力。幸运的是,Playwright 提供了一个出人意料的简单内置功能,可以一劳永逸地解决这个问题。
1. 核心理念:一次认证,运行所有测试
Playwright 的核心解决方案是其 “storage state”(存储状态)功能。这个概念允许你只执行一次登录操作,然后将包含 cookies、本地存储等信息的会话数据保存到一个文件中。在后续的所有测试中,你可以直接重用这个文件,让测试从一个已经登录的状态开始,从而完全绕过界面登录流程。
2. 实现惊人地简单:一个设置文件 + 几行配置
实现这一流程的步骤非常清晰和直接,主要分为两步:
第一步:创建一个专门的认证设置文件
这个文件(例如 auth.setup.ts)的唯一职责就是模拟登录流程并创建一个包含会话信息的 user.json 文件,以供后续的测试使用。它的具体工作是:打开浏览器,执行登录步骤,然后调用 page.context().storageState({ path: 'user.json' }) 方法将认证状态保存下来。
一个至关重要的专业技巧是:在保存状态之前,必须确保应用程序已经完全加载完毕。如果保存得太早,可能会丢失关键的会话信息,导致后续测试失败。你可以通过等待一个明确的信号来确认页面加载完成,例如:
- 等待 URL 变为登录后的特定地址。
- 等待某个只在登录后才可见的页面元素出现。
- 等待一个关键的背景 API 请求完成(例如,等待
tags接口返回数据)。
第二步:更新 Playwright 配置文件
接下来,你需要修改 playwright.config.ts 文件,让 Playwright 知道如何协调认证与测试。这需要定义两个项目:一个用于执行认证,另一个用于运行你的实际测试。
配置的关键在于:
- 创建一个名为
setup的项目,它只运行你的auth.setup.ts文件。 - 在你主要的测试项目中,使用
dependencies: ['setup']来确保认证步骤总是在测试之前运行。 - 使用
storageState: 'user.json'来告诉主项目使用由setup项目生成的认证文件。
下面是一个配置示例:
// playwright.config.ts
...
projects: [
// 用于运行认证设置的项目
{ name: 'setup', testMatch: /.*\.setup\.ts/ },
// 主要的测试项目
{
name: 'chromium',
use: {
...devices['Desktop Chrome'],
// 使用已保存的认证状态
storageState: 'user.json',
},
// 依赖于 setup 项目
dependencies: ['setup'],
},
]
...
3. Playwright 的“黑魔法”:自动处理复杂的认证机制
Playwright 提供了 storageState 功能,可以将认证后的浏览器状态(如 Cookie、本地存储)保存到 user.json 文件中,以便后续测试复用。你完全无需为此担心。你唯一要做的就是配置好这个认证(auth)setup,然后让 Playwright 处理其余的一切。
4. 一个你绝不能忘记的关键安全步骤
这里有一个至关重要的安全警告。生成的 user.json 文件包含了访问令牌等敏感数据。因此,必须将这个文件添加到项目的 .gitignore 文件中。这样做是为了防止敏感凭证被意外提交到代码仓库并被公开,从而造成严重的安全风险。
确保你不会将此文件提交到你的代码仓库中,因为它可能包含敏感信息,例如访问令牌。
结论:一种更智能的测试方式
总而言之,使用 Playwright 的 storageState 功能可以构建更快、更高效、更稳健的测试套件。现在你的认证流程已经优化,不妨思考一下:你的测试套件中还有哪些重复的设置流程可以被简化?

319

被折叠的 条评论
为什么被折叠?



