Playwright中测试启动前执行自定义代码(删除allure-results文件夹)的实现方式咨询
Playwright中测试启动前执行自定义代码(删除allure-results文件夹)的实现方式咨询
嗨,我来帮你搞定这个问题!Playwright提供了几种和WebdriverIO的beforeSession类似的机制,能让你在测试启动前执行清理(比如删除allure-results文件夹)这类自定义操作,下面给你详细拆解:
1. 全局前置脚本(globalSetup)—— 对应WebdriverIO的beforeSession
这是最接近你提到的beforeSession的方案,它会在所有测试进程启动前只执行一次,非常适合做全局的初始化/清理操作,比如删除测试报告文件夹。
实现步骤:
- 首先创建一个全局前置脚本文件,比如
global-setup.ts:
import { fullConfig } from '@playwright/test'; import fs from 'fs/promises'; async function globalSetup(config: typeof fullConfig) { // 定义要删除的文件夹路径 const allureResultsDir = './allure-results'; try { // 递归删除文件夹,force: true表示文件夹不存在也不会报错 await fs.rm(allureResultsDir, { recursive: true, force: true }); console.log(`已成功删除${allureResultsDir}文件夹`); } catch (err) { console.error(`删除${allureResultsDir}文件夹时出错:`, err); } } export default globalSetup;
- 然后在你的
playwright.config.ts里配置这个脚本:
import { defineConfig } from '@playwright/test'; export default defineConfig({ globalSetup: './global-setup.ts', // 指定全局前置脚本路径 // 其他配置项... });
2. 测试套件级前置钩子(test.beforeAll)
如果你需要在某个测试套件的所有用例执行前执行清理(或者全局所有用例前,只要把钩子放在全局测试入口里),可以用test.beforeAll:
示例代码:
import { test } from '@playwright/test'; import fs from 'fs/promises'; // 这个钩子会在当前测试文件的所有用例执行前运行一次 test.beforeAll(async () => { const allureResultsDir = './allure-results'; await fs.rm(allureResultsDir, { recursive: true, force: true }); }); // 你的测试用例 test('示例测试', async ({ page }) => { await page.goto('https://example.com'); // ...测试逻辑 });
如果要让这个钩子全局生效,可以把它放在一个被所有测试文件引入的公共测试配置文件里,或者用test.extend来扩展全局测试上下文。
补充说明:删除文件夹的实现细节
上面用的是Node.js原生的fs/promises模块(异步版本),如果你习惯用同步代码,也可以用fs.rmSync:
import fs from 'fs'; fs.rmSync('./allure-results', { recursive: true, force: true });
两种方式都能实现递归删除文件夹,force: true参数确保文件夹不存在时不会抛出错误,避免影响测试启动。
备注:内容来源于stack exchange,提问作者Aman Sharma
相关产品推荐
相关产品推荐

