Blog Single

Hướng Dẫn Kiểm Thử Cơ Sở Dữ Liệu Với Selenium Từ A-Z

Selenium WebDriver là một công cụ tuyệt vời để tự động hóa trình duyệt và kiểm thử giao diện người dùng (UI). Tuy nhiên, một kịch bản kiểm thử (Test Case) hoàn hảo không chỉ dừng lại ở việc xem dữ liệu có hiển thị đúng trên màn hình hay không. Bạn còn phải đảm bảo rằng dữ liệu người dùng nhập từ UI đã được lưu chính xác vào Cơ sở dữ liệu (Database).

Vậy làm thế nào để thực hiện kiểm thử cơ sở dữ liệu với Selenium khi bản thân công cụ này không hỗ trợ tương tác trực tiếp với Database? Trong bài viết này, Techblog.vn sẽ giải mã cơ chế hoạt động và hướng dẫn bạn cách thực hiện chi tiết nhất.

1. Bản chất của việc Kiểm thử Cơ sở dữ liệu với Selenium

Điều quan trọng nhất bạn cần nhớ: Selenium WebDriver KHÔNG THỂ giao tiếp trực tiếp với bất kỳ Cơ sở dữ liệu nào. Nhiệm vụ duy nhất của Selenium là điều khiển trình duyệt (click, gõ text, điều hướng).

Để thực hiện Database Testing, chúng ta phải sử dụng ngôn ngữ lập trình đang chạy Selenium (như Java, Python, C#) kết hợp với các thư viện kết nối cơ sở dữ liệu (Database Connector/Driver).

Quy trình chuẩn diễn ra như sau:

  1. Selenium (UI): Tự động điền form đăng ký tài khoản trên website và bấm “Submit”.

  2. Java/Python (Backend Code): Kết nối trực tiếp vào Database thông qua JDBC (Java) hoặc PyODBC (Python).

  3. Validation (Xác thực): Chạy câu lệnh SQL SELECT để lấy dữ liệu vừa lưu và dùng Assert (JUnit/TestNG) so sánh nó với dữ liệu mà Selenium vừa nhập. Nếu khớp nhau => Test Passed.

2. Hướng dẫn từng bước Test Database với Selenium (Sử dụng Java + MySQL)

Dưới đây là kịch bản thực tế: Bạn dùng Selenium để tạo một user mới trên giao diện, sau đó dùng Java JDBC kết nối vào MySQL để kiểm tra xem user đó đã thực sự nằm trong bảng users chưa.

Bước 1: Chuẩn bị thư viện (Dependencies)

Nếu bạn dùng Maven, hãy thêm MySQL Connector vào file pom.xml:

XML

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.x.x</version>
</dependency>

Bước 2: Viết script tích hợp Selenium và JDBC

Tạo một file Java test class và viết mã nguồn như sau:

Java

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class DatabaseTestingDemo {
    WebDriver driver;
    Connection con;

    // Thông tin kết nối Database
    String dbUrl = "jdbc:mysql://localhost:3306/techblog_db";
    String username = "root";
    String password = "password123";

    @BeforeClass
    public void setup() throws Exception {
        // 1. Khởi tạo Selenium WebDriver
        driver = new ChromeDriver();
        
        // 2. Thiết lập kết nối đến MySQL Database
        Class.forName("com.mysql.cj.jdbc.Driver");
        con = DriverManager.getConnection(dbUrl, username, password);
    }

    @Test
    public void verifyUserRegistration() throws Exception {
        // --- PHẦN 1: SELENIUM TƯƠNG TÁC UI ---
        driver.get("https://techblog.vn/register");
        
        String testEmail = "testuser@techblog.vn";
        driver.findElement(By.id("email")).sendKeys(testEmail);
        driver.findElement(By.id("password")).sendKeys("SecurePass123");
        driver.findElement(By.id("btn-submit")).click();

        // Đợi UI xử lý (Nên dùng WebDriverWait trong thực tế)
        Thread.sleep(3000); 

        // --- PHẦN 2: JDBC TƯƠNG TÁC DATABASE ---
        Statement stmt = con.createStatement();
        // Truy vấn xem email vừa tạo có trong DB không
        String sqlQuery = "SELECT * FROM users WHERE email = '" + testEmail + "'";
        ResultSet rs = stmt.executeQuery(sqlQuery);

        // --- PHẦN 3: XÁC THỰC (ASSERTION) ---
        boolean isUserExist = false;
        String dbEmail = "";
        
        while (rs.next()) {
            isUserExist = true;
            dbEmail = rs.getString("email");
        }

        // Kiểm tra 1: Bản ghi có tồn tại trong DB không?
        Assert.assertTrue(isUserExist, "Lỗi: User không được lưu vào Database!");
        // Kiểm tra 2: Email trong DB có khớp với Email nhập từ UI không?
        Assert.assertEquals(dbEmail, testEmail, "Lỗi: Dữ liệu email không khớp!");
    }

    @AfterClass
    public void tearDown() throws Exception {
        // Đóng kết nối DB và Trình duyệt để giải phóng tài nguyên
        if (con != null) {
            con.close();
        }
        driver.quit();
    }
}

3. Những lưu ý “sống còn” khi thực hiện Database Testing tự động

  • Quản lý dữ liệu rác (Test Data Management): Khi automation script chạy liên tục, nó sẽ sinh ra hàng ngàn bản ghi rác trong Database. Hãy viết các câu lệnh DELETE ở block @AfterMethod hoặc @AfterClass để dọn dẹp dữ liệu ngay sau khi test xong.

  • Không bao giờ test trực tiếp trên Database Production: Chỉ thực hiện trên môi trường Staging, QA hoặc môi trường Local để tránh rủi ro xóa nhầm dữ liệu thật của người dùng.

  • Bảo mật thông tin: Tuyệt đối không hardcode (viết cứng) thông tin user/password của Database trực tiếp vào file code. Hãy lưu chúng trong file biến môi trường (.env) hoặc các file cấu hình mã hóa.

Kết luận

Thực hiện kiểm thử cơ sở dữ liệu với Selenium thực chất là sự kết hợp ăn ý giữa khả năng điều khiển UI của Selenium và sức mạnh truy vấn DB của các ngôn ngữ lập trình (như Java JDBC). Việc áp dụng kỹ thuật này sẽ giúp các kịch bản kiểm thử tự động của bạn trở nên toàn diện và đáng tin cậy hơn rất nhiều (End-to-End Testing).

Tiếp tục đồng hành cùng Techblog.vn để nâng cao kỹ năng Automation Test mỗi ngày nhé!

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *