Playwright không chỉ hỗ trợ kiểm thử giao diện người dùng (UI) mà còn cung cấp các công cụ mạnh mẽ để kiểm thử API. Bạn có thể sử dụng Playwright để gửi các yêu cầu HTTP (GET, POST, PUT, DELETE, v.v.) và kiểm tra phản hồi từ API.
Cách Thực Hiện API Testing Trong Playwright
Playwright cung cấp đối tượng request
để thực hiện các yêu cầu HTTP. Bạn có thể sử dụng nó để gửi các yêu cầu API và kiểm tra phản hồi.
Ví dụ về gửi yêu cầu GET:
test("should get all clinics successfully", async ({ request }) => { const response = await request.get(`${SERVER_PORT}/api/get-all-clinics`, { params: { id: "ALL" }, }); let data = await response.json(); expect(response.status()).toEqual(200); expect(data.clinics.length).toBeGreaterThanOrEqual(1); });
Sử Dụng Request Context
Trong Playwright, Request Context là một cách để tạo một ngữ cảnh HTTP riêng biệt cho các yêu cầu API. Nó cho phép bạn cấu hình các thông số như baseURL
, headers
, và cookies
để sử dụng trong các yêu cầu HTTP. Điều này rất hữu ích khi bạn cần thực hiện nhiều yêu cầu API với cùng một cấu hình.
test("Verify API with custom context", async ({ playwright }) => { const apiContext = await playwright.request.newContext({ baseURL: "<https://jsonplaceholder.typicode.com>", extraHTTPHeaders: { Authorization: `Bearer YOUR_ACCESS_TOKEN`, }, }); const response = await apiContext.get("/posts/1"); expect(response.status()).toBe(200); const responseBody = await response.json(); expect(responseBody.id).toBe(1); });
Gửi API Request Từ Kiểm Thử UI
Trong Playwright, bạn có thể kết hợp kiểm thử giao diện người dùng (UI) với các yêu cầu API để kiểm tra tích hợp giữa API và giao diện. Điều này rất hữu ích khi bạn cần chuẩn bị dữ liệu trước khi kiểm thử UI hoặc xác minh trạng thái sau khi thực hiện hành động trên giao diện.
test("Create data via API and verify on UI", async ({ page, request }) => { // Gửi yêu cầu API để tạo dữ liệu const response = await request.post("<https://jsonplaceholder.typicode.com/posts>", { data: { title: "Test Post", body: "This is a test post.", userId: 1, }, }); expect(response.status()).toBe(201); const postData = await response.json(); // Điều hướng đến giao diện và kiểm tra dữ liệu await page.goto(`https://example.com/posts/${postData.id}`); await expect(page.locator("h1")).toHaveText("Test Post"); await expect(page.locator("p")).toHaveText("This is a test post."); });
Sử Dụng Lại Trạng Thái Xác Thực
Ứng dụng web sử dụng xác thực dựa trên cookie hoặc dựa trên mã thông báo, trong đó trạng thái đã xác thực được lưu trữ dưới dạng cookie. Playwright cung cấp phương thức apiRequestContext.storageState() có thể được sử dụng để truy xuất trạng thái lưu trữ từ ngữ cảnh đã xác thực và sau đó tạo ngữ cảnh mới với trạng thái đó.
Ví dụ: Lưu trạng thái sau khi đăng nhập
import { test } from "@playwright/test"; test("Save authentication state", async ({ page }) => { const requestContext = await request.newContext({ httpCredentials: { username: 'user', password: 'passwd' } }); await requestContext.get(`https://api.example.com/login`); // Lưu trạng thái xác thực vào file await requestContext.storageState({ path: 'state.json' }) });
Ví dụ: Sử dụng trạng thái đã lưu
import { test } from "@playwright/test"; test.use({ storageState: "auth.json" }); test("Access dashboard with saved authentication state", async ({ page }) => { // Điều hướng đến trang dashboard await page.goto("<https://example.com/dashboard>"); // Kiểm tra rằng người dùng đã đăng nhập await expect(page.locator("#welcome-message")).toHaveText("Welcome, Test User!"); });
Mình xin bài viết hôm nay tại đây. Để tìm hiểu nhiều hơn về API trong test automation với Playwright, bạn có thể truy cập trang tài liệu chính thức của Playwright tại đây nhé.
Happy testing.