Vọc Vạch Playwright

[Vọc Playwright] – Class test

Phong Do Phong Do · 09/09/2024 · 8 phút đọc

https://playwright.dev/docs/api/class-test

Playwright Test

  • Playwright Test cung cấp function test để khai báo test và function expect để viết các assertion
import { test, expect } from '@playwright/test';

test('basic test', async ({ page }) => {
  await page.goto('https://playwright.dev/');
  const name = await page.innerText('.navbar__title');
  expect(name).toBe('Playwright');
});

Methods

test

  • Khai báo 1 test
    • test(title, body)
    • test(title, details, body)
import { test, expect } from '@playwright/test';

test('basic test', async ({ page }) => {
  await page.goto('https://playwright.dev/');
  // ...
});

Tags

  • Bạn có thể gán tag cho test bằng cách cung cấp thông tin chi tiết bổ sung cho test. Hoặc bạn có thể thêm tag vào title của test. Lưu ý rằng, mỗi tag phải bắt đầu bằng ký hiẹuw @
import { test, expect } from '@playwright/test';

test('basic test', {
  tag: '@smoke',
}, async ({ page }) => {
  await page.goto('https://playwright.dev/');
  // ...
});

test('another test @smoke', async ({ page }) => {
  await page.goto('https://playwright.dev/');
  // ...
});
  • Test tag được hiển thị trong test report và có sẵn cho custom reporter thông qua TestCase.tags property
  • Bạn cũng có thể filter test theo tag của chúng trong quá trình thực thi test
    • Trong command line
    • Trong file config với testConfig.grep và testProject.grep
  • Tìm hiểu thêm: https://playwright.dev/docs/test-annotations#tag-tests

Annotations

  • Bạn có thể thêm annotate cho test bằng cách cung cấp thông tin chi tiết bổ sung cho test
import { test, expect } from '@playwright/test';

test('basic test', {
  annotation: {
    type: 'issue',
    description: 'https://github.com/microsoft/playwright/issues/23180',
  },
}, async ({ page }) => {
  await page.goto('https://playwright.dev/');
  // ...
});
  • Test annotations được hiển thị trong test report và có sẵn cho custom reporter thông qua TestCase.annotations
  • Bạn cũng có thể thêm annotations trong thời gian chạy bằng cách thao tác với testInfo.annotations

Arguments

  • title string# : Tiêu đề test
  • details Object (optional) Added in: v1.42#
    • tag string | Array<string> (optional)
    • annotation Object | Array<Object> (optional)
      • type string
      • Annotation type, for example ‘issue’.
    • description string (optional)
    • Mô tả annotation optional, ví dụ: issue url
  • Additional test details.
  • body function(Fixtures, TestInfo)#
    • Test body nhận 1 hoặc 2 arguments: 1 object chứa các fixture và TestInfo (optional)

test.afterAll

  • test.afterAll là 1 function đặc biệt, được thực thi 1 lần cho mỗi worker sau khi tất cả test hoàn thành
  • Nếu bạn gọi test.afterAll trong phạm vi 1 file test, nó sẽ chạy sau tất cả các test trong file đó hoàn thành
  • Nếu bạn gọi test.afterAll bên trong 1 test.describe() group, nó sẽ chạy sau khi tất cả các test trong group đó hoàn thành
test.afterAll(async () => {
  console.log('Done with tests');
  // ...
});
  • Hoặc bạn co thể khai báo một hook với title
test.afterAll('Teardown', async () => {
  console.log('Done with tests');
  // ...
});

Arguments

  • title string (optional) Added in: v1.38#
    • Title của hook (optional)
  • hookFunction function(Fixtures, TestInfo)#
    • Function thực thi hook, nhận 1 hoặc 2 agrument: 1 object chứa các fixture của worker và TestInfo (optional)

Details

  • Khi có nhiều hook afterAll được thêm vào, chúng sẽ chạy theo thứ tự đăng ky
  • Lưu ý rằng tiến trình worker sẽ được restarted khi test bị lỗi và hook afterAll sẽ chạy lại trong worker mới
  • Playwright sẽ tiếp tục chạy tất cả các hook có liên quan ngay cả khi 1 sô hook bị lỗi
    • test.afterAll(hookFunction)
    • test.afterAll(title, hookFunction)

test.afterEach

  • test.afterEach là 1 function đặc biệt, được thực thi sau mỗi test
  • Nếu bạn gọi test.afterEach trong phạm vi 1 file test, nó sẽ chạy sau mỗi test trong file đó
  • Nếu bạn gọi test.afterEach bên trong 1 test.describe() group, nó sẽ chạy sau mỗi test trong group đó
import { test, expect } from '@playwright/test';

