# Các bước viết testcase

### 1. Lý thuyết chung – Tại sao phải viết test case theo chuẩn này?

- **Mục tiêu cuối cùng**: Đảm bảo **100% coverage** các khía cạnh: **Giao diện + Chức năng + Tích hợp + API + SQL + Ghi log + Điều hướng &amp; UX**.
- **Nguyên tắc cốt lõi**: 
    - Mọi test case phải **cụ thể, kiểm chứng được** (có thể verify bằng mắt, bằng DB, bằng response API).
    - Phải có **test data + SQL query** để kiểm tra dữ liệu thực tế.
    - Luôn bao gồm cả **positive case** (thành công) và **negative case** (lỗi, biên giới).
    - Mọi hành động quan trọng phải có **Ghi log** và **DB verification**.
    - Tuân thủ **UI/UX Design Guideline** (font, màu, spacing, responsive…).

**Quy ước chung (bắt buộc)**:

- **ID test case**: Dự án\_module\_xxx (xxx tăng dần liên tục). Ví dụ: TCSG\_DHVB\_001
- **Mã chức năng**: Mã chức năng của module/màn hình (BA cung cấp).
- **Loại test**: Giao diện / Chức năng / Tích hợp / API / SQL / Ghi log / Điều hướng &amp; UX.
- **UAT**: Có / Không. (Để chọn các happy case thêm vào tài liệu UAT)
- **Test Data**: Là dữ liệu mẫu cụ thể để thực hiện test (Có thể là câu truy vấn SQL hoặc dự liệu nhập liệu).

### 2. Template chung cho 1 test case (dùng cho mọi loại)

<table id="bkmrk-c%E1%BB%99t-n%E1%BB%99i-dung-c%E1%BA%A7n-%C4%91i%E1%BB%81" style="height: 438px; width: 100%;"><thead><tr><th data-col-size="md" style="width: 42.9167%;">Cột</th><th data-col-size="lg" style="width: 57.2025%;">Nội dung cần điền</th></tr></thead><tbody><tr><td data-col-size="md" style="width: 42.9167%;">Mã chức năng</td><td data-col-size="lg" style="width: 57.2025%;">F1002 </td></tr><tr><td data-col-size="md" style="width: 42.9167%;">ID</td><td data-col-size="lg" style="width: 57.2025%;">TCSG\_QLVB\_001</td></tr><tr><td data-col-size="md" style="width: 42.9167%;">Loại test</td><td data-col-size="lg" style="width: 57.2025%;">Giao diện / Chức năng…</td></tr><tr><td data-col-size="md" style="width: 42.9167%;">UAT</td><td data-col-size="lg" style="width: 57.2025%;">Có / Không</td></tr><tr><td data-col-size="md" style="width: 42.9167%;">Tên chức năng</td><td data-col-size="lg" style="width: 57.2025%;">Thêm mới văn bản đến</td></tr><tr><td data-col-size="md" style="width: 42.9167%;">Tên tác nhân chính</td><td data-col-size="lg" style="width: 57.2025%;">Văn thư</td></tr><tr><td data-col-size="md" style="width: 42.9167%;">Điều kiện trước</td><td data-col-size="lg" style="width: 57.2025%;">Màn hình Thêm mới văn bản đến đã mở</td></tr><tr><td data-col-size="md" style="width: 42.9167%;">Test Data</td><td data-col-size="lg" style="width: 57.2025%;">Để trống</td></tr><tr><td data-col-size="md" style="width: 42.9167%;">Mô tả trường hợp sử dụng</td><td data-col-size="lg" style="width: 57.2025%;">Kiểm tra trường Sổ văn bản\*</td></tr><tr><td data-col-size="md" style="width: 42.9167%;">Tên các trường hợp kiểm thử chức năng</td><td data-col-size="lg" style="width: 57.2025%;">Kiểm tra để trống trường Sổ văn bản\*</td></tr><tr><td data-col-size="md" style="width: 42.9167%;">Mô tả các bước thực hiện kiểm thử</td><td data-col-size="lg" style="width: 57.2025%;">1\. Để trống trường…

2\. Nhập thông tin còn lại hợp lệ

3\. Nhấn Lưu

