Làm chủ API Automation Playwright: Hướng dẫn từ A–Z

API Automation Playwright giúp bạn làm chủ kiểm thử API với Playwright từ A–Z. Hướng dẫn chi tiết, dễ hiểu, phù hợp cho người mới và QA Automation.

TỔNG QUAN

API là gì?

 API (Application Programming Interface – Giao diện lập trình ứng dụng) là một tập hợp các quy tắc và giao thức giúp các ứng dụng, phần mềm hoặc hệ thống khác nhau có thể giao tiếp và tương tác với nhau. Trong API Automation Playwright, API được kiểm thử tự động để đảm bảo các dịch vụ backend hoạt động chính xác mà không cần thông qua giao diện người dùng.

Ví dụ: Khi sử dụng một ứng dụng thương mại điện tử, dữ liệu sản phẩm, giỏ hàng và thanh toán đều được lấy thông qua API. Việc kiểm thử bằng API Automation Playwright giúp tự động kiểm tra các endpoint này nhanh chóng và hiệu quả.

API hoạt động như thế nào?

API hoạt động theo mô hình request – response:

  1. Client gửi request:

    • Ứng dụng hoặc công cụ kiểm thử (ví dụ Playwright) gửi yêu cầu tới API endpoint.

    • Request bao gồm phương thức HTTP (GET, POST, PUT, DELETE), headers, và dữ liệu nếu cần.

  2. Server xử lý request:

    • Server nhận yêu cầu, thực hiện logic nghiệp vụ, truy xuất cơ sở dữ liệu hoặc tương tác với các dịch vụ khác.

  3. Server trả response:

    • Server gửi dữ liệu trả về cho client, thường ở định dạng JSON hoặc XML.

    • Client (hoặc kịch bản kiểm thử API Automation Playwright) nhận dữ liệu và so sánh kết quả với giá trị mong đợi.

Vì sao API quan trọng trong kiểm thử phần mềm?

 API là tầng trung gian giữa giao diện người dùng và hệ thống backend, vì vậy kiểm thử API giúp phát hiện lỗi logic xử lý dữ liệu sớm, trước khi lỗi ảnh hưởng đến UI. Với API Automation Playwright, quá trình kiểm thử API có thể được tự động hóa, giúp tiết kiệm thời gian và nâng cao chất lượng phần mềm.

 Khác với UI Testing, API Playwright cho phép kiểm thử các endpoint backend trực tiếp mà không cần mở trình duyệt. Các kịch bản test vì thế chạy nhanh hơn, ổn định hơn và ít bị ảnh hưởng bởi thay đổi giao diện.

 Playwright hỗ trợ gửi request HTTP để kiểm thử các API RESTful hoặc GraphQL, giúp tập trung xác minh logic nghiệp vụ ở tầng backend. Cách tiếp cận này đặc biệt hiệu quả khi kiểm thử các thao tác CRUD, tạo nền tảng vững chắc trước khi tiếp tục với UI Testing hoặc các bước tích hợp khác.

CRUD trong API

Trong API Automation Playwright, việc hiểu rõ các thao tác CRUD trong API là bước cơ bản nhưng cực kỳ quan trọng để thực hiện kiểm thử API hiệu quả. CRUD bao gồm Tạo (POST), Đọc (GET), Cập nhật (PUT/PATCH), Xóa (DELETE), là bốn thao tác cơ bản tương tác với dữ liệu trên server.

1. Tạo (POST)
Phương thức POST được dùng để tạo mới một tài nguyên trên server.

Ví dụ, tạo một người dùng mới:

const response = await apiContext.post('/users', {
 data: { name: 'Nguyen Van A', email: '[email protected]' } 
}); 
console.log(await response.json());

2. Đọc (GET)
GET được dùng để lấy thông tin từ server mà không thay đổi dữ liệu:

const users = await apiContext.get('/users'); 
console.log(await users.json());

3. Cập nhật (PUT hoặc PATCH)
PUT hoặc PATCH dùng để cập nhật dữ liệu đã tồn tại. PUT thường thay thế toàn bộ tài nguyên, còn PATCH chỉ cập nhật một phần:

await apiContext.put('/users/1', {
 data: { email: '[email protected]' } 
});

4. Xóa (DELETE)
DELETE dùng để xóa tài nguyên khỏi server:

await apiContext.delete('/users/1');

Với API Automation Playwright, việc áp dụng đầy đủ các thao tác CRUD giúp kiểm thử các endpoint một cách toàn diện, đảm bảo các tính năng tạo, đọc, cập nhật, xóa hoạt động đúng, đồng thời quản lý token và session cho các request để kiểm thử API trở nên chính xác và đáng tin cậy hơn.

