# 05.03. Batch Processing Testing

## Mục đích
Kiểm thử các tiến trình xử lý dữ liệu hàng loạt chạy ngầm (Cron jobs, Background workers, Scheduled tasks). Đảm bảo các tiến trình này thực thi đúng thời điểm, xử lý chính xác khối lượng dữ liệu lớn mà không gây treo hệ thống, và có khả năng phục hồi khi gặp lỗi.

## Kiến thức cần có
- **Hệ điều hành & Cron:** Cách cấu hình cron expression (ví dụ: `0 0 * * *`).
- **Cơ sở dữ liệu:** Kỹ năng truy vấn DB để kiểm tra trạng thái dữ liệu trước và sau khi xử lý.
- **Hệ thống hàng đợi (Message Queues):** Hiểu về RabbitMQ, Kafka, Redis Queue.
- **Giám sát (Monitoring):** Biết cách xem log hệ thống và sử dụng các công cụ giám sát (Grafana, Kibana).

## Quy trình thực hiện
1. **Xác định trigger:** Kiểm tra xem tiến trình được kích hoạt bởi thời gian (Schedule) hay bởi một sự kiện (Event-driven).
2. **Chuẩn bị dữ liệu mẫu (Massive data):** Tạo tập dữ liệu lớn để kiểm tra hiệu năng và giới hạn xử lý.
3. **Kích hoạt tiến trình:**
    - Chờ đến thời điểm tự động.
    - Kích hoạt thủ công (Manual trigger) để kiểm tra nhanh.
4. **Theo dõi thực thi:**
    - Kiểm tra log để xem tiến trình bắt đầu và kết thúc khi nào.
    - Theo dõi tài nguyên hệ thống (CPU, RAM) trong quá trình xử lý.
5. **Kiểm chứng dữ liệu:** Đối soát dữ liệu trong DB sau khi batch job kết thúc.
6. **Kiểm thử trường hợp lỗi:** Ngắt kết nối mạng hoặc tắt server giữa chừng để kiểm tra khả năng phục hồi.

## Checklist
- [ ] Tiến trình chạy đúng thời gian đã cấu hình.
- [ ] Xử lý thành công toàn bộ dữ liệu đầu vào.
- [ ] Không xảy ra lỗi tràn bộ nhớ (Memory leak) hoặc timeout khi xử lý khối lượng lớn.
- [ ] Trạng thái của job (Pending, Running, Success, Failed) được cập nhật chính xác trong bảng quản lý job.
- [ ] Cơ chế Retry hoạt động đúng cho các record bị lỗi lẻ tẻ.
- [ ] Tính Idempotency: Chạy lại job nhiều lần trên cùng một bộ dữ liệu không gây ra dữ liệu trùng lặp hoặc sai lệch.
- [ ] Các job chạy song song (Concurrency) không gây ra tranh chấp dữ liệu (Deadlock).
- [ ] Log ghi lại đầy đủ thông tin: số record thành công, số record thất bại, lý do lỗi.

## Output mong đợi
- **Báo cáo thực thi Batch Job:** Chi tiết thời gian bắt đầu, kết thúc và kết quả xử lý.
- **Kết quả đối soát dữ liệu:** Bảng so sánh dữ liệu trước và sau khi chạy batch.
- **Danh sách lỗi phát hiện:** Các lỗi về hiệu năng hoặc logic xử lý dữ liệu lớn.
- **Tài liệu cấu hình:** Hướng dẫn cấu hình và kích hoạt các job.
