You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Playwright的Teardown项目不受E2E测试失败影响?

问题:确保Teardown无论测试结果如何都执行

我已经实现了测试前执行Setup、测试后执行Teardown,但目前仅当全部e2e_tests通过时才运行Teardown。现需让Teardown无论e2e_tests是否成功都执行,请问应如何修改以下配置?

projects: [
        {
            name: 'setup',
            testMatch: /global\.setup\.ts/,
          },
        {
            name: 'e2e_tests',
            use: {
                ...devices['Desktop Chrome'],
            },
            dependencies: ['setup'],
        },
        {
            name: 'teardown',
            testMatch: /global\.teardown\.ts/,
            dependencies: ['e2e_tests'],
          },
    ],

我曾考虑修改依赖项,但依赖顺序无误,仅需让Teardown不依赖e2e_tests的执行结果。


解决方案

有两种可靠的修改方式:

方式1:使用顶层全局配置(推荐)

直接将Setup和Teardown从projects数组中移出,放在配置文件顶层。Playwright会自动在所有测试执行前运行Setup,所有测试结束后(无论成功或失败)执行Teardown:

import { defineConfig, devices } from '@playwright/test';

export default defineConfig({
  globalSetup: './global.setup.ts',
  globalTeardown: './global.teardown.ts',
  projects: [
    {
      name: 'e2e_tests',
      use: {
        ...devices['Desktop Chrome'],
      },
    },
  ],
});

方式2:保留Projects结构并调整配置

如果需要继续使用projects结构,可通过以下修改实现需求:

projects: [
  {
    name: 'setup',
    testMatch: /global\.setup\.ts/,
  },
  {
    name: 'e2e_tests',
    use: {
      ...devices['Desktop Chrome'],
    },
    dependencies: ['setup'],
  },
  {
    name: 'teardown',
    testMatch: /global\.teardown\.ts/,
    dependencies: ['setup'], // 仅依赖setup,不再依赖e2e_tests
    runAlways: true, // 强制该项目始终执行,不受其他项目结果影响
    testIgnore: '**/*', // 确保只运行指定的清理文件
  },
],

关键修改说明

  • 移除teardown对e2e_tests的依赖,避免因测试失败导致清理步骤被跳过
  • runAlways: true(Playwright 1.30+支持)确保清理项目无论其他测试状态如何都会执行
  • testIgnore避免匹配到其他测试文件,保证仅运行全局清理逻辑

内容的提问来源于stack exchange,提问作者Arpit Rege

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 16:55:06