NỘI DUNG BÀI HỌC
✅ Thiết lập thành công môi trường Playwright + Pytest.
✅ Phân tích vai trò của từng thư viện: Pytest, PIP, Fixture page.
✅ Viết và chạy được Test Case Playwright đầu tiên, tạo được báo cáo HTML tự động.
🧠 I. PLAYWRIGHT: NGƯỜI MÁY KIỂM THỬ HIỆN ĐẠI
👀 Kiểm thử tự động là gì?
🗒 Kiểm thử tự động là quá trình tự động hóa:
-
-
-
-
- Thực thi kịch bản kiểm thử tự động
- Tổng hợp và báo cáo kết quả kiểm thử
-
-
-
💪 Điểm mạnh của kiểm thử tự động:
-
-
-
-
- Nhanh - nhiều - liên tục: Kiểm thử tự động thực thi kịch bản NHANH hơn nên thực thi được NHIỀU lần hơn từ đó sẽ thực thi được LIÊN TỤC
- Không chủ quan: Hạn chế được các lỗi phát sinh do sự chủ quan của con người
- Đỡ tổn tài nguyên: Giảm thiểu được các tài nguyên kiểm thử (thiết bị kiểm thử, nhân lực kiểm thử,...)
- Phản hồi nhanh: Có phản hồi nhanh các báo cáo về chất lượng phần mềm cho các bên liên quan (QA/QC, BA, PO, Dev,...)
- Tính nhất quán: Các lần thực thi kiểm thử luôn có sự nhất quán (về mặt dữ liệu kiểm thử, các bước kiểm thử,...) LƯU Ý: Nó sẽ là điểm mạnh khi phần mềm không có sự thay đổi làm ảnh hưởng đến script kiểm thử tự động
- Tin cậy: Do thực hiện được nhiều lần và liên tục nên năng suất kiểm thử sẽ tăng lên --> Mức độ tin cậy của báo cáo kiểm thử sẽ tăng lên
-
-
-
🫵 Điểm yếu của kiểm thử tự động:
-
-
-
-
- Chi phí đầu tư ban đầu cao
- Mất nhiều thời gian phát triển và bảo trì
- Khả năng thích ứng với những thay đổi của phần mềm không cao
- Chỉ có thể đối chiếu kết quả với những gì được lập trình
- Không thể thực hiện một số đánh giá về chất lượng phần mềm
-
-
-
📒 Các hoạt động trong kiểm thử tự động
-
-
-
-
- Sử dụng công cụ/phần mềm để lập trình theo một bộ kịch bản kiểm thử
- Sử dụng công cụ/phần mềm để cấu hình và kiểm soát cho các phiên thực thi kiểm thử tự động
- Tự động hóa thực thi các bộ kịch bản kiểm thử tự động
- Đối chiếu kết quả mong đợi và tổng hợp báo cáo
-
-
-
1️⃣. Playwright là gì?
Khái niệm: Playwright là một công cụ tự động hóa - "người máy kiểm thử web" (Web Testing Robot) của Microsoft, giúp bạn dùng code để mô phỏng hành vi của người dùng thật trên các trình duyệt như Chrome, Firefox, Safari – nhưng với tốc độ của máy!
Ví dụ thực tế: Tưởng tượng bạn thuê một “người dùng robot 🤖” cực kỳ nhanh nhẹn và chính xác để kiểm tra website 24/7.
Robot này có thể:
-
Mở trình duyệt, gõ URL, click chuột, nhập text, chọn dropdown,…
-
Kiểm tra xem một trang có tải đúng nội dung hay không.
2️⃣. Tại sao chọn Playwright? (Giá trị cốt lõi)
| Tính năng | Giải thích đơn giản | Ví dụ thực tế / Automation |
| 🕐 Auto-Wait (Tự động chờ thông minh) | Khi bạn nhấp vào nút, website mất 1–2s để tải. Playwright tự động đợi cho đến khi phần tử sẵn sàng, không cần sleep(). | Test đăng nhập không bị lỗi “element not found” do web load chậm. |
| ⚡Siêu tốc (Speed) | Playwright chạy headless (ẩn giao diện) nên cực nhanh, như một chiếc xe F1 🏎️. | Trong CI/CD, hàng trăm test có thể chạy song song trong vài phút. |
| 🌐 Đa năng | Chỉ cần cài một lần, Playwright hỗ trợ chạy trên nhiều trình duyệt: Chromium (Chrome), Firefox, WebKit (Safari). | QA có thể test cross-browser mà không phải viết lại code. |
💡 Ví dụ minh họa:
Khi test login web, Selenium thường cần chờ “sleep(3)” → mất 3 giây.
Còn Playwright sẽ tự hiểu rằng cần đợi đến khi nút “Login” thật sự sẵn sàng rồi mới click → nhanh hơn, ổn định hơn.
🧰 II. PHÂN TÍCH CÁC THÀNH PHẦN CỐT LÕI
Để Playwright hoạt động mượt mà với Python, ta cần một Bộ công cụ hoàn chỉnh – giống như một “bộ đồ nghề automation”.
| Thành phần | Vai trò (Chức năng) | Ví dụ / Liên hệ thực tế |
| 🧩 Playwright |
Cánh tay robot trực tiếp cầm chuột và gõ phím. Cung cấp các lệnh tương tác như page.goto(), page.click(), page.fill(). |
Bạn bảo "Click", nó sẽ click. Bạn bảo "Nhập chữ", nó sẽ gõ. |
| ⚙️ Pytest | Người quản lý (Quản đốc): giúp gom test case, chạy và báo kết quả. | Sắp xếp xem bài test nào chạy trước, bài nào chạy sau và ghi chép lại kết quả cuối cùng. |
| 🔌 pytest-playwright | Thông dịch viên :“Cầu nối thông minh” giữa Pytest và Playwright — giúp Pytest tự cấp đối tượng page (trình duyệt) cho bạn dùng. | Giúp "Quản lý" Pytest nói chuyện được với "Robot" Playwright mà không cần bạn phải đứng ra làm trung gian. |
| 📊 pytest-html | “Nhân viên báo cáo” – tạo file báo cáo HTML dễ đọc. | Tổng hợp kết quả thành một file đẹp đẽ (có hình ảnh, màu sắc) để bạn mang đi báo cáo cho sếp hoặc khách hàng. |
🌟 Tại sao lại chọn "Quản lý" Pytest?
Nếu Playwright là một công nhân giỏi, thì Pytest là một người quản lý cực kỳ thông minh vì:
-
Cực kỳ nhạy bén: Bạn chỉ cần đặt tên file hay tên bài test có chữ
test_là nó tự hiểu: "À, đây là việc của mình!" và tự động bắt đầu làm. -
Chuẩn bị chu đáo (Fixtures): Trước khi làm việc, nó biết tự mở trình duyệt, đăng nhập sẵn cho bạn; làm xong nó lại biết tự dọn dẹp và đóng máy.
-
"Cánh tay nối dài" phong phú: Nó có rất nhiều trợ thủ (plugin) đi kèm, giúp bạn làm được những việc khó như chạy nhiều bài test cùng lúc để tiết kiệm thời gian:
pytest-playwright,pytest-html,pytest-xdist(chạy song song).
🧑💻 III. THIẾT LẬP MÔI TRƯỜNG VÀ CÔNG CỤ
⚙️ Giả định:
-
Máy đã có Python 3.9+
-
Dự án có thư mục riêng và môi trường ảo (venv) đã kích hoạt.
1️⃣. Cài đặt các thư viện cần thiết
📘 Mở Terminal (hoặc VS Code Terminal) → nhập:
➡️ Giải thích: Tại sao cần cả 4?
-
playwright: Bản thân "robot" chính.
-
pytest: "Quản đốc" điều hành buổi kiểm thử.
-
pytest-playwright: "Sợi dây cáp" kết nối Robot và Quản đốc.
-
pytest-html: "Thư ký" chuyên soạn báo cáo kết quả đẹp mắt.
2️⃣. Tải về trình duyệt cho Playwright
➡️ Lệnh này có tác dụng gì? Nó sẽ tự động tải về 3 "vùng không gian" để robot làm việc:
-
Chromium: Để chạy thử như trên Chrome, Edge.
-
Firefox: Để chạy thử như trên trình duyệt Cáo lửa.
-
WebKit: Để chạy thử như trên Safari (máy Mac, iPhone).
Ghi chú: Bạn chỉ cần chạy lệnh này một lần duy nhất lúc mới thiết lập.
3️⃣. Kiểm tra cài đặt
✅ Nếu cả hai hiện phiên bản → môi trường đã sẵn sàng.
🧾 IV. KỊCH BẢN ĐẦU TIÊN: VIẾT VÀ CHẠY TEST
1️⃣. Cấu trúc dự án
Tạo cấu trúc thư mục:
📘 Quy tắc Pytest:
-
Tên file phải bắt đầu bằng
test_ -
Tên hàm phải bắt đầu bằng
test_
2️⃣. Viết test đầu tiên: “Chào Google!”
📄 File: tests/test_kiem_tra_trang_chu.py
3️⃣. Giải thích code
| Lệnh / Từ khóa | Ý nghĩa |
|---|---|
page: Page |
Là fixture đặc biệt do pytest-playwright cung cấp — đại diện cho một tab trình duyệt. |
page.goto(url) |
Mở trang web tương ứng với URL. |
expect(page).to_have_title() |
Kiểm tra tiêu đề trang có khớp với mong đợi không. |
expect(page).to_have_url() |
Kiểm tra URL hiện tại. |
re.compile("Google") |
Cho phép dùng biểu thức chính quy (regex), giúp linh hoạt hơn. |
4️⃣. Chạy test và tạo báo cáo
| Lệnh | Chức năng | Khi sử dụng |
|---|---|---|
pytest |
Chạy toàn bộ test ở chế độ headless (ẩn trình duyệt). | Khi chạy trên server CI/CD để tiết kiệm thời gian. |
pytest --headed |
Chạy test có hiển thị trình duyệt. | Khi debug, quan sát robot thao tác. |
pytest --html=report.html --self-contained-html |
Tạo file báo cáo đẹp dạng HTML. | Khi cần lưu kết quả để chia sẻ. |
📘 Sau khi chạy, mở file report.html → xem màu xanh (Pass ✅) hay đỏ (Fail ❌).
🧩 V. TÓM TẮT & BÀI TẬP VỀ NHÀ
| Mục tiêu | Chi tiết |
|---|---|
| 🧠 Tóm tắt nhanh | Hôm nay bạn đã cài đặt xong môi trường, hiểu rõ vai trò của Playwright và Pytest, chạy được kịch bản test đầu tiên. Playwright là “động cơ”, Pytest là “bộ điều khiển thông minh”. |
| 💡 Bài tập thực hành | Viết file mới test_bai_tap.py để: 1️⃣ Truy cập vào trang web yêu thích (ví dụ: shopee.vn, vnexpress.net, công ty bạn). 2️⃣ Kiểm tra tiêu đề trang có đúng mong đợi. 3️⃣ Kiểm tra URL trang web. |
| 🔜 Buổi 2 sắp tới | Sẽ học về Locators (tìm và thao tác phần tử), nhập liệu, click, đợi động (explicit wait) – giúp robot thực sự “tương tác thông minh” với website. |
