Turborepo logo

Playwright

Playwright 实现了现代 Web 应用的可靠端到端测试。

我们建议为你想要在 monorepo 中运行的每个测试套件创建一个 Playwright 包。 这可能意味着根据你的需求,套件可以按应用程序、按域或其他方案进行拆分。 如果你不确定,请从为每个应用程序创建一个 Playwright 包开始。

处理 Playwright 的环境变量

Playwright 需要多个环境变量才能正确运行。 为了确保这些变量在你的任务中(在严格模式下)可用,你需要将它们添加到你的传递变量中,方法是在你的端到端任务中使用 passThroughEnv 或全局地使用 globalPassThroughEnv,具体取决于你的作用域偏好。

以下使用 passThroughEnv 的配置将允许以 PLAYWRIGHT_ 开头的环境变量进入 e2e 任务,并且不会影响哈希。

./turbo.json
{
  "tasks": {
    "e2e": {
      "passThroughEnv": ["PLAYWRIGHT_*"]
    }
  }
}

请注意,之所以使用传递变量,是因为我们不想在这些 Playwright 内部变量发生变化时错过缓存。 例如,PLAYWRIGHT_BROWSERS_PATH 用于定位 Playwright 使用的浏览器二进制文件,如果此位置发生变化,我们不希望错过缓存。

设计任务图

我们希望确保我们的端到端套件的正确缓存行为。 具体来说,我们希望确保在以下几种关键情况下发生缓存未命中

  • 如果测试套件发生更改,则会错过缓存。
  • 如果套件测试的代码发生更改,则会错过缓存。

第一个要求将自然而然地得到满足,因为当测试代码更改时,任务的哈希值将发生变化。 但是,第二个要求意味着你需要确保端到端测试依赖于应用程序源代码中的更改。

这种关系可以在 turbo.json 和端到端套件的 package.json 中表示。

./turbo.json
{
  "tasks": {
    "build": {
      "dependsOn": ["^build"]
    },
    "e2e": {
      "dependsOn": ["^build"] 
    }
  }
}

稍后,当你想要运行你的端到端测试时,使用 --only 标志来运行端到端测试,而无需先运行应用程序的构建。 例如,你的命令可能看起来像 turbo run e2e --filter=@repo/playwright-myapp --only

共享 Playwright 实用程序

你还可以为端到端测试套件中需要的共享实用程序创建一个通用包。 我们建议在这个共享包中使用 peerDependencies,这样你就可以访问消费者中使用的 Playwright,而无需将 Playwright 安装到共享包本身中。

./packages/playwright-utilities/package.json
{
 "name": "@repo/playwright-utilities",
 "peerDependencies": {
   "playwright": "*"
}
}

hours

总计算时间节省
开始使用
远程缓存 →

本页目录