「資料驅動測試(data-driven testing)」,你可以用迴圈或是參數化的方式,把多筆資料注入到同一個 test case 裡執行
方法一:使用 test.describe 搭配迴圈
import { test, expect } from '@playwright/test';
const testData = [
{ input: 'user1', expected: 'Hello user1!' },
{ input: 'user2', expected: 'Hello user2!' },
// 其餘48筆...
];
for (const data of testData) {
test(`Should greet ${data.input}`, async ({ page }) => {
await page.goto('https://example.com');
await page.fill('#name-input', data.input);
await page.click('#submit-button');
const message = await page.textContent('#greeting');
expect(message).toBe(data.expected);
});
}
方法二:使用 test.each(Playwright v1.31 以上支援)
import { test, expect } from '@playwright/test';
const testData = [
['user1', 'Hello user1!'],
['user2', 'Hello user2!'],
// ...
];
test.describe('Greeting tests', () => {
test.each(testData)(
'should greet %s correctly',
async ({ page }, name, expectedGreeting) => {
await page.goto('https://example.com');
await page.fill('#name-input', name);
await page.click('#submit-button');
const message = await page.textContent('#greeting');
expect(message).toBe(expectedGreeting);
}
);
});
方法三:讀取外部資料(如 CSV/JSON)
import { test, expect } from '@playwright/test';
import fs from 'fs';
const testData = JSON.parse(fs.readFileSync('./test-data.json', 'utf8'));
for (const data of testData) {
test(`Should greet ${data.name}`, async ({ page }) => {
await page.goto('https://example.com');
await page.fill('#name-input', data.name);
await page.click('#submit-button');
const message = await page.textContent('#greeting');
expect(message).toBe(data.expected);
});
}