Playwright P9: Data-driven test với CSV và dữ liệu viết trực tiếp

⏱︎

Read time:

1–2 minutes
Playwright P11: Data-driven test với CSV và dữ liệu viết trực tiếp
Mẹo nhớ
Đôi khi phải truyền 1 đống dữ liệu khác nhau vào 1 bài test. Ví dụ như màn đăng nhập, phải truyền hàng chục kịch bản email và password khác nhau. Đó gọi là Data-Driven test

Data-driven viết trực tiếp trong code

import { test, expect } from '@playwright/test';

const cases = [
  { email: 'an@example.com', expected: 'Hợp lệ' },
  { email: 'sai-email', expected: 'Email không hợp lệ' },
];

for (const data of cases) {
  test('email: ' + data.email, async ({ page }) => {
    await page.goto('/register');
    await page.getByLabel('Email').fill(data.email);
    await page.getByRole('button', { name: 'Kiểm tra' }).click();
    await expect(page.getByRole('alert')).toHaveText(data.expected);
  });
}
  • Tạo 1 mảng dữ liệu chứa các kịch bản data cần test
  • Dùng vòng lặp để “nhét” data vào test tương ứng

Khi nào dùng on-screen data?

  • Dữ liệu ít
  • Viết kiểu này tiện, nhanh, không cần mở file riêng để xem dữ liệu. Tuy nhiên nếu dữ liệu dài quá sẽ rất khó theo dõi

Đọc dữ liệu từ CSV

Chuẩn bị 1 CSV file như bên dưới, yêu cầu bạn đã phải cài 1 thư viện hỗ trợ đọc file CSV:

test_case,email,expected
email_hop_le,an@example.com,Hợp lệ
email_sai,sai-email,Email không hợp lệ
npm install -D csv-parse
import fs from 'node:fs';
import { parse } from 'csv-parse/sync';
import { test, expect } from '@playwright/test';

const records = parse(fs.readFileSync('data/emails.csv'), {
  columns: true,
  skip_empty_lines: true,
});

for (const row of records) {
  test(row.test_case, async ({ page }) => {
    await page.goto('/register');
    await page.getByLabel('Email').fill(row.email);
    await page.getByRole('button', { name: 'Kiểm tra' }).click();
    await expect(page.getByRole('alert')).toHaveText(row.expected);
  });
}

Khi nào dùng CSV?

  • Dữ liệu quá lớn, không viết được hết ra file ts