Setup môi trường Playwright dành cho API Automation

Để bắt đầu với API Automation Playwright, việc setup môi trường đúng chuẩn là bước quan trọng để đảm bảo các kịch bản kiểm thử API chạy ổn định và dễ quản lý. Dưới đây là các bước cơ bản.

1. Tạo dự án mới bằng lệnh npm
Sử dụng lệnh sau để tạo dự án Playwright mới, bao gồm cả hỗ trợ API testing:

npm init playwright@latest

Trong quá trình cài đặt, bạn có thể chọn TypeScript hoặc JavaScript, cùng với các cấu hình mặc định cho Playwright Test.


2. Các gói hỗ trợ

Hãy cài đặt một số gói khác mà chúng ta sẽ sử dụng, như faker-js để tạo dữ liệu thử nghiệm, luxon để tạo ngày và rimraf để dọn dẹp thư mục trước mỗi lần chạy thử nghiệm.

npm install --save-dev @faker-js/faker luxon rimraf

Sau khi cài đặt các gói hoàn tất, một thư mục node_module sẽ được tạo với tất cả các gói phụ thuộc.

3. Tệp .gitignore

Theo mặc định, tệp .gitignore sẽ được tạo để các tệp không mong muốn không được lưu vào kho lưu trữ mã.

# Playwright
node_modules/
/test-results/
/playwright-report/
/blob-report/
/playwright/.cache/
/playwright/.auth/

Sao chép kho lưu trữ GitHub thử nghiệm API Playwright để làm theo các bước được đề cập trong hướng dẫn thử nghiệm API Playwright này.

4.Cấu trúc thư mục đúng chuẩn

Một dự án Playwright chuẩn thường có cấu trúc như sau:

my-playwright-project/ 
├─ tests/ # Thư mục chứa các file test 
│ ├─ api/ # Thư mục riêng cho API tests 
│ └─ ui/ # Thư mục cho UI tests (nếu có) 
├─ playwright.config.js # File config chính 
├─ package.json 
└─ node_modules/

Việc tách riêng thư mục api/ giúp quản lý các testcase API dễ dàng hơn và đảm bảo các kịch bản CRUD, token, session không bị lẫn với UI tests.
Tạo file config riêng cho API

Bạn có thể tạo một file cấu hình riêng cho API, ví dụ api.config.js hoặc api.config.ts, để quản lý baseURL, headers, token và các setting chung:

// api.config.js 
module.exports = {
 baseURL: 'https://api.example.com',
 defaultHeaders: {
 	'Content-Type': 'application/json',
 },
 timeout: 5000 
};

Sau đó, trong các test API, bạn chỉ cần import config này và tạo APIRequestContext:

import { test, request } from '@playwright/test'; 
import apiConfig from './api.config'; 
test('GET /users', async () => {
 const apiContext = await request.newContext({
	 baseURL: apiConfig.baseURL,
	 extraHTTPHeaders: apiConfig.defaultHeaders
 }); 
 const response = await apiContext.get('/users');
 console.log(await response.json()); 
});

Với cách setup này, bạn đã sẵn sàng cho API Automation Playwright, dễ dàng quản lý môi trường, token, session và thực hiện các kịch bản kiểm thử API đầy đủ.

Ví dụ kiểm thử API với Playwright

Trong các hệ thống API thực tế, hầu hết các thao tác CRUD đều yêu cầu xác thực người dùng trước khi truy cập. Vì vậy, với API Automation Playwright, quy trình kiểm thử thường bắt đầu bằng bước login để lấy access token, sau đó sử dụng token này cho toàn bộ các request CRUD nhằm đảm bảo quyền truy cập hợp lệ.

Thông qua API Playwright, tester có thể kiểm thử trực tiếp các endpoint backend bằng cách gửi request HTTP và xác thực response mà không cần phụ thuộc vào giao diện người dùng. Các ví dụ dưới đây minh họa luồng kiểm thử API phổ biến trong API Automation Playwright: từ xác thực (login) đến các thao tác CRUD, vốn là nền tảng của hầu hết các hệ thống API hiện nay.

Login – Authentication API

Ví dụ này minh họa cách sử dụng API Playwright để gọi API đăng nhập, lấy access token và chuẩn bị môi trường cho các bước kiểm thử tiếp theo. Token nhận được sẽ được dùng để xác thực các request trong toàn bộ kịch bản API Automation Playwright.

import { test, expect } from "@playwright/test";

let accessToken: string;

