← Quay lại mục lục

Bài 29 — Import CSV danh sách tài khoản

Form upload CSV 4 cột (Account, Full name, Password, Group). Spec dài, 10 bugs cài cắm: message text, boundary value, logic validation, data integrity. Test format error <line>: <message>.

Trung bình #csv #upload #boundary-value #duplicate #validation #file-handling

📥 Bài 29: Import danh sách tài khoản từ CSV

Người dùng có thể chọn file CSV (Comma Separated Value) để import người dùng vào trong hệ thống.

📋 File CSV có những cột như dưới

Vị trí Tên cột Yêu cầu
1 Account
  • Account không được để trống.
  • Account chỉ chấp nhận ký tự Alphanumeric (a-z, A-Z, 0-9).
  • Nếu có space ở đầu và cuối thì hệ thống sẽ tự động cắt các khoảng trống đó trước khi lưu vào cơ sở dữ liệu.
  • Độ dài tối thiểu 6 ký tự, tối đa 18 ký tự.
2 Full name
  • Full name không được để trống.
  • Độ dài tối thiểu 4 ký tự, tối đa 32 ký tự.
3 Password
  • Password không được để trống.
  • Độ dài tối thiểu 8, tối đa 32 ký tự.
  • Mật khẩu phải chứa ít nhất: 1 ký tự in thường, 1 ký tự in hoa, 1 ký tự số, 1 ký tự đặc biệt.
4 Group
  • Là group mà người dùng sẽ thuộc.
  • Group có thể để trống hoặc không có cột này.
  • Group ID phải tồn tại trong CSDL thì mới được coi là thỏa mãn.
  • Hệ thống cũng tự trim space đầu và cuối trước khi so sánh với DB.

📤 Format thông báo lỗi

Khi có lỗi tại một dòng nào trong file chứa dữ liệu không phù hợp, hệ thống sẽ tiến hành gửi thông báo với nội dung mẫu như sau:

<line>: <Nội dung thông báo lỗi>

Ví dụ:

100: Account is existed
101: Account is blank

📨 Các message được sử dụng

Sự kiện Message
File quá 5MbThe import file should be less than 5Mb
File không phải CSVThe import file should be a CSV file
File không đọc được, sai format nội dung, không tồn tạiThe import file is invalid
Account để trốngAccount is blank
Account đã tồn tạiAccount is existed
Account không thỏa mãn độ dàiAccount should contain 6 to 18 characters
Account chứa ký tự không hợp lệAccount should contain alphanumeric characters only
Full name để trốngFull name is blank
Full name không thỏa mãn độ dàiFull name should contain 4 to 32 characters
Password để trốngPassword is blank
Password không thỏa mãn độ dàiPassword should contain 8 to 32 characters
Password không thỏa mãn độ phức tạpPassword should contain 1 character, 1 capitalize character, 1 number and 1 special character
Group ID không tồn tạiGroup is not existed

🗄️ Dữ liệu mẫu trong DB (mock)

Các tài khoản đã tồn tại sẵn trong hệ thống:

  • admin
  • testuser
  • manager01

Các Group ID hợp lệ trong hệ thống:

  • 1 — Admin
  • 2 — Editor
  • 3 — Viewer
  • 5 — Guest
  • 10 — Manager

🧪 Sample CSV để test

✅ Sample 1 — Tất cả hợp lệ

Account,Full name,Password,Group
john01,John Smith,Pass1234!,1
mary02,Mary Johnson,Test@2024,2
peter03,Peter Brown,Strong#9,3
💡 Mẹo tạo file CSV: Copy nội dung Sample 1 phía trên, paste vào Notepad / VS Code, save với extension .csv và encoding UTF-8. Sau đó upload qua form ở tab "Form thực hành". Tự thiết kế thêm các test case dựa trên spec validation ở phần đầu.

🎯 Yêu cầu công việc

  1. Đọc kỹ spec validation ở trên.
  2. Thiết kế bộ test case cho từng field, đặc biệt giá trị biên (6/18 ký tự account, 4/32 ký tự name, 8/32 ký tự password, password complexity 4 nhóm).
  3. Tự thiết kế và tạo các file CSV test cases dựa trên spec.
  4. Upload từng file qua form, đối chiếu kết quả thực tế với spec → ghi nhận bug.
  5. Đặc biệt chú ý format thông báo lỗi: <line>: <message> và nội dung message phải khớp chính xác theo bảng trên.

📝 Template bug report

STTMô tảFile CSV testThực tếMong đợiMức độ
1(học viên điền)

💡 Kỹ thuật test áp dụng

  • Boundary Value Analysis: độ dài account/name/password ở 2 đầu biên (5/6, 18/19, 3/4, 32/33, 7/8).
  • Equivalence Partitioning: phân nhóm input cho password complexity (đủ 4 nhóm / thiếu 1 nhóm / thiếu 2 nhóm…).
  • Negative testing: file > 5MB, file không phải CSV, header sai, file rỗng, file không tồn tại.
  • Data quality: whitespace đầu/cuối, ký tự đặc biệt, encoding UTF-8 (tiếng Việt trong Full name).
  • Duplicate detection: trong file + giữa file và DB.
  • Format conformance: message text phải khớp chính xác (ví dụ "Account is blank" — không được là "Account is empty" hay "Account cannot be blank").
⚠️ Lưu ý: Form có cài cắm sẵn nhiều bug. Hãy đọc kỹ từng từ trong message lỗi, test các giá trị biên, và đối chiếu chính xác với bảng spec ở trên để phát hiện hết.
🔐

Vui lòng đăng nhập để nộp bài.

Đăng nhập
🔐

Tab dành cho giảng viên

Tab này chứa danh sách các lỗi đã cài cắm trong form. Vui lòng nhập mã giảng viên để mở khóa. Mã sẽ ghi nhớ trong phiên làm việc — chỉ cần nhập 1 lần cho cả 3 bài.