Bạn thường nghe đến Playwright như một công cụ kiểm thử giao diện (UI) mạnh mẽ? Điều đó đúng, nhưng chưa đủ. API Automation Playwright đang trở thành xu hướng mới nhờ khả năng kiểm thử tầng backend siêu tốc mà không cần mở trình duyệt.
Bài viết này sẽ hướng dẫn bạn làm chủ quy trình API Automation Playwright từ A–Z. Dù bạn là người mới bắt đầu hay một Automation QA dày dạn kinh nghiệm, đây là tài liệu thực chiến bạn không thể bỏ qua.
1. Hiểu nhanh về API và vai trò trong Automation Test
Trước khi đi vào viết code, hãy chắc chắn chúng ta hiểu rõ nền tảng.
API (Application Programming Interface) là cầu nối giúp các phần mềm “trò chuyện” với nhau. Ví dụ: Khi bạn mua hàng trên Shopee/Lazada, việc check tồn kho, thanh toán, hay tính phí ship đều được xử lý ngầm qua API.
💡 Lời khuyên từ Toptest.vn: Nếu bạn là người mới bắt đầu và cần nắm vững các khái niệm cơ bản về kiểm thử API thủ công (Manual) trước khi học tự động hóa, hãy tham khảo bài viết API Testing là gì? để có nền tảng kiến thức vững chắc nhé.
Tại sao nên chọn API Automation Playwright?
Thông thường, chúng ta hay test lỗi trên giao diện (UI). Nhưng nếu logic tính toán giá tiền ở backend bị sai, thì UI có đẹp đến mấy cũng vô nghĩa.
Việc áp dụng API Automation Playwright mang lại lợi thế vượt trội:
-
Tốc độ: Test API không cần render giao diện, nên tốc độ nhanh gấp 10-20 lần so với UI Test.
-
Ổn định: Không lo bị “flaky” do mạng lag hay element bị đổi ID.
-
Sớm hơn: Phát hiện lỗi logic ngay khi Dev vừa code xong backend (Shift-left testing).
Mô hình hoạt động
Quy trình API Automation Playwright mô phỏng chính xác cách Client – Server làm việc:
-
Client (Playwright): Gửi Request (kèm Method, Headers, Body…).
-
Server: Xử lý và trả về Response.
-
Client (Playwright): Nhận Response và so sánh (Assert) với kết quả mong đợi.
2. Chiến thuật CRUD trong API Automation Playwright
Để kiểm thử toàn diện, bạn cần nắm vững 4 thao tác “quyền lực” nhất của dữ liệu (CRUD). API Automation Playwright hỗ trợ tận răng các phương thức này:
-
Create (POST): Tạo mới dữ liệu (Ví dụ: Đăng ký user mới).
-
Read (GET): Lấy thông tin (Ví dụ: Xem chi tiết profile).
-
Update (PUT/PATCH): Cập nhật dữ liệu (Ví dụ: Đổi mật khẩu, sửa địa chỉ).
-
Delete (DELETE): Xóa dữ liệu (Ví dụ: Xóa sản phẩm khỏi giỏ hàng).
3. Setup môi trường API Automation Playwright chuẩn chỉnh
Một dự án API Automation Playwright chuyên nghiệp cần có cấu trúc rõ ràng để dễ bảo trì và mở rộng.
Bước 1: Khởi tạo dự án
Mở terminal và chạy lệnh thần thánh:
npm init playwright@latest
Chọn TypeScript hoặc JavaScript tùy sở trường của bạn (Toptest.vn khuyên dùng TypeScript để code “sạch” hơn).

Bước 2: Cài đặt gói hỗ trợ (Optional)
Để tạo dữ liệu giả (fake data) và xử lý thời gian, hãy cài thêm:
npm install --save-dev @faker-js/faker luxon rimraf
Bước 3: Cấu trúc thư mục (Best Practice)
Đừng để file lộn xộn, hãy tổ chức như sau:
my-playwright-project/
├─ tests/
│ ├─ api/ # Nơi chứa kịch bản API Automation Playwright
│ └─ ui/ # Nơi chứa test UI (nếu có)
├─ playwright.config.ts
├─ package.json
└─ .gitignore
Bước 4: Cấu hình playwright.config.ts
Thiết lập baseURL giúp bạn không phải gõ lại domain nhiều lần trong code:
// playwright.config.ts
import { defineConfig } from '@playwright/test';
export default defineConfig({
use: {
baseURL: 'https://dummyjson.com', // API dùng để demo
extraHTTPHeaders: {
'Content-Type': 'application/json',
},
},
});