test("Login", async ({ request }) => {
  const res = await request.post("https://dummyjson.com/auth/login", {
    data: {
      username: "emilys",
      password: "emilyspass",
    },
  });

  expect(res.status()).toBe(200);

  const body = await res.json();
  expect(body.accessToken).toBeTruthy();

  accessToken = body.accessToken;
});

Create – POST API

Sau khi login thành công, ví dụ POST cho thấy cách API Automation Playwright gửi request tạo mới một resource và kiểm tra dữ liệu trả về từ API, bao gồm status code và nội dung response.

test("Create user - POST API", async ({ request }) => {
  const res = await request.post("https://dummyjson.com/posts/add", {
    headers: {
      Authorization: `Bearer ${accessToken}`,
      "Content-Type": "application/json",
    },
    data: {
      title: "API Automation Playwright",
      body: "This post is created using API Playwright",
      userId: 1,
    },
  });

  // Verify status code
  expect(res.status()).toBe(201);

  const responseBody = await res.json();

  // Verify response data
  expect(responseBody).toHaveProperty("id");
  expect(responseBody.title).toBe("API Automation Playwright");

  console.log("Created Post:", {
    id: responseBody.id,
    title: responseBody.title,
    userId: responseBody.userId,
  });
});

Read – GET API

Ví dụ GET minh họa cách API Playwright truy vấn dữ liệu từ backend và xác minh thông tin nhận được, đảm bảo API trả về dữ liệu chính xác theo yêu cầu.

test("Get user - GET /auth/me", async ({ request }) => {
  const res = await request.get("https://dummyjson.com/auth/me", {
    headers: {
      Authorization: `Bearer ${accessToken}`,
    },
  });

  // Verify status code
  expect(res.status()).toBe(200);

  const responseBody = await res.json();

  // Verify main user fields
  expect(responseBody).toHaveProperty("id");
  expect(responseBody).toHaveProperty("username");
  expect(responseBody).toHaveProperty("email");
  expect(responseBody).toHaveProperty("role");

  console.log("Current Auth User:", {
    id: responseBody.id,
    username: responseBody.username,
    email: responseBody.email,
    role: responseBody.role,
  });
});

Update – PUT / PATCH API

Các ví dụ PUT và PATCH cho thấy cách API Automation Playwright cập nhật toàn bộ hoặc một phần dữ liệu, giúp kiểm tra tính đúng đắn của các thao tác chỉnh sửa trên API.

test("Update user - PUT API", async ({ request }) => {
  const res = await request.put("https://dummyjson.com/posts/1", {
    headers: {
      Authorization: `Bearer ${accessToken}`,
      "Content-Type": "application/json",
    },
    data: {
      title: "Updated by Playwright",
      body: "This post is updated using PUT API",
    },
  });

  // Verify status code
  expect(res.status()).toBe(200);

  const responseBody = await res.json();

  // Verify main updated fields
  expect(responseBody.id).toBe(1);
  expect(responseBody.title).toBe("Updated by Playwright");

  console.log(" Updated Post:", {
    id: responseBody.id,
    title: responseBody.title,
  });
});

Delete – DELETE API

Ví dụ DELETE sử dụng API Playwright để xóa dữ liệu và xác nhận resource đã được loại bỏ khỏi hệ thống, hoàn tất vòng đời kiểm thử CRUD trong API Automation Playwright.

test("Delete user - DELETE API", async ({ request }) => {
  const res = await request.delete("https://dummyjson.com/posts/1", {
    headers: {
      Authorization: `Bearer ${accessToken}`,
    },
  });

  // Verify status code
  expect(res.status()).toBe(200);

  const responseBody = await res.json();

  // Verify delete flag
  expect(responseBody).toHaveProperty("isDeleted", true);
  expect(responseBody.id).toBe(1);

  console.log("Deleted Post:", {
    id: responseBody.id,
    isDeleted: responseBody.isDeleted,
  });
});

Kết luận

API Automation Playwright là lựa chọn phù hợp cho những ai muốn kiểm thử API một cách hiệu quả, dễ học và dễ áp dụng vào thực tế. Với cú pháp rõ ràng và khả năng test đầy đủ các API phổ biến, API Playwright giúp bạn nhanh chóng xây dựng các kịch bản kiểm thử ổn định và dễ bảo trì.

Làm chủ API Automation Playwright không chỉ giúp nâng cao kỹ năng kiểm thử mà còn hỗ trợ bạn hiểu rõ hơn cách hệ thống backend hoạt động. Bắt đầu từ những test API cơ bản và luyện tập thường xuyên, bạn sẽ sớm tự tin sử dụng API Playwright trong các dự án thực tế.

Bài viết liên quan