1. Tóm tắt nhanh & màn hình bạn sẽ test
Chào bạn mới! Khi vừa học automation, phản xạ tự nhiên là mở thư mục dự án, tạo ngay 1 file test đầu tiên, rồi cứ thế thêm file mới mỗi khi có tính năng cần test — không theo quy tắc thư mục hay đặt tên nào cả. Cách này chạy được với vài test đầu tiên. Nhưng khi số lượng test tăng lên, và mỗi test đều cần đăng nhập, dọn dữ liệu trước/sau khi chạy, bạn sẽ thấy cùng một đoạn code chuẩn bị/dọn dẹp lặp đi lặp lại ở khắp nơi, còn file test thì nằm lộn xộn không theo trật tự nào. Cấu trúc dự án test rõ ràng, cộng với test hooks, chính là cách giải quyết cả hai vấn đề: có nơi cố định cho từng loại tệp, và có chỗ cố định để chạy phần chuẩn bị/dọn dẹp dùng chung. Chúng ta sẽ học qua màn giỏ hàng thật của ShopEasy, có hình minh hoạ và code Playwright chạy được.
2. Vấn đề: dự án test không có cấu trúc & không dùng hooks
Hãy hình dung một dự án automation ShopEasy sau 3 tháng phát triển không theo quy tắc nào: có file tên test1.js, có file tên checkTest.js, có file tên gio_hang_v2_final.js nằm cùng thư mục gốc. Không ai biết chắc file nào đang được dùng, file nào là bản nháp cũ còn sót lại. Khi cần sửa test giỏ hàng, bạn phải mở từng file để tìm, tốn thời gian chỉ để xác định 'mình nên sửa ở đâu'.
Vấn đề thứ hai, sâu hơn, là thiếu hooks. Mỗi test giỏ hàng đều cần đăng nhập trước; không dùng beforeEach, nghĩa là 5 dòng code đăng nhập được copy-paste vào từng test. Không dùng afterEach để xoá giỏ hàng sau mỗi test, nghĩa là test chạy sau 'thừa hưởng' luôn sản phẩm mà test chạy trước để lại — dẫn tới kết quả sai lệch không phải vì tính năng lỗi, mà vì dữ liệu bẩn tồn đọng. Cả hai vấn đề — cấu trúc lộn xộn và thiếu hooks — cộng dồn lại khiến bộ test ngày càng khó tin tưởng, và mỗi lần có lỗi lại mất rất nhiều thời gian chỉ để tìm ra nguyên nhân thật sự.
3. Cấu trúc dự án test là gì & nguyên tắc đặt tên
Cấu trúc dự án test gồm hai phần gắn liền nhau: (1) cách chia thư mục — tệp nào nằm ở đâu, và (2) cách đặt tên — tên file, tên test, tên nhóm test nói lên điều gì. Một dự án có cấu trúc tốt trả lời được ngay câu hỏi: 'Tôi cần sửa test đăng nhập, nên mở file nào?' mà không cần tìm kiếm hay đoán mò.
Nguyên tắc đặt tên phổ biến trong Playwright: mỗi màn hình/luồng nghiệp vụ có 1 file *.spec.js riêng (login.spec.js, cart.spec.js, checkout.spec.js), tên file nói rõ nó test cái gì. Bên trong file, dùng test.describe('ShopEasy - Tên tính năng', ...) để nhóm các test liên quan, và mỗi test('mô tả hành vi cụ thể', ...) nên mô tả rõ ràng bằng câu tiếng Việt hoặc tiếng Anh dễ hiểu, tránh viết tắt khó đoán như test('tc1').
4. Cấu trúc thư mục dự án automation chuẩn
Một dự án Playwright chuẩn thường tách rõ các khu vực: thư mục tests/ chứa các file *.spec.js (mỗi luồng nghiệp vụ 1 file), thư mục fixtures/ chứa dữ liệu mẫu dùng lại giữa nhiều test, cùng với playwright.config.js ở gốc dự án để cấu hình chung, và .gitignore để loại các tệp không nên đưa vào git.
shopeasy-automation/
├── tests/
│ ├── login.spec.js # kich ban test dang nhap
│ └── cart.spec.js # kich ban test gio hang
├── fixtures/
│ └── test-data.json # du lieu mau: tai khoan, san pham...
├── playwright.config.js # cau hinh chung: baseURL, retries...
├── .gitignore # loai node_modules, report khoi git
└── package.json5. Hooks là gì & vòng đời beforeAll/beforeEach/afterEach/afterAll
Playwright cung cấp 4 hook chính, đặt bên trong test.describe: test.beforeAll() chạy đúng 1 lần trước khi test đầu tiên bắt đầu; test.beforeEach() chạy lại trước MỖI test; test.afterEach() chạy sau MỖI test dù test đó pass hay fail; test.afterAll() chạy đúng 1 lần sau khi test cuối cùng đã xong. Bốn hook này tạo thành một vòng đời lặp lại: chuẩn bị chung một lần, rồi chuẩn bị riêng — chạy — dọn riêng cho từng test, và cuối cùng dọn chung một lần.
💬 Bình luận (0)
Chưa có bình luận nào. Hãy là người đầu tiên!