Playwright

Playwright 为现代 Web 应用程序实现可靠的端到端测试。

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

处理 Playwright 的环境变量

Playwright 需要多个环境变量才能正确运行。为了确保这些变量在你的任务中(在 Strict Mode 中)可用,你需要根据你的作用域偏好,将它们添加到你的传递变量中,方法是在你的端到端任务中使用 Strict Mode,或者全局使用 passThroughEnvglobalPassThroughEnv

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

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

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

设计任务图

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

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

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

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

Turborepo logo
./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": "workspace:*"
}
}