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);
});
}*** Settings ***
Library SeleniumLibrary
Test Template Kiểm Tra Email
*** Test Cases ***
TEST 1 - Kiểm tra Email hợp lệ
[Template] Kiểm tra Email hợp lệ
# EMAIL EXPECTED
an@example.com Hợp lệ
sai-email Email không hợp lệ
*** Keywords ***
Kiểm tra Email hợp lệ
[Arguments] ${email} ${expected}
Go To ${BASE_URL}/register
Input Text id=email ${email}
Click Button Kiểm tra
Element Text Should Be css=[role="alert"] ${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-parseimport 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




