如何声明一次测试用例并实现多次复用?
复用Playwright测试用例实现多工作流测试(无需自定义Fixtures/Page Objects)
完全可以实现,核心思路是把通用测试逻辑封装成独立的异步函数,而非直接用test()定义测试用例。这样就能在不同的工作流测试块里灵活导入、组合调用,同时不需要依赖自定义fixtures或page objects。
第一步:封装通用测试逻辑库
把每个通用测试用例的步骤封装成接收page参数的异步函数,保留test.step来维持测试报告的可读性:
// library.js const { test } = require('@playwright/test'); // 封装Test1的执行逻辑 export const runTest1 = async (page) => { await test.step('Test1 - 步骤1', async () => { // 这里写具体操作,比如 await page.click('#btn-login'); }); await test.step('Test1 - 步骤2', async () => { // 执行对应操作 }); await test.step('Test1 - 步骤3', async () => { // 执行对应操作 }); }; // 封装Test2的执行逻辑 export const runTest2 = async (page) => { await test.step('Test2 - 步骤1', async () => { // 执行对应操作 }); await test.step('Test2 - 步骤2', async () => { // 执行对应操作 }); }; // 封装Test3的执行逻辑 export const runTest3 = async (page) => { await test.step('Test3 - 步骤1', async () => { // 执行对应操作 }); await test.step('Test3 - 步骤2', async () => { // 执行对应操作 }); await test.step('Test3 - 步骤3', async () => { // 执行对应操作 }); await test.step('Test3 - 步骤4', async () => { // 执行对应操作 }); };
第二步:在工作流中导入并组合调用
在具体的工作流测试文件里,导入封装好的函数,在自己控制的测试上下文中调用,按需组合不同的测试逻辑:
// workflow.js const { test } = require('@playwright/test'); const { runTest1, runTest3 } = require('./library'); test.describe.serial('工作流1:依次执行Test1和Test3', () => { let page; test.beforeAll(async ({ browser }) => { page = await browser.newPage(); await page.goto('/'); // 使用配置文件中定义的baseURL }); // 单独执行Test1 test('执行Test1', async () => { await runTest1(page); }); // 单独执行Test3 test('执行Test3', async () => { await runTest3(page); }); // 也可以把多个测试逻辑合并到一个测试用例中执行 test('一次性执行Test1 + Test3', async () => { await runTest1(page); await runTest3(page); }); });
为什么这种方式可行?
- 避免了直接导出
test()定义的测试用例导致的重复注册问题 - 完全由你控制测试上下文(比如
page实例),确保工作流中的上下文一致 - 保留了Playwright的
test.step特性,测试报告里会清晰展示每个步骤的执行情况 - 无需额外依赖,逻辑简洁直接,可灵活组合任意数量的通用测试逻辑
内容的提问来源于stack exchange,提问作者Clarius
相关产品推荐
相关产品推荐