test.afterEach(async ({ page }) => {
  console.log(`Finished ${test.info().title} with status ${test.info().status}`);

  if (test.info().status !== test.info().expectedStatus)
    console.log(`Did not run as expected, ended up at ${page.url()}`);
});

test('my test', async ({ page }) => {
  // ...
});
  • Hoặc bạn cũng có thể khai báo với 1 hook với title
test.afterEach('Status check', async ({ page }) => {
  if (test.info().status !== test.info().expectedStatus)
    console.log(`Did not run as expected, ended up at ${page.url()}`);
});

Arguments

  • title: Tiêu đề của hook (optional)
  • hookFunction: Function thực thi hook, nhận 1 hoặc 2 tham số: 1 object chứa các fixture và TestInfo (optional)

Details

  • Khi có nhiều hook afterEach được thêm vào, chúng sẽ chạy theo thứ tự đăng ký
  • Playwright sẽ tiếp tục chạy tất cả các hook có liên quan ngay cả khi 1 số hook bị lỗi

test.beforeAll

  • test.beforeAll được thực thi một lần cho mỗi worker trước khi tất cả các test bắt đầu
  • Nếu gọi test.beforeAll trong phạm vi 1 file test, nó sẽ chạy trước khi tất cả các test trong file đó bắt đầu
  • Nếu gọi test.beforeAll bên trong 1 test.describe() group, nó sẽ chạy trước khi tất cả các test trong group đó bắt đầu
import { test, expect } from '@playwright/test';

test.beforeEach(async ({ page }) => {
  console.log(`Running ${test.info().title}`);
  await page.goto('https://my.start.url/');
});

test('my test', async ({ page }) => {
  expect(page.url()).toBe('https://my.start.url/');
});
  • Hoặc cũng có thể khai báo 1 hook với title
test.beforeEach('Open start URL', async ({ page }) => {
  console.log(`Running ${test.info().title}`);
  await page.goto('https://my.start.url/');
});

Arguments

  • title: Tiêu đề của hook (optional)
  • hookFunction: Function thực thi hook, nhận 1 hoặc 2 tham số: 1 object chứa các fixture của worker và TestInfo (optional)

Details

  • Khi có nhiều hook beforeAll được thêm vào, chúng sẽ chạy theo thứ tự đăng ký
  • Lưu ý rằng tiến trình worker sẽ được khởi động lại khi test bị lỗi và hook beforeAll sẽ chạy lại trong worker mới
  • Playwright sẽ tiếp tục chạy tất cả các hook có liên quan ngay cả khi 1 số hook bị lỗi

test.describe

  • test.describe cho phép group các test lại với nhau
    • test.describe(title, callback)
    • test.describe(callback)
    • test.describe(title, details, callback)
  • Bạn có thể khai báo 1 group test với title. Title sẽ hiển thị trong test report như 1 phần của title của mỗi test
test.describe('two tests', () => {
  test('one', async ({ page }) => {
    // ...
  });

  test('two', async ({ page }) => {
    // ...
  });
});

Anonymous group

  • Bạn cũng có thể khai báo 1 anonymous group test(không có title). Điều này rất tiện lợi để cung cấp 1 option chung cho 1 group test với test.use()
test.describe(() => {
  test.use({ colorScheme: 'dark' });

  test('one', async ({ page }) => {
    // ...
  });

  test('two', async ({ page }) => {
    // ...
  });
});

Tags

  • Bạn có thể gán tag cho tất cả các test trong 1 group bằng cách cung cấp addtional details. Lưu ý rằng mỗi thẻ phải bắt đầu bằng @
import { test, expect } from '@playwright/test';

test.describe('two tagged tests', {
  tag: '@smoke',
}, () => {
  test('one', async ({ page }) => {
    // ...
  });

  test('two', async ({ page }) => {
    // ...
  });
});

Annotations

  • Bạn có thể thêm annotations cho tất cả các test trong 1 group bằng cách cung cấp addtional details
import { test, expect } from '@playwright/test';

test.describe('two annotated tests', {
  annotation: {
    type: 'issue',
    description: 'https://github.com/microsoft/playwright/issues/23180',
  },
}, () => {
  test('one', async ({ page }) => {
    // ...
  });

  test('two', async ({ page }) => {
    // ...
  });
});

Arguments

  • title string (optional)
  • details Object (optional)
    • tag string | Array<string> (optional)
    • annotation Object | Array<Object> (optional)
      • type string
      • description string (optional)
    • Additional details for all tests in the group.
  • callback function
    • Function thực thi test, được chạy ngay lập tức khi gọi test.describe(). Bất kỳ test nào được khai báo trong function này sẽ thuộc về group test đó

Phong Do
Tác giả
Phong Do