</td></tr><tr><td data-col-size="md" style="width: 42.9167%;">Kết quả mong đợi</td><td data-col-size="lg" style="width: 57.2025%;">Hiển thị thông báo bên dưới textbox “Vui lòng chọn Sổ văn bản.” + highlight trường</td></tr><tr><td data-col-size="md" style="width: 42.9167%;">Kết quả thực tế</td><td data-col-size="lg" style="width: 57.2025%;">  
</td></tr><tr><td data-col-size="md" style="width: 42.9167%;">Ghi chú</td><td data-col-size="lg" style="width: 57.2025%;">(nếu có)</td></tr></tbody></table>

### 3. Test case mẫu chi tiết theo từng Loại test

#### **3.1. Loại test: Giao diện (UI/UX)**

**Mục đích**: Kiểm tra tuân thủ Design Guideline, tính trực quan, lỗi hiển thị.

##### **Test case bắt buộc phải có ở đầu chức năng/màn khi viết/test testcase**:

Kiểm tra giao diện tổng quan của màn hình dựa trên thiết kế đã có (Ví dụ: Figma,.. - tùy theo dự án)

[![image.png](https://docs.lifetex.vn/uploads/images/gallery/2026-04/scaled-1680-/Gkqimage.png)](https://docs.lifetex.vn/uploads/images/gallery/2026-04/Gkqimage.png)

Các quy tắc về giao diện sẽ được quy ước chung

**Test case mẫu 1: Để trống trường bắt buộc**

- Mã chức năng: F1002
- ID: TCSG\_QLVB\_002
- Loại test: Giao diện
- Tên chức năng: Thêm mới văn bản đến
- Tên tác nhân chính: Văn thư
- Tên các trường hợp kiểm thử: Kiểm tra để trống trường Sổ văn bản\*
- Các bước: 
    - 1. Để trống trường Sổ văn bản.
    - 2. Nhập thông tin còn lại hợp lệ.
    - 3. Nhấn Lưu.
- Kết quả mong đợi: Hiển thị thông báo “Vui lòng chọn Sổ văn bản.” + highlight &amp; focus trường.

**Test case mẫu 2: Kiểm tra hiển thị mặc định**

- ID: TCSG\_QLVB\_003
- Tên các trường hợp kiểm thử: Kiểm tra giá trị mặc định trường Sổ văn bản
- Kết quả mong đợi: Hiển thị default text “&lt;mặc định để trống&gt;”.

**Test case mẫu 3** (Date field): Kiểm tra hộp Calendar

- Tên các trường hợp kiểm thử: Kiểm tra hoạt động hộp Calendar trường Ngày đến\*
- Các bước: 
    - 1. Click icon Calendar.
    - 2. Chọn ngày.
    - 3. Nhấn Đồng ý.
- Kết quả mong đợi: Hộp đóng lại + ngày hiển thị đúng định dạng dd/mm/yyyy.

**Test case mẫu 4** (File upload): Kiểm tra tải lên file

- Tên các trường hợp kiểm thử: Kiểm tra tải file không đúng định dạng
- Kết quả mong đợi: Hiển thị thông báo upload không hợp lệ.

**Test case mẫu 5** (Dropdown): Kiểm tra tìm kiếm trong dropdownlist (nếu có)

- Tên các trường hợp kiểm thử: Kiểm tra nhập tìm kiếm dữ liệu không tồn tại
- Kết quả mong đợi: Hiển thị “Không có dữ liệu”.

#### **3.2. Loại test: Chức năng (Functional) + SQL**

**Mục đích**: Kiểm tra logic nghiệp vụ và dữ liệu lưu đúng DB.

**Test case mẫu 1: Lưu thành công với dữ liệu đầy đủ**

- Loại test: Chức năng
- Tên các trường hợp kiểm thử: Kiểm tra thêm mới văn bản thành công (nhập đầy đủ tất cả trường)
- Test Data: SELECT \* FROM incomming\_documents WHERE to\_book = N'UBND-TL1/2'
- Các bước: 
    - 1. Nhập đầy đủ thông tin hợp lệ.
    - 2. Nhấn Lưu.
    - 3. Thực hiện SELECT trên DB.
    - 4. Đối chiếu dữ liệu.
- Kết quả mong đợi: Thông báo “Lưu thành công” + DB trả về đúng 1 dòng, dữ liệu khớp 100%.

**Test case mẫu 2: Lưu thành công với các trường bắt buốc**

- Tên các trường hợp kiểm thử: Kiểm tra thêm mới khi chỉ nhập các trường bắt buộc
- Các bước: 
    - 1. Nhập các trường bắt buộc, không nhập các trường bắt buộc.
    - 2. Nhấn Lưu.
    - 3. Thực hiện SELECT trên DB.
    - 4. Đối chiếu dữ liệu.
- Kết quả mong đợi: Lưu thành công, các trường không bắt buộc để trống hoặc giá trị mặc định.

#### **3.3. Loại test: API**

**Mục đích**: Kiểm tra endpoint, validation, quyền, response code.

**Test case mẫu 1**

- Loại test: API
- Tên các trường hợp kiểm thử: Kiểm tra Tạo mới văn bản thành công (full fields)
- Test Data: Body JSON (đầy đủ) + token hợp lệ
- Các bước: 
    - 1. Gửi POST request với body hợp lệ.
    - 2. Kiểm tra response.
    - 3. Kiểm tra DB.
- Kết quả mong đợi: Status 201 + message “Document created successfully” + DB có bản ghi mới.

**Test case mẫu 2**

- Tên các trường hợp kiểm thử: Kiểm tra thiếu trường bắt buộc
- Các bước: 
    - 1. Gửi POST request với body thiếu trường bắt buộc.
    - 2. Kiểm tra response.
    - 3. Kiểm tra DB.
- Kết quả mong đợi: Status 400 + message “Missing required field: So\_van\_ban”.

**Test case mẫu 3**

- Tên các trường hợp kiểm thử: Kiểm tra user không có quyền
- Các bước: 
    - 1. Gửi POST request với token của user không có quyền
    - 2. Kiểm tra response.
    - 3. Kiểm tra DB.
- Kết quả mong đợi: Status 403 Forbidden.

**Test case mẫu 4**

- Tên các trường hợp kiểm thử: Kiểm tra thiếu token
- Các bước: 
    - 1. Gửi POST request với token để trống.
    - 2. Kiểm tra response.
    - 3. Kiểm tra DB.
- Kết quả mong đợi: Status 401 Unauthorized.

#### **3.4. Loại test: Tích hợp (Integration)**

**Mục đích**: Kiểm tra các module liên kết với nhau.

**Test case mẫu**

- Loại test: Tích hợp
- Tên các trường hợp kiểm thử: Kiểm tra lưu văn bản tiếp nhận thành công vào Sổ văn bản
- Các bước: 
    - 1. Thêm mới văn bản tiếp nhận.
    - 2. Truy cập Sổ văn bản đến.
- Kết quả mong đợi: Văn bản mới xuất hiện đúng trong sổ + file đính kèm được lưu vào bảng file\_relations.

#### **3.5. Loại test: Ghi log**

**Mục đích**: Đảm bảo mọi hành động quan trọng đều được ghi lại.

**Test case mẫu**

- Loại test: Ghi log
- Tên các trường hợp kiểm thử: Kiểm tra Ghi log khi lưu văn bản
- Các bước: 
    - 1. Thêm mới văn bản thành công.
    - 2. Truy cập log hệ thống.
- Kết quả mong đợi: 
    - Ghi đầy đủ: 
        - Tài khoản, Họ tên, Đơn vị, Mô tả thao tác (“Thêm mới/Truy cập/.....”), Trạng thái, IP, Thời gian.

#### **3.6. Loại test: Điều hướng &amp; UX**

**Mục đích**: Kiểm tra trải nghiệm người dùng mượt mà, không gây bất ngờ.

**Test case mẫu 1**

- Loại test: Điều hướng và UX
- Tên các trường hợp kiểm thử: Kiểm tra Button Hủy thêm mới
- Kết quả mong đợi: Không lưu dữ liệu + quay về danh sách.

**Test case mẫu 2**

- Tên các trường hợp kiểm thử: Kiểm tra confirm xóa file
- Kết quả mong đợi: Popup xác nhận xuất hiện → Chọn Hủy → file vẫn còn.

### 4. Checklist bắt buộc khi viết xong 1 test case

- Có **Test Data + SQL query** rõ ràng
- Có cả **positive &amp; negative case**
- Có **DB verification** (SELECT)
- Có **API test** song song (nếu là chức năng CRUD)
- Có **Ghi log** cho action quan trọng
- File upload/download/view/delete đầy đủ
- Date field kiểm tra format + logic (quá khứ/hiện tại/tương lai)
- Dropdown/search/empty/invalid data
- Export theo filter (có dữ liệu / không dữ liệu)
- UX: confirm, cancel, navigation không lag