Ứng dụng của SQL trong kiểm thử phần mềm
Bài đăng này đã không được cập nhật trong 3 năm
Khái quát về SQL
- SQL là viết tắt của Structured Query Language, là ngôn ngữ truy vấn mang tính cấu trúc.
- SQL được thiết kế để quản lý dữ liệu trong một hệ quản trị cơ sở dữ liệu quan hệ. SQL được dùng để tạo, xóa trong cơ sở dữ liệu, truy vấn các hàng và sửa đổi các hàng,…
- Các hệ quản trị cơ sở dữ liệu như MySQL, SQL Server, Oracle, MS Access, Sybase, PostgreSQL, Informix,… đều sử dụng SQL như là ngôn ngữ cơ sở dữ liệu chuẩn.
Có thể nói ngôn ngữ SQL là một yếu tố đóng góp cho sự thành công của cơ sở dữ liệu quan hệ. Đây là ngôn ngữ mức cao nên người dùng chỉ cần viết lệnh thực hiện để đạt kết quả của truy vấn, phần tính toán và tối ưu hóa câu lệnh được hệ quản trị đảm nhận. SQL bao gồm ba phần chính:
- Ngôn ngữ thao tác dữ liệu (Data manipulation language - DML): được sử dụng để lưu trữ, sửa đổi và truy xuất dữ liệu từ CSDL. Có những thành phần tiêu chuẩn dùng để thêm, cập nhật và xóa dữ liệu delete data.
- Ngôn ngữ định nghĩa dữ liệu (Data definition language - DDL): được sử dụng để định nghĩa cấu trúc của dữ liệu. Các câu lệnh này dùng để định nghĩa cấu trúc của cơ sở dữ liệu, bao gồm định nghĩa các hàng, các cột, các bảng dữ liệu, các chỉ số và một số thuộc tính khác liên quan đến cơ sở dữ liệu
- Ngôn ngữ điều khiển dữ liệu (Data control language - DCL): được sử dụng để quản lý truy cập tới dữ liệu của người dùng.
Ứng dụng của SQL trong kiểm thử
Test data
Kiểm tra dữ liệu hiển thị có đúng với dữ liệu trong DB hay không?
Ví dụ: Chức năng tạo mới và hiển thị danh sách người dùng.
- Tạo mới user A (click button “Tạo mới”) => Kiểm tra xem dữ liệu có được lưu trong DB và hiển thị đúng trên danh sách người dùng (có thể trong các tiêu chí search chẳng hạn).
- Tạo mới user A (continuous click button “Tạo mới”) => Kiểm tra xem dữ liệu có được lưu trong DB với 01 BẢN GHI DUY NHẤT và hiển thị đúng trên danh sách người dùng (có thể trong các tiêu chí search chẳng hạn).
Clean data
Đối với những testcase đòi hỏi môi trường dữ liệu test trống, việc xóa thủ công một lượng lớn dữ liệu rất mất thời gian. Vậy nên việc sử dụng SQL để xóa dữ liệu là một lựa chọn giúp tiết kiệm thời gian và đảm bảo dữ liệu được “dọn dẹp sạch sẽ”.
Dummy data
Ta thường cần sử dụng dữ liệu ảo trong một số trường hợp sau:
- Khi cần một lượng lớn dữ liệu để kiểm thử hiệu năng
- Khi cần một bộ dữ liệu gồm nhiều case
- Automation test
Cần chuẩn bị gì cho SQL testing?
Tìm hiểu cấu trúc cơ sở dữ liệu
Trước khi tiến hành truy vấn dữ liệu, ta cần hiểu được cấu trúc cơ sở dữ liệu của hệ thống - hiểu được bảng nào chứa thông tin gì, kiểu dữ liệu của các thông tin đó, các bảng liên kết với nhau ra sao... Từ đó, với một bài toán truy vấn đặt ra, ta có thể dễ dàng xác định cần lấy thông tin gì ở bảng nào với điều kiện ra sao.
Các câu lệnh SQL cơ bản
Ngôn ngữ thao tác dữ liệu - DML
- SELECT
SELECT tên cột 1, tên cột 2, ...
FROM các bảng
[WHERE điều kiện chọn]
[GROUP BY nhóm]
[HAVING điều kiện chọn nhóm]
[ORDER BY các cột sắp xếp]
[LIMIT giới hạn số lượng];
- INSERT
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...);
- UPDATE
UPDATE table_name
SET column1 = value1, column2 = value2,...
WHERE condition;
- DELETE
DELETE FROM table_name
[WHERE conditions];
Ngôn ngữ định nghĩa dữ liệu - DDL
- CREATE
CREATE DATABASE databasename;
- ALTER
ALTER TABLE table_name
ADD column_name datatype;
- DROP
DROP DATABASE databasename;
Ngôn ngữ điều khiển dữ liệu - DCL
- GRANT
GRANT privilege_name
ON object_name
TO {user_name |PUBLIC |role_name}
[WITH GRANT OPTION];
- REVOKE
REVOKE privilege_name
ON object_name
FROM {user_name |PUBLIC |role_name};
Ví dụ
Cơ sở dữ liệu mẫu bao gồm các bảng:
- Customers: Lưu trữ thông tin về khách hàng.
- Products: Lưu trữ danh sách về các sản phẩm.
- ProductLines: Lưu trữ danh mục các loại sản phẩm
- Orders: Lưu trữ các đơn hàng được đặt bởi các khách hàng.
- OrderDetails: Lưu trữ về chi tiết các dòng đơn hàng
- Payments: Lưu trữ các thanh toán của khách hàng
- Employees: Lưu trữ thông tin về các nhân viên của tổ chức
- Offices: Lưu thông tin về các văn phòng của tổ chức.
Ví dụ 1: Ta cần truy vấn tất cả thông tin về nhân viên
SELECT * FROM employees;
Ví dụ 2: Ta cần lấy ra thông tin của nhân viên bao gồm mã nhân viên, tên đầy đủ, email, là Sale Rep và có địa chỉ văn phòng ở Paris
SELECT e.employeeNumber, CONCAT(e.lastName," ", e.firstName) AS name, e.jobTitle, o.city
FROM employees e
JOIN offices o ON e.officeCode = o.officeCode
WHERE e.jobTitle = "Sales Rep"
AND o.city = "Paris";
Ví dụ 3: Ta cần lấy ra thông tin về các đơn hàng trong tháng gần nhất
SELECT * FROM orders
WHERE EXTRACT(YEAR FROM orderDate) = (SELECT EXTRACT(YEAR FROM (SELECT MAX(orderDate) FROM orders)))
AND EXTRACT(MONTH FROM orderDate) = (SELECT EXTRACT(MONTH FROM (SELECT MAX(orderDate) FROM orders)));
Trong các ví dụ trên đây, mình có sử dụng phép nối bảng và truy vấn con trong SQL. Mình sẽ chia sẻ nhiều hơn về phần này vào bài viết tiếp theo.
Những điểm cần chú ý khi thực hiện kiểm thử với SQL
- SQL không phân biệt chữ hoa – chữ thường
- Sử dụng gợi ý khi viết câu lệnh sẽ giúp chúng ta viết câu lệnh nhanh và đúng hơn, vừa tiết kiệm kha khá thời gian lại đen đến kết quả như ý.
- Truy vấn có điều kiện để thu hẹp phạm vi bản ghi, tránh hiển thị những dữ liệu mà ta không cần tới, đồng thời giúp chúng ta bớt rối hơn khi thực hiện xác minh dữ liệu.
- Hạn chế truy vấn 2 lần
- Sử dụng “LIKE” hợp lý
- Hạn chế sử dụng “DISTINCT”, “ORDER BY”
Tài liệu tham khảo
- BÀI GIẢNG THỰC HÀNH CƠ SỞ DỮ LIỆU - Đại học Công Nghệ, ĐHQGHN
- https://www.guru99.com/data-testing.html
- https://vntesters.com/su-dung-kien-thuc-sql-de-cong-viec-test-de-dang-hon/
- https://codelearn.io/sharing/15-bi-kip-toi-uu-truy-van-co-so-du-lieu
All rights reserved