Hook đặt phần chuẩn bị và dọn dẹp dùng chung bên ngoài thân test. Hãy dùng hook cho việc thật sự chung, để đỡ bị viết đi viết lại trong từng test
Ví dụ đầy đủ
import { test, expect } from '@playwright/test';
test.describe('Giỏ hàng', () => {
test.beforeAll(async () => {
console.log('Chuẩn bị dữ liệu một lần trước khi chạy test');
});
test.beforeEach(async ({ page }) => {
await page.goto('/products');
});
test.afterEach(async ({ page }, testInfo) => {
if (testInfo.status !== testInfo.expectedStatus) {
await page.screenshot({ path: testInfo.outputPath('failure.png') });
}
});
test.afterAll(async () => {
console.log('Dọn dữ liệu một lần khi test kết thúc');
});
test('thêm sản phẩm', async ({ page }) => {
await page.getByRole('button', { name: 'Thêm vào giỏ' }).click();
await expect(page.getByTestId('cart-count')).toHaveText('1');
});
});*** Settings ***
Library SeleniumLibrary
Suite Setup Chuẩn Bị Suite
Suite Teardown Dọn Suite
Test Setup Mở Trang Sản Phẩm
Test Teardown Đóng Browser
*** Test Cases ***
Thêm Sản Phẩm
Click Button Thêm vào giỏ
Element Text Should Be css=[data-testid="cart-count"] 1
*** Keywords ***
Chuẩn Bị Suite
Log Chuẩn bị dữ liệu một lần
Dọn Suite
Log Dọn dữ liệu một lần
Mở Trang Sản Phẩm
Open Browser ${BASE_URL}/products chrome
Đóng Browser
Close Browser| Playwright | Tần suất | Hay dùng khi |
|---|---|---|
beforeAll | Trước mỗi suite | khởi tạo trình duyệt trước khi bắt đầu suite |
beforeEach | Trước mỗi test | login user vào hệ thống |
afterEach | Sau mỗi test | logout user ra khỏi hệ thống |
afterAll | Sau mỗi suite | dọn dẹp sau khi kết thúc suite, đóng trình duyệt |
Lưu ý
Ngoài 4 hooks bên trên, Playwright còn hỗ trợ globalSetup và globalTeardown, sẽ được giới thiệu ở các bài sau. 2 mức độ này là cao nhất so với các hook bên trên.
Bài tập thực hành
- Viết 1 test suite bao gồm ít nhất 2 test case, và chứa tất cả các thành phần bên trên, để nắm được luồng chạy của nó như thế nào




