Mmaiqai.com
🤖 Automation Testing

Tự động hoá kiểm thử với Python + Playwright — cơ bản cho người chưa biết code

Tài liệu miễn phí dành cho Tester/QA chưa biết viết code — dạy lại Python từ đầu, rồi dùng Playwright để tự động hoá cả kiểm thử giao diện (UI) lẫn API, viết test bằng pytest, và chuẩn hoá thành 1 framework nhỏ.

Toàn bộ code thực hành: github.com/mmai99/book4-api-automation

16 chương (56 mục)

🐍Chương 1
Cài Python, tạo môi trường ảo, viết script đầu tiên

Cài Python + VS Code, tạo và kích hoạt môi trường ảo (venv), viết file Python đầu tiên với 4 kiểu dữ liệu cơ bản.

60 phút · 4 mục
🧩Chương 2
Hàm, danh sách/từ điển, đọc-ghi JSON

Viết hàm để gói code dùng lại nhiều lần, dùng list/dict — 2 kiểu dữ liệu gặp liên tục khi làm API — và chuyển đổi dict Python với JSON.

60 phút · 4 mục
🧪Chương 3
Cài Playwright, chạy test pytest đầu tiên

Cài Playwright cho Python + Chromium, hiểu vì sao dùng pytest thay vì chạy trực tiếp bằng python, viết và chạy test Playwright đầu tiên.

60 phút · 4 mục
🌐Chương 4
Playwright là gì, kiến trúc Browser → Context → Page

3 lớp kiến trúc của Playwright (Browser → Context → Page), tự viết script mở trình duyệt thật bằng sync_playwright, chụp ảnh màn hình bằng code.

45 phút · 3 mục
🎯Chương 5
Locator — cách Playwright tìm phần tử, thao tác cơ bản

Locator là gì và vì sao Playwright ít bị "flaky" hơn công cụ cũ, dùng fill()/click() để điền form và bấm nút, viết bài test UI đầu tiên.

45 phút · 3 mục
Chương 6
Assertion cơ bản — expect() trong Playwright

Web-first assertion của Playwright khác assert thường của Python thế nào, thêm bài test thứ 2, vài assertion hay dùng khác ngoài to_be_visible().

45 phút · 3 mục
🔌Chương 7
APIRequestContext — gọi API bằng Playwright

APIRequestContext khác Page ở chỗ nào, gọi API thật bằng .get(), đọc response.status và response.json() — bắt đầu chuyển hướng sang test API.

60 phút · 4 mục
🔍Chương 8
expect(response) và cách đọc lỗi test

expect(response) có gì và không có gì, kiểm tra 1 status code cụ thể bằng assert thường, đọc hiểu thông báo lỗi thật khi test API FAILED.

45 phút · 3 mục
🔁Chương 9
Fixture — vì sao không cần tự tạo lại mỗi test

Fixture giải quyết vấn đề gì, phân biệt scope="session" và mặc định, setup/teardown qua yield, và cách 1 fixture dùng lại fixture khác.

60 phút · 4 mục
📋Chương 10
Lập danh sách test case cho Restful-Booker

Đọc tài liệu API chính thức, gọi thử bằng curl để xác nhận hành vi thật thay vì đoán theo tài liệu, lập bảng test case hoàn chỉnh cho các chương sau.

45 phút · 3 mục
🔐Chương 11
Viết bộ test đầy đủ cho POST /auth

Viết đủ 5 test case AUTH-01 → AUTH-05, thêm fixture auth_token đăng nhập 1 lần dùng lại token cho các chương sau.

60 phút · 4 mục
🗂️Chương 12
Bộ test CRUD đầy đủ cho /booking

Viết đủ test GET/POST/PUT/PATCH/DELETE cho /booking, thêm fixture tạo booking riêng cho từng test, phát hiện 2 hành vi thật thú vị của API.

60 phút · 4 mục
🏗️Chương 13
Chuẩn hoá thành framework nhỏ

Nhận ra chỗ code lặp, tách class api_client.py dùng chung, gộp các test AUTH giống khuôn bằng @pytest.mark.parametrize.

75 phút · 5 mục
🔗Chương 14
Vì sao cần kết hợp UI + API

Vì sao đôi khi cần test UI và API trong cùng 1 bài kiểm tra, tìm endpoint API thật để dùng cho chương sau.

45 phút · 2 mục
🧵Chương 15
Viết test đối chiếu UI với API

Viết 1 test dùng cả page (UI) và APIRequestContext (API) trong cùng 1 hàm, vì sao không nên assert tổng số lượng trên dữ liệu demo dùng chung.

45 phút · 3 mục
📊Chương 16
Báo cáo kết quả và chạy tự động bằng CI

Xuất báo cáo test dạng HTML (và Allure Report), cho GitHub Actions tự động chạy toàn bộ test mỗi khi có code mới.

45 phút · 3 mục

📎 Nội dung do maiqai.com tự biên soạn, chuyển thể từ Sách 4 "Automation API với Python + Playwright" — mọi code, lệnh chạy và kết quả đều đã tự tay chạy thật để xác nhận trước khi đưa vào bài, không bịa output.