Playwright P6: Test hooks và cách sử dụng

⏱︎

Read time:

1–2 minutes
Playwright P8: Test hooks beforeEach, afterEach, beforeAll và afterAll

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');
  });
});
PlaywrightTần suấtHay dùng khi
beforeAllTrước mỗi suitekhởi tạo trình duyệt trước khi bắt đầu suite
beforeEachTrước mỗi testlogin user vào hệ thống
afterEachSau mỗi testlogout user ra khỏi hệ thống
afterAllSau mỗi suitedọ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