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

  1. 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.
  2. 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.
  3. 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).
  4. 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)

  1. 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.
  2. 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.
  3. Tuần 5 - 7: Thiết kế chi tiết ma trận Test Case (Authentication, Products, Cart, Checkout, Search).
  4. 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.
  5. 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        │
               └────────────────────────────┴────────────────────────────┘
  1. 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.
  2. 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.
  3. 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

  1. 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).
  2. 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.
  3. 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.