4. Thực hành: Kịch bản API Automation Playwright thực tế
Trong phần này, chúng ta sẽ thực hiện một luồng API Automation Playwright hoàn chỉnh: Login -> Create -> Read -> Update -> Delete.
💡 Tại sao dùng DummyJSON?
Trong bài hướng dẫn này, chúng tôi sử dụng DummyJSON – một dịch vụ API giả lập miễn phí. Điều này giúp bạn có thể copy và chạy code ngay lập tức mà không cần tốn công dựng server backend phức tạp.
Lưu ý: Mọi thao tác (Create/Update/Delete) trên đây đều là giả lập (mock) để trả về status 200 OK, dữ liệu gốc trên server sẽ không bị thay đổi vĩnh viễn.
Code mẫu chi tiết:
import { test, expect } from "@playwright/test";
// Khai báo biến toàn cục để lưu token dùng chung
let accessToken: string;
let userId: number;
// Chạy tuần tự các test case để chia sẻ biến
test.describe.configure({ mode: 'serial' });
test.describe("API Automation Playwright Demo", () => {
// 1. LOGIN - Lấy Token
test("Login & Get Token", async ({ request }) => {
const res = await request.post("/auth/login", {
data: {
username: "emilys", // User mẫu của dummyjson
password: "emilyspass",
},
});
expect(res.status()).toBe(200);
const body = await res.json();
// Lưu token để dùng cho các test sau
accessToken = body.accessToken;
expect(accessToken).toBeTruthy();
console.log("Logged in successfully!");
});

// 2. CREATE (POST) - Tạo bài viết mới
test("Create Post (POST)", async ({ request }) => {
const res = await request.post("/posts/add", {
headers: {
Authorization: `Bearer ${accessToken}`, // Đính kèm token
},
data: {
title: "Học API Automation Playwright tại Toptest.vn",
body: "Bài viết hướng dẫn automation test chất lượng",
userId: 1,
},
});
expect(res.status()).toBe(201); // 201 Created
const body = await res.json();
expect(body.title).toContain("Toptest.vn");
console.log("Created Post ID:", body.id);
});

// 3. READ (GET) - Lấy thông tin User
test("Get User Info (GET)", async ({ request }) => {
const res = await request.get("/auth/me", {
headers: { Authorization: `Bearer ${accessToken}` },
});
expect(res.status()).toBe(200);
const body = await res.json();
expect(body).toHaveProperty("email");
expect(body).toHaveProperty("username");
console.log("User Email:", body.email);
});

// 4. UPDATE (PUT) - Cập nhật bài viết
test("Update Post (PUT)", async ({ request }) => {
// Demo update post có ID là 1
const res = await request.put("/posts/1", {
headers: { Authorization: `Bearer ${accessToken}` },
data: {
title: "Updated Title by Playwright",
},
});
expect(res.status()).toBe(200);
const body = await res.json();
expect(body.title).toBe("Updated Title by Playwright");
});

// 5. DELETE (DELETE) - Xóa bài viết
test("Delete Post (DELETE)", async ({ request }) => {
const res = await request.delete("/posts/1", {
headers: { Authorization: `Bearer ${accessToken}` },
});
expect(res.status()).toBe(200);
const body = await res.json();
expect(body.isDeleted).toBe(true);
console.log("Delete status:", body.isDeleted);
});
});


5. Tại sao QA chọn API Automation Playwright?
Nếu bạn đang phân vân giữa Postman, RestAssured và Playwright, thì đây là lý do các đội ngũ hiện đại chuyển sang API Automation Playwright:
-
All-in-one: Bạn có thể viết cả UI Test và API Test trong cùng một dự án, cùng một ngôn ngữ (JS/TS). Không cần học Java cho RestAssured hay JS cho Postman riêng biệt.
-
Chia sẻ Context: Dễ dàng lấy Cookie/Token từ bước UI Login và tái sử dụng nó cho API Test (hoặc ngược lại: Login bằng API siêu nhanh để vào test UI).
-
Tích hợp CI/CD: Chạy mượt mà trên Jenkins, GitHub Actions, GitLab CI mà không cần cài đặt phức tạp như Newman.
Kết luận
Thành thạo API Automation Playwright không chỉ giúp bạn mở rộng kỹ năng kiểm thử mà còn mang lại hiệu suất vượt trội cho dự án. Thay vì chờ đợi giao diện hoàn thiện, bạn có thể “tấn công” tìm lỗi ngay từ tầng backend.
Hãy bắt đầu từ những bước đơn giản như ví dụ trên: Setup dự án, viết hàm Login, và thực hiện các bước CRUD.
Bạn muốn tìm hiểu sâu hơn?
Hãy theo dõi chuyên mục Automation Test tại Toptest.vn để cập nhật các bài viết nâng cao về cách xử lý Dynamic Token, Data Driven Testing với Playwright nhé!
Happy Testing!
Nguồn tham khảo: https://www.lambdatest.com/learning-hub/playwright-api-testing








