Giới thiệu dự án
Trong kỷ nguyên chuyển đổi số và thương mại điện tử bùng nổ, chất lượng phần mềm đóng vai trò sống còn đối với trải nghiệm người dùng và doanh thu doanh nghiệp. Theo các báo cáo chuẩn hóa từ Consortium for Information & Software Quality (CISQ), chi phí khắc phục lỗi phần mềm trong môi trường production cao gấp 15 đến 30 lần so với việc phát hiện và xử lý sớm trong giai đoạn phát triển và kiểm thử. Hoạt động kiểm thử phần mềm (Software Testing) truyền thống thường chiếm từ 30% đến 40% tổng thời gian và ngân sách dự án. Tuy nhiên, phương pháp kiểm thử thủ công (Manual Testing) bộc lộ nhiều điểm nghẽn nghiêm trọng khi hệ thống mở rộng quy mô: tốn kém nhân lực, chu kỳ kiểm thử hồi quy (Regression Testing) kéo dài, dễ phát sinh sai sót do yếu tố con người và không đáp ứng được tần suất triển khai liên tục của mô hình phát triển phần mềm hiện đại.
Đề tài "Nghiên cứu và ứng dụng công cụ kiểm thử Selenium trong kiểm thử website" tập trung giải quyết bài toán tự động hóa kiểm thử chức năng trên nền tảng ứng dụng web thương mại điện tử thực tế – Hệ thống quản lý và kinh doanh giày Candy Store.
┌─────────────────────────────────────────────────────────┐
│ VẤN ĐỀ KIỂM THỬ THỦ CÔNG TRUYỀN THỐNG │
│ - Chu kỳ kiểm thử kéo dài (5 - 10 phút/ca kiểm thử) │
│ - Chi phí nhân lực cao, dễ bỏ sót lỗi hồi quy (Bug) │
│ - Khó kiểm thử đa trình duyệt song song │
└────────────────────────────┬────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ GIẢI PHÁP TỰ ĐỘNG HÓA VỚI SELENIUM │
│ - Framework: Selenium WebDriver + Java + TestNG │
│ - Tương tác trực tiếp cấp độ W3C WebDriver Protocol │
│ - Rút ngắn thời gian thực thi xuống 15 - 30 giây/ca │
└─────────────────────────────────────────────────────────┘
Mục tiêu dự án
- Hệ thống hóa cơ sở lý thuyết: Nghiên cứu chuyên sâu về các cấp độ kiểm thử (Unit Test, Integration Test, System Test, Acceptance Test), phương pháp kiểm thử (Black Box, White Box, Gray Box) và quy trình kiểm thử chuẩn hóa.
- Nghiên cứu kiến trúc Selenium Suite: Phân tích chi tiết 4 thành phần cốt lõi: Selenium IDE, Selenium RC, Selenium Grid và đi sâu vào cơ chế tương tác trực tiếp của Selenium WebDriver.
- Phân tích và phát triển hệ thống mẫu: Thiết kế, xây dựng website thương mại điện tử Candy Store đầy đủ chức năng quản lý danh mục, sản phẩm, đơn hàng, người dùng và phân quyền (Admin, Customer, Viewer).
- Xây dựng bộ kịch bản kiểm thử tự động (Test Automation Framework): Thiết kế test case, xây dựng test script tự động hóa bằng Selenium WebDriver trên nền tảng Java/Eclipse để kiểm thử toàn diện các luồng nghiệp vụ trọng yếu.
Phạm vi và giới hạn
- Phạm vi kiểm thử: Tập trung vào kiểm thử chức năng (Functional Testing) và kiểm thử hồi quy (Regression Testing) cho các luồng: Đăng ký, Đăng nhập, Quản lý Profile, Quản lý Sản phẩm (CRUD), Tìm kiếm và Đặt hàng (Checkout COD).
- Giới hạn kỹ thuật: Nghiên cứu tập trung vào tương tác tầng giao diện web (UI Web Testing), không bao gồm kiểm thử hiệu năng chịu tải quy mô lớn (Stress/Load Test chuyên sâu) và không can thiệp vào các hộp thoại tương tác native OS (Windows dialog) nếu không kết hợp thư viện bổ trợ ngoài.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Khi đánh giá các giải pháp kiểm thử phần mềm trên thị trường, việc lựa chọn công cụ phải cân nhắc giữa chi phí bản quyền, khả năng mở rộng, tính linh hoạt và độ phức tạp khi bảo trì mã nguồn kiểm thử.
| Tiêu chí so sánh |
Kiểm thử thủ công (Manual) |
Selenium IDE |
Selenium WebDriver |
Cypress / Playwright |
| Chi phí bản quyền |
Chi phí nhân sự cao |
Miễn phí (Open Source) |
Miễn phí (Open Source) |
Miễn phí / Freemium |
| Thời gian thực thi |
Rất chậm (3-5 phút/luồng) |
Trung bình |
Rất nhanh (10-30s/luồng) |
Rất nhanh |
| Độ tin cậy & Ổn định |
Phụ thuộc tâm lý tester |
Dễ gãy khi DOM đổi |
Rất cao, kiểm soát wait tốt |
Rất cao, tự động wait |
| Hỗ trợ đa ngôn ngữ |
Không áp dụng |
Chỉ lưu Selenese/JS |
Java, C#, Python, Ruby, PHP |
JavaScript / TypeScript |
| Khả năng xử lý logic phức tạp |
Con người tự xử lý |
Hạn chế (No loop/condition) |
Toàn diện (Full OOP Logic) |
Rất mạnh mẽ |
| Tích hợp CI/CD & Database |
Thủ công |
Không hỗ trợ |
Hỗ trợ qua JDBC/Maven/Jenkins |
Hỗ trợ qua CLI/Node.js |
Phân loại yêu cầu hệ thống theo mô hình MoSCoW
- Must-have (Bắt buộc có):
- Tự động hóa kiểm thử luồng xác thực: Đăng nhập hợp lệ, Đăng nhập sai mật khẩu, Đăng nhập để trống trường dữ liệu.
- Tự động hóa kiểm thử luồng Đăng ký tài khoản và Kiểm tra tính hợp lệ dữ liệu (Validate Email, trùng Username).
- Tự động hóa luồng Thêm mới sản phẩm trong hệ thống Quản trị (Admin).
- Tự động hóa luồng Tìm kiếm sản phẩm và Đặt hàng (Thanh toán COD).
- Should-have (Nên có):
- Kiểm thử cập nhật thông tin cá nhân (Profile update).
- Kiểm thử giỏ hàng khi không có sản phẩm (Empty cart validation).
- Báo cáo kết quả kiểm thử tự động có chụp ảnh màn hình (Screenshot) khi xảy ra lỗi (Assertion Failure).
- Could-have (Có thể có):
- Mở rộng thực thi phân tán đa trình duyệt song song thông qua Selenium Grid.
- Đọc dữ liệu kiểm thử từ tệp Excel/CSV (Data-Driven Testing).
- Won't-have (Chưa triển khai trong phạm vi đồ án):
- Tự động hóa vượt mã CAPTCHA hoặc xác thực 2 yếu tố (2FA).
- Kiểm thử giao diện ứng dụng di động native (Mobile App Native Testing).
Thiết kế hệ thống
Kiến trúc giải pháp tự động hóa kiểm thử được thiết kế dựa trên mô hình chuẩn của Selenium WebDriver, giao tiếp trực tiếp với trình duyệt thông qua cơ chế Driver nhị phân mà không cần thông qua máy chủ trung gian (khắc phục hoàn toàn nhược điểm của kiến trúc Selenium RC cũ).
graph TD
subgraph Test_Automation_Framework ["Test Automation Framework (Java / TestNG)"]
TC[Test Cases & Test Scripts]
POM[Page Object Model / Locators]
TD[Test Data: Excel / Data Providers]
TC --> POM
TC --> TD
end
subgraph Selenium_Core ["Selenium WebDriver API (v4.x / v3.141.59)"]
WD[WebDriver Interface]
CD[ChromeDriver / GeckoDriver Engine]
WD --> CD
end
subgraph Target_Browsers ["Target Browsers & Web Engine"]
Chrome[Google Chrome]
Firefox[Mozilla Firefox]
Edge[Microsoft Edge]
end
subgraph Application_Under_Test ["Website Quản lý bán giày Candy Store"]
FE[Front-end: HTML5 / CSS3 / Bootstrap / JS]
BE[Back-end: MVC Architecture]
DB[(Database: MySQL Engine)]
FE <--> BE <--> DB
end
POM --> WD
CD --> Chrome
CD --> Firefox
CD --> Edge
Chrome --> FE
Firefox --> FE
Edge --> FE
Technology Stack và Thông số phiên bản
- Ngôn ngữ lập trình kiểm thử: Java Standard Edition (JDK 11 / JDK 17).
- Thư viện lõi tự động hóa: Selenium WebDriver (v4.8.x / v3.141.59).
- Test Runner & Framework: TestNG v7.7.0 / JUnit 4.
- Môi trường phát triển tích hợp (IDE): Eclipse IDE for Java Developers (v2022-12 / 2023-03).
- Quản lý dependencies & Build tool: Apache Maven v3.8.x.
- Trình điều khiển trình duyệt: ChromeDriver (tương thích phiên bản Chrome 113.x+), GeckoDriver.
- Nền tảng ứng dụng kiểm thử (AUT): Website Candy Store chạy trên nền Web Server Apache/Tomcat, cơ sở dữ liệu quan hệ MySQL v8.0.
Thiết kế cơ sở dữ liệu hệ thống mẫu (Candy Store Core Schema)
Hệ thống thương mại điện tử được thiết kế chuẩn hóa cơ sở dữ liệu quan hệ phục vụ việc xác thực dữ liệu kiểm thử:
tbl_users (user_id [PK], username, password, fullname, email, phone, role_id [FK])
tbl_roles (role_id [PK], role_name, description)
tbl_categories (cat_id [PK], cat_name, status, created_at)
tbl_products (product_id [PK], cat_id [FK], product_name, price, quantity, size, image_url, description)
tbl_orders (order_id [PK], user_id [FK], total_amount, payment_method, order_status, order_date)
tbl_order_details (detail_id [PK], order_id [FK], product_id [FK], unit_price, quantity)
Methodology
Dự án áp dụng phương pháp luận kiểm thử phần mềm dựa trên quy trình chuẩn STLC (Software Testing Life Cycle) kết hợp linh hoạt với quy trình phát triển lặp (Agile/Iterative Testing), tập trung vào kỹ thuật kiểm thử hộp đen (Black Box Testing) và kiểm thử hồi quy tự động.
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 1. PHÂN TÍCH │ │ 2. THIẾT KẾ │ │ 3. PHÁT TRIỂN │
│ YÊU CẦU ├────►│ TEST CASE ├────►│ TEST SCRIPT │
│ (SRS Analysis) │ │ (Test Design) │ │ (Java/Selenium) │
└─────────────────┘ └─────────────────┘ └────────┬────────┘
│
┌─────────────────┐ ┌─────────────────┐ │
│ 5. ĐÁNH GIÁ & │ │ 4. THỰC THI & │ │
│ ĐÓNG CHU TRÌNH │◄────┤ BÁO CÁO LỖI │◄─────────────┘
│ (Test Closure) │ │ (Execution/Log) │
└─────────────────┘ └─────────────────┘
Tiến độ thực hiện (Project Milestones)
- Tuần 1 - 2: Khảo sát lý thuyết kiểm thử, kiến trúc Selenium Suite, phân tích yêu cầu website Candy Store.
- Tuần 3 - 4: Xây dựng hoàn thiện ứng dụng web Candy Store, thiết kế lược đồ CSDL và phân quyền hệ thống.
- Tuần 5 - 7: Thiết kế chi tiết ma trận Test Case (Authentication, Products, Cart, Checkout, Search).
- Tuần 8 - 10: Cài đặt môi trường Eclipse, cấu hình Selenium WebDriver, viết mã nguồn Test Scripts.
- Tuần 11 - 12: Thực thi kiểm thử tự động, ghi nhận log, đánh giá hiệu năng và hoàn thiện báo cáo khóa luận.
Ma trận quản trị rủi ro (Risk Assessment & Mitigation)
- Rủi ro 1: Thay đổi thuộc tính định vị phần tử giao diện (Dynamic Element / Flaky Locators).
- Giải pháp: Sử dụng chiến lược định vị ưu tiên (ID > Name > Relative XPath chứa hàm
contains() / CSS Selector bền vững).
- Rủi ro 2: Bất đồng bộ thời gian tải trang (Synchronization & AJAX Loading Issues).
- Giải pháp: Tuyệt đối loại bỏ
Thread.sleep() cứng; áp dụng triệt để cơ chế Explicit Wait (WebDriverWait kết hợp ExpectedConditions).
Implementation và kết quả
Development process
Quá trình hiện thực hóa bộ kịch bản kiểm thử tự động được chuẩn hóa qua các lớp xử lý đối tượng, tách biệt giữa kịch bản kiểm thử (Test Scripts), dữ liệu kiểm thử (Test Data) và bộ định vị phần tử (Element Locators).
Kỹ thuật định vị phần tử và xử lý đồng bộ hóa (Synchronization)
Selenium WebDriver tương tác với Document Object Model (DOM) thông qua các bộ chọn phần tử. Đoạn mã dưới đây minh họa lớp kiểm thử chức năng Đăng nhập và Tìm kiếm sản phẩm, áp dụng cơ chế bắt lỗi và kiểm tra điều kiện đầu ra (Assertions):
package com.candystore.test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.time.Duration;
public class CandyStoreAutomationTest {
private WebDriver driver;
private WebDriverWait wait;
private final String BASE_URL = "http://localhost:8080/candystore";
@BeforeClass
public void setUp() {
System.setProperty("webdriver.chrome.driver", "drivers/chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
// Áp dụng Explicit Wait với thời gian timeout tối đa 10 giây
wait = new WebDriverWait(driver, Duration.ofSeconds(10));
}
@Test(priority = 1, description = "Kiểm thử đăng nhập thành công với tài khoản hợp lệ")
public void testLoginSuccess() {
driver.get(BASE_URL + "/login.php");
WebElement txtUsername = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("username")));
WebElement txtPassword = driver.findElement(By.id("password"));
WebElement btnSubmit = driver.findElement(By.xpath("//button[@type='submit']"));
txtUsername.clear();
txtUsername.sendKeys("admin_candystore");
txtPassword.clear();
txtPassword.sendKeys("Admin@123456");
btnSubmit.click();
// Kiểm tra chuyển hướng thành công đến trang quản trị
wait.until(ExpectedConditions.urlContains("/admin/dashboard.php"));
WebElement lblWelcome = driver.findElement(By.className("user-profile-title"));
Assert.assertTrue(lblWelcome.getText().contains("admin_candystore"),
"[ASSERTION FAILED]: Tên hiển thị người dùng không chính xác.");
}
@Test(priority = 2, description = "Kiểm thử tìm kiếm sản phẩm tồn tại trong hệ thống")
public void testSearchProductExist() {
driver.get(BASE_URL + "/index.php");
WebElement searchBox = wait.until(ExpectedConditions.elementToBeClickable(By.name("keyword")));
searchBox.clear();
searchBox.sendKeys("Nike Air Jordan");
WebElement btnSearch = driver.findElement(By.cssSelector("button.btn-search-submit"));
btnSearch.click();
// Kiểm tra danh sách sản phẩm trả về có chứa từ khóa
WebElement firstProductTitle = wait.until(
ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='product-item']//h4/a"))
);
String actualTitle = firstProductTitle.getText();
Assert.assertTrue(actualTitle.toLowerCase().contains("nike air jordan"),
"[ASSERTION FAILED]: Kết quả tìm kiếm không khớp với từ khóa truy vấn.");
}
@AfterClass
public void tearDown() {
if (driver != null) {
driver.quit();
}
}
}
Testing và validation
Hệ thống kịch bản kiểm thử tự động đã được thực thi toàn diện trên 6 module nghiệp vụ chính với tổng cộng 28 Test Cases chi tiết bao phủ cả luồng thành công (Positive Cases) và luồng ngoại lệ/thất bại (Negative Cases).
| Mã Module |
Kịch bản kiểm thử chi tiết |
Loại kiểm thử |
Kết quả thực thi |
Trạng thái |
| TC_AUTH_01 |
Đăng nhập với Username/Password chính xác |
Functional / Positive |
Đăng nhập thành công, điều hướng chuẩn |
PASS |
| TC_AUTH_02 |
Đăng nhập khi để trống trường Username |
Functional / Negative |
Bắt lỗi hiển thị: "Username không được để trống" |
PASS |
| TC_AUTH_03 |
Đăng nhập với sai Mật khẩu (Password) |
Functional / Negative |
Bắt lỗi hiển thị: "Username hoặc password sai" |
PASS |
| TC_REG_01 |
Đăng ký tài khoản mới với thông tin hợp lệ |
Functional / Positive |
Tạo user mới trong DB, chuyển trang Home |
PASS |
| TC_REG_02 |
Đăng ký tài khoản với Username đã tồn tại |
Functional / Negative |
Báo lỗi: "Username bị trùng" |
PASS |
| TC_PROD_01 |
Admin thêm mới sản phẩm đầy đủ thông tin |
Functional / Positive |
Sản phẩm xuất hiện trên danh mục và DB |
PASS |
| TC_PROD_02 |
Admin thêm mới sản phẩm để trống tên |
Functional / Negative |
Báo lỗi validation trường bắt buộc |
PASS |
| TC_SRCH_01 |
Tìm kiếm với từ khóa chính xác tồn tại |
Functional / Positive |
Hiển thị đúng danh sách sản phẩm khớp |
PASS |
| TC_SRCH_02 |
Tìm kiếm từ khóa không có trong hệ thống |
Functional / Negative |
Hiển thị thông báo "Không tìm thấy kết quả" |
PASS |
| TC_ORD_01 |
Đặt hàng thành công qua phương thức COD |
Functional / Positive |
Tạo mã đơn hàng mới, lưu chi tiết giỏ hàng |
PASS |
| TC_ORD_02 |
Đặt hàng khi giỏ hàng rỗng (Empty Cart) |
Functional / Negative |
Hiển thị cảnh báo, không cho thanh toán |
PASS |
So sánh hiệu năng thực tế (Performance Benchmarks)
- Tổng số Test Cases thực thi: 28 ca kiểm thử.
- Thời gian thực hiện thủ công (Manual): Trung bình 4.5 phút / Test Case $\rightarrow$ Tổng thời gian: ~126 phút (2.1 giờ).
- Thời gian thực hiện tự động hóa (Selenium WebDriver): Trung bình 22 giây / Test Case $\rightarrow$ Tổng thời gian: ~10.2 phút.
- Tỷ lệ tăng tốc độ thực thi: Nhanh hơn ~91.9% so với thao tác thủ công.
- Tỷ lệ lỗi do con người (Human Error Rate): Giảm từ 12.5% (kiểm thử thủ công mệt mỏi) xuống 0% trên kịch bản tự động.
Kết quả đạt được
┌─────────────────────────────────────────────────────────┐
│ TỔNG HỢP KẾT QUẢ THỰC THI KIỂM THỬ │
├────────────────────────────┬────────────────────────────┤
│ Tổng số Test Case thiết kế │ 28 Ca kiểm thử │
│ Số lượng Test Case PASS │ 27 Ca (96.43%) │
│ Số lượng Test Case FAIL │ 01 Ca (3.57% - Phát hiện │
│ │ lỗi sai thông báo UI) │
│ Thời gian thực thi trung │ 22.1 giây / Test Case │
│ bình mỗi kịch bản │ │
│ Mức độ tiết kiệm thời gian │ 91.9% so với Manual │
└────────────────────────────┴────────────────────────────┘
- Về mặt kỹ thuật: Xây dựng thành công bộ kịch bản tự động hóa kiểm thử độc lập, có cấu trúc module rõ ràng, tái sử dụng cao trên nền tảng Selenium WebDriver và Java.
- Về phát hiện lỗi hệ thống: Kịch bản tự động đã phát hiện chính xác 01 lỗi giao diện (Defect) tại chức năng chỉnh sửa Profile khi người dùng nhập chuỗi ký tự đặc biệt vượt quá độ dài quy định mà hệ thống không hiển thị thông báo lỗi biên phù hợp.
- Về độ bao phủ kiểm thử: Đạt độ bao phủ 100% các chức năng nghiệp vụ trọng yếu thuộc luồng người dùng và luồng quản trị viên của website Candy Store.
Đổi mới và đóng góp
- Chuẩn hóa kỹ thuật xử lý bất đồng bộ trong Selenium: Đồ án đã giải quyết triệt để bài toán "Flaky Tests" (kịch bản kiểm thử chập chờn lúc pass lúc fail) thường gặp trong tự động hóa web bằng cách loại bỏ hoàn toàn các hàm dừng cưỡng bức
Thread.sleep(). Thay vào đó, toàn bộ kịch bản được chuẩn hóa bằng lớp điều khiển WebDriverWait với các điều kiện chờ linh hoạt (visibilityOf, elementToBeClickable, presenceOfElementLocated).
- Cơ chế kiểm chứng Assertions đa tầng: Thay vì chỉ kiểm tra sự tồn tại của URL sau khi thao tác, bộ kịch bản kết hợp xác minh kép: kiểm tra trạng thái DOM, thông điệp phản hồi UI và đối chiếu dữ liệu hiển thị thực tế với dữ liệu đầu vào.
- Mô hình hóa giải pháp kiểm thử mã nguồn mở cho doanh nghiệp vừa và nhỏ (SMEs): Đồ án cung cấp một tài liệu tham khảo hoàn chỉnh về việc ứng dụng 100% công nghệ mã nguồn mở miễn phí (Java, Selenium WebDriver, TestNG, Eclipse) nhằm tự động hóa kiểm thử mà không phát sinh chi phí mua bản quyền các công cụ thương mại đắt đỏ như HP UFT (QTP) hay Ranorex.
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng trong thực tế
- Kiểm thử hồi quy tự động (Automated Regression Testing): Chạy lại toàn bộ 28+ test script sau mỗi lần lập trình viên cập nhật tính năng mới hoặc sửa lỗi (Bug Fix) để đảm bảo không làm gãy các chức năng cũ.
- Kiểm thử kiểm tra nhanh (Smoke Testing / Sanity Testing): Tự động chạy các kịch bản quan trọng nhất (Đăng nhập, Tìm kiếm, Đặt hàng) ngay sau khi ứng dụng được triển khai lên môi trường Staging/Production để xác định bản build có ổn định hay không.
Yêu cầu cấu hình hệ thống triển khai (Deployment Requirements)
- Phần cứng tối thiểu: CPU Dual-Core 2.0 GHz, RAM 4GB (Khuyến nghị 8GB RAM để chạy mượt mà cùng lúc Eclipse, Chrome và Web Server), 10GB dung lượng ổ cứng trống.
- Môi trường phần mềm:
- Hệ điều hành: Windows 10/11, Linux (Ubuntu 20.04+), hoặc macOS.
- Java Development Kit: JDK 11 hoặc JDK 17 (Cấu hình biến môi trường
JAVA_HOME).
- Google Chrome Browser phiên bản tương ứng với file nhị phân
chromedriver.
- Web Server XAMPP/WAMP (chạy Apache & MySQL) để host ứng dụng Candy Store.
Phân tích hiệu quả kinh tế (ROI - Return on Investment)
Giả định một dự án website thương mại điện tử trải qua 20 chu kỳ cập nhật tính năng trong một năm:
- Kiểm thử thủ công: $20 \text{ chu kỳ} \times 2.1 \text{ giờ} = 42 \text{ giờ làm việc của chuyên viên QA}$.
- Kiểm thử tự động hóa: Đầu tư 15 giờ ban đầu để viết script + $20 \text{ chu kỳ} \times 0.17 \text{ giờ} = 18.4 \text{ giờ}$.
- Hiệu quả: Tiết kiệm hơn 56% tổng thời gian ngay trong năm đầu tiên và tiết kiệm hơn 90% thời gian kiểm thử cho tất cả các năm vận hành tiếp theo.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Phụ thuộc vào cấu trúc DOM: Khi giao diện người dùng thay đổi lớn về layout hoặc đổi tên class/id của các thẻ HTML, kịch bản kiểm thử vẫn cần sự can thiệp thủ công để cập nhật lại bộ định vị (Locators).
- Chưa tích hợp kiểm thử song song quy mô lớn: Toàn bộ kịch bản hiện chạy tuần tự (Sequential) trên một máy cục bộ, chưa phân tán đa luồng qua nhiều máy ảo hoặc Docker container.
- Chưa tự động hóa kiểm thử trên thiết bị di động thực tế: Mới chỉ dừng lại ở trình duyệt Web máy tính (Desktop Browsers).
Hướng phát triển trong tương lai
- Nâng cấp sang mô hình Page Object Model (POM) nâng cao kết hợp Page Factory: Tách biệt hoàn toàn tầng logic kiểm thử và tầng quản lý phần tử giao diện để tăng khả năng bảo trì khi hệ thống lớn lên hàng trăm trang.
- Tích hợp đường ống CI/CD (Continuous Integration / Continuous Deployment): Tích hợp bộ kịch bản kiểm thử tự động vào hệ thống Jenkins hoặc GitHub Actions để tự động kích hoạt test suite mỗi khi có commit code mới.
- Mở rộng lưới kiểm thử với Selenium Grid và Docker: Triển khai Selenium Grid dạng container hóa trên Docker để thực thi đồng thời kịch bản trên nhiều phiên bản trình duyệt (Chrome, Firefox, Edge, Safari) và hệ điều hành khác nhau.
- Áp dụng Data-Driven Testing với Apache POI: Đọc hàng nghìn bộ dữ liệu kiểm thử từ file Excel để kiểm tra độ bền dữ liệu (Boundary Value Analysis).
Đối tượng hưởng lợi
- Sinh viên ngành Công nghệ thông tin / Kỹ thuật phần mềm:
- Tiếp cận tài liệu thực hành hoàn chỉnh, chuẩn mực về phương pháp luận kiểm thử phần mềm và kỹ năng viết mã tự động hóa kiểm thử với Selenium WebDriver.
- Hiểu rõ sự khác biệt giữa lý thuyết kiểm thử và việc triển khai thực tế trên một hệ thống website thương mại điện tử hoàn chỉnh.
- Lập trình viên và Kỹ sư kiểm thử (Developers & QA/QC Engineers):
- Nắm vững các mẫu thiết kế kịch bản kiểm thử (Test Automation Patterns), kỹ thuật xử lý đồng bộ giao diện và kinh nghiệm tránh lỗi flaky tests.
- Có thể tái sử dụng ngay bộ khung kiểm thử (Test Framework) để áp dụng vào các dự án web thực tế tại doanh nghiệp.
- Doanh nghiệp vừa và nhỏ (SMEs) & Startup:
- Định hướng giải pháp tối ưu hóa ngân sách đảm bảo chất lượng phần mềm (QA) bằng việc tận dụng tối đa hệ sinh thái mã nguồn mở.
- Tăng tốc độ đưa sản phẩm ra thị trường (Time-to-Market) nhờ rút ngắn chu kỳ kiểm thử hồi quy từ nhiều ngày xuống còn vài chục phút.
Câu hỏi thường gặp
1. Cần chuẩn bị những công cụ và môi trường gì để chạy bộ kịch bản kiểm thử trong đồ án?
Bạn cần cài đặt: (1) Java JDK 11 hoặc 17; (2) Eclipse IDE for Java; (3) Tải thư viện Selenium WebDriver Java Client (file .jar) hoặc cấu hình qua tệp pom.xml của Maven; (4) Tải đúng phiên bản chromedriver khớp với phiên bản Google Chrome đang cài đặt trên máy tính; (5) Khởi động Web Server cục bộ (XAMPP/Apache) chứa mã nguồn website Candy Store.
2. Selenium WebDriver khác biệt như thế nào so với Selenium IDE?
Selenium IDE là tiện ích mở rộng trên trình duyệt hoạt động theo cơ chế "Record & Playback" (Ghi lại và Phát lại), chỉ phù hợp cho người mới bắt đầu hoặc các kịch bản kiểm thử đơn giản, không hỗ trợ tốt việc lập trình rẽ nhánh điều kiện, vòng lặp hay kết nối cơ sở dữ liệu. Ngược lại, Selenium WebDriver là một thư viện lập trình (API) cho phép viết mã kiểm thử bằng các ngôn ngữ mạnh mẽ như Java, C#, Python, hỗ trợ đầy đủ các cấu trúc lập trình hướng đối tượng, đọc ghi dữ liệu linh hoạt và tích hợp dễ dàng vào quy trình CI/CD chuyên nghiệp.
3. Làm thế nào để xử lý triệt để lỗi "ElementNotInteractableException" hoặc phần tử chưa tải xong?
Không nên sử dụng Thread.sleep() vì gây lãng phí thời gian và không linh hoạt. Giải pháp chuẩn mực là sử dụng Explicit Wait:
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("elementId")));
element.click();
Cơ chế này sẽ liên tục thăm dò DOM trong khoảng thời gian tối đa được chỉ định và tiếp tục ngay khi phần tử sẵn sàng tương tác.
4. Hệ thống kiểm thử này có thể chạy tự động vào ban đêm hoặc theo lịch định kỳ không?
Hoàn toàn có thể. Bằng cách đóng gói bộ kiểm thử Selenium thành dự án Maven và kết hợp với các công cụ CI/CD như Jenkins hoặc Task Scheduler của hệ điều hành, bạn có thể thiết lập lịch chạy tự động (Cron Job) vào ban đêm và xuất báo cáo kết quả kiểm thử (HTML Test Report) gửi trực tiếp qua Email cho đội ngũ phát triển.
5. Chi phí đầu tư và thời gian hoàn vốn (ROI) khi chuyển từ Manual Testing sang Selenium WebDriver là bao lâu?
Vì toàn bộ công cụ (Java, Eclipse, Selenium, TestNG, MySQL) đều là mã nguồn mở nên chi phí bản quyền phần mềm là 0 VNĐ. Chi phí duy nhất là thời gian đào tạo và phát triển kịch bản ban đầu. Với một dự án có tần suất cập nhật thường xuyên, điểm hòa vốn (Break-even Point) thường đạt được chỉ sau 4 đến 6 chu kỳ kiểm thử hồi quy.
Kết luận
Đề tài "Nghiên cứu và ứng dụng công cụ kiểm thử Selenium trong kiểm thử website" đã hoàn thành toàn diện các mục tiêu nghiên cứu lý thuyết và ứng dụng thực tiễn đề ra. Việc làm chủ công cụ Selenium WebDriver kết hợp với nền tảng ngôn ngữ Java không chỉ giải quyết triệt để các hạn chế cố hữu của phương pháp kiểm thử thủ công trên website bán giày Candy Store mà còn cung cấp một giải pháp tự động hóa kiểm thử có độ chính xác cao, khả năng tái sử dụng vượt trội và tiết kiệm hơn 90% thời gian thực thi kịch bản kiểm thử hồi quy.
Kết quả của đề tài đóng vai trò là tài liệu tham khảo có giá trị cao về mặt kỹ thuật cho sinh viên, giảng viên và các kỹ sư kiểm thử phần mềm trong việc xây dựng và phát triển các hệ thống kiểm thử tự động chuyên nghiệp cho các ứng dụng web hiện đại.