Thực hành công cụ kiểm thử tự động Selenium WebDriver kết hợp framework pytest, xây dựng tối thiểu 3 test case kiểm thử tự động cho một website thực tế.
Tài khoản test có sẵn:
| Username | Password | Ghi chú |
|---|---|---|
standard_user |
secret_sauce |
Tài khoản hoạt động bình thường |
locked_out_user |
secret_sauce |
Tài khoản bị khóa |
- Python 3.10+
- Selenium WebDriver 4.21
- Pytest 8.2 (test runner)
- webdriver-manager (tự động tải đúng phiên bản ChromeDriver)
- Trình duyệt: Google Chrome (chạy ở chế độ headless)
selenium-project/
├── conftest.py # Fixture khởi tạo/đóng trình duyệt (dùng chung cho mọi test)
├── requirements.txt # Danh sách thư viện cần cài
├── README.md # Báo cáo (file này)
└── tests/
├── test_01_login.py # Test case 1: Đăng nhập
├── test_02_add_to_cart.py # Test case 2: Thêm sản phẩm vào giỏ hàng
└── test_03_logout.py # Test case 3: Đăng xuất
| ID | Mô tả | Kết quả mong đợi |
|---|---|---|
| TC1.1 | Đăng nhập với tài khoản hợp lệ standard_user |
Chuyển sang trang inventory.html, tiêu đề "Products" |
| TC1.2 | Đăng nhập với mật khẩu sai | Hiển thị thông báo lỗi "Username and password do not match...", không vào được trang sản phẩm |
| TC1.3 | Đăng nhập với tài khoản bị khóa locked_out_user |
Hiển thị thông báo lỗi "...locked out" |
| ID | Mô tả | Kết quả mong đợi |
|---|---|---|
| TC2.1 | Thêm 1 sản phẩm (Sauce Labs Backpack) vào giỏ | Biểu tượng giỏ hàng hiển thị số "1" |
| TC2.2 | Thêm 2 sản phẩm, vào trang giỏ hàng | Số lượng = 2, đúng tên 2 sản phẩm đã chọn |
| TC2.3 | Thêm 2 sản phẩm rồi xóa 1 sản phẩm | Giỏ hàng còn lại đúng 1 sản phẩm |
| ID | Mô tả | Kết quả mong đợi |
|---|---|---|
| TC3.1 | Đăng nhập rồi đăng xuất | Quay về trang đăng nhập (/), form login hiển thị lại |
| TC3.2 | Sau khi đăng xuất, truy cập thẳng URL inventory.html |
Bị chặn, hiển thị thông báo lỗi yêu cầu đăng nhập |
Tổng cộng: 8 test case con, bao phủ 3 chức năng chính (đăng nhập, giỏ hàng, đăng xuất).
- Định vị phần tử bằng
By.ID,By.CLASS_NAME,By.CSS_SELECTOR implicitly_waitđể chờ phần tử tải xong- Fixture
pytest(conftest.py) để khởi tạo/đóng driver tự động cho từng test, tránh lặp code - Tách hàm
login()/logout()dùng chung giữa các test (tái sử dụng code) - Chạy headless để có thể tích hợp CI/CD (GitHub Actions) sau này
webdriver-managergiúp không cần tải ChromeDriver thủ công
Khi chạy trên máy có Chrome, toàn bộ 8 test case đều PASS.
tests/test_01_login.py::test_login_success PASSED
tests/test_01_login.py::test_login_wrong_password PASSED
tests/test_01_login.py::test_login_locked_out_user PASSED
tests/test_02_add_to_cart.py::test_add_single_product_to_cart PASSED
tests/test_02_add_to_cart.py::test_add_multiple_products_and_verify_cart PASSED
tests/test_02_add_to_cart.py::test_remove_product_from_cart PASSED
tests/test_03_logout.py::test_logout_returns_to_login_page PASSED
tests/test_03_logout.py::test_cannot_access_inventory_after_logout PASSED
======================== 8 passed in XX.XXs ========================
