如何让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
相关产品推荐
相关产品推荐

