「資料驅動測試(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);
  });
}