Excel Automation Cho Tester: Viết Macro VBA Tạo Test Data Tự Động

6 tháng trước · 13 phút đọc
Tại sao tester cần biết VBA Macro trong Excel?
Mình nhớ lần đầu nhận task chuẩn bị test data cho module đăng ký tài khoản - 200 bộ dữ liệu: tên, email, số điện thoại, địa chỉ, ngày sinh. Ngồi nhập tay 3 tiếng, xong đến hôm sau dev báo schema đổi, phải làm lại từ đầu. Đó là lúc mình bắt đầu tìm hiểu VBA Macro.
VBA (Visual Basic for Applications) là ngôn ngữ lập trình tích hợp sẵn trong Excel. Bạn không cần cài thêm gì, không cần biết code sâu. Chỉ cần hiểu logic cơ bản là viết được macro tạo dữ liệu hàng loạt.
Từ nhập tay 3 tiếng xuống còn 30 giây - đó là lý do cần VBA
Với tester, VBA hữu ích nhất ở 3 việc:
- Tạo test data random hàng trăm dòng theo đúng format yêu cầu
- Import/export test case giữa Excel và các tool như Jira, TestRail
- Tự động hóa báo cáo bug summary sau mỗi sprint
Nhiều JD tester trên TopDev hiện nay ghi "Excel advanced" là yêu cầu. Biết VBA là điểm cộng rõ ràng so với ứng viên chỉ biết filter và pivot table. Bài này mình hướng dẫn từng bước, không cần nền tảng lập trình.
Bật VBA Editor và viết macro đầu tiên
Trước khi viết bất kỳ dòng code nào, bạn cần bật tab Developer trong Excel. Mặc định tab này bị ẩn.
Bật tab Developer:
- Mở Excel → File → Options → Customize Ribbon
- Ở cột bên phải, tích vào ô Developer
- Bấm OK
Bây giờ bạn thấy tab Developer trên thanh ribbon. Bấm vào Visual Basic để mở VBA Editor (hoặc nhấn Alt + F11).
Tab Developer và nút Visual Basic - cửa ngõ vào thế giới macro
Cửa sổ VBA Editor mở ra. Nhìn có vẻ đáng sợ nhưng bạn chỉ làm việc ở 1 vùng: Code Window (vùng trắng lớn bên phải).
Thử viết macro đầu tiên - đơn giản nhất:
Dán code này vào Code Window, bấm F5 hoặc nút Run (tam giác xanh). Nếu xuất hiện hộp thoại thông báo - chúc mừng, bạn vừa chạy macro đầu tiên.
Thấy khó ở bước này bình thường. Mình cũng mất cả buổi loay hoay với giao diện VBA Editor lần đầu. Cứ làm theo từng bước, không cần hiểu tất cả ngay.
Viết macro tạo test data random cho tính năng đăng ký
Đây là phần thực chiến nhất. Mình sẽ hướng dẫn viết macro tạo 100 bộ test data cho form đăng ký tài khoản - gồm: STT, Họ tên, Email, Số điện thoại, Ngày sinh.
Tạo sheet mới tên "TestData", sau đó mở VBA Editor và dán code sau:
100 dòng test data hoàn chỉnh - tạo trong chưa đầy 2 giây
Bấm F5 chạy macro. Sheet TestData sẽ tự động điền 100 dòng dữ liệu. Mỗi lần chạy lại cho ra bộ số điện thoại và ngày sinh khác nhau.
Điểm quan trọng: Rnd() trong VBA tạo số ngẫu nhiên. Int() làm tròn xuống thành số nguyên. Kết hợp Int(Rnd() * N) cho ra số từ 0 đến N-1. Hiểu 2 hàm này là hiểu 80% logic tạo test data random.
Macro xuất test case ra file CSV để import vào Jira
Tạo test data xong rồi, bước tiếp theo nhiều team yêu cầu là export test case sang CSV để import vào Jira hoặc TestRail. Làm thủ công thì copy-paste từng sheet, rất mất thời gian và dễ sai format.
Macro dưới đây đọc toàn bộ test case trong sheet "TestCase" và xuất ra file CSV cùng thư mục với file Excel:
Flow export test case từ Excel sang CSV rồi import vào Jira - 3 bước tự động
Tại sao dùng dấu ngoặc kép quanh mỗi ô? Vì test case thường có dấu phẩy trong mô tả, ví dụ: "Nhập username, password hợp lệ". Nếu không đặt trong ngoặc kép, CSV sẽ hiểu dấu phẩy đó là separator và cắt dữ liệu nhầm. Bug này mình từng bỏ qua, kết quả import vào Jira bị lệch hết cột.
Mỗi lần export, file CSV tự động đặt tên theo timestamp - không bao giờ bị ghi đè file cũ. Thói quen nhỏ nhưng tránh được rất nhiều phiền phức.
Macro đọc test case từ file CSV bên ngoài vào Excel
Import ngược lại - đọc CSV vào Excel - cũng cần thiết không kém. Tình huống thường gặp: team lead gửi file CSV chứa test case template, bạn cần load vào Excel để điền kết quả test.
Kết quả import: sheet mới tự tạo, header được format tự động - không cần chỉnh tay
Điểm mình thích nhất ở macro này: tự động tạo sheet mới đặt tên theo giờ import, tự format header màu xanh, tự auto-fit cột. Ba việc này thường mất 2-3 phút làm tay, giờ chạy xong trong 3 giây.
Chr(34) là mã ASCII của dấu ngoặc kép ". Dòng Replace(mang(j), Chr(34), "") xóa dấu ngoặc kép thừa sau khi tách chuỗi - không hiểu ngay cũng không sao, chỉ cần nhớ đặt vào để tránh dữ liệu bị thừa dấu ngoặc kép.
Template Excel sẵn dùng và cách gán macro vào nút bấm
Viết xong macro mà mỗi lần dùng phải mở VBA Editor để F5 thì khá bất tiện. Cách chuyên nghiệp hơn: gán macro vào nút bấm ngay trong sheet.
Tạo nút bấm:
- Tab Insert → Shapes → chọn hình chữ nhật bo góc
- Vẽ nút lên sheet, nhập tên: "Tạo Test Data"
- Click chuột phải vào nút → Assign Macro → chọn
TaoTestData
Từ giờ chỉ cần bấm nút là macro chạy. Bạn có thể tạo 3-4 nút cho các macro khác nhau trên cùng 1 sheet control.
Dashboard macro với các nút bấm - trông professional hơn nhiều khi demo cho HR
Mình đã tạo sẵn 1 file Excel template gồm:
- Sheet Control: 4 nút bấm (Tạo Test Data, Export CSV, Import CSV, Xóa Dữ Liệu)
- Sheet TestData: nơi test data được tạo ra
- Sheet TestCase: nơi viết test case theo format chuẩn
- Sheet Config: tùy chỉnh số lượng dữ liệu, prefix email, format SĐT
Tải template tại đây: Tải file Excel Macro Template (demo HTML)
Lưu file đúng format: File Excel có macro phải lưu dạng .xlsm (Excel Macro-Enabled Workbook), không phải .xlsx. Lưu .xlsx là mất sạch code VBA, lỗi này mình mắc phải 2-3 lần trước khi nhớ.
Ngoài ra, bạn có thể tải bộ template test case chuẩn (CSV + Excel): Tải bộ Test Case Template chuẩn
Xử lý lỗi thường gặp khi chạy macro
Ba lỗi phổ biến nhất mình gặp khi mới học VBA - và cách fix:
Lỗi 1: "Subscript out of range" khi chạy macro
Nguyên nhân: tên sheet trong code không khớp với tên sheet thực tế. VBA phân biệt hoa thường và khoảng trắng.
Fix: kiểm tra lại tên sheet. Sheets("TestData") sẽ lỗi nếu sheet đặt tên là "Test Data" (có dấu cách) hoặc "testdata" (chữ thường).
Lỗi 2: Macro bị disable, không chạy được
Nguyên nhân: Excel block macro vì lý do bảo mật.
Fix: File → Options → Trust Center → Trust Center Settings → Macro Settings → chọn "Enable all macros". Khi share file cho người khác, nhắc họ enable macro trước khi dùng.
Lỗi 3: File lưu xong, mở lại không thấy macro
Nguyên nhân: lưu file dạng .xlsx thay vì .xlsm.
Fix: File → Save As → chọn Excel Macro-Enabled Workbook (*.xlsm).
3 lỗi hay gặp và cách fix - bookmark lại để tra khi cần
Nếu gặp lỗi khác, mình recommend copy thông báo lỗi (màu đỏ trong VBA Editor) và paste vào Google - cộng đồng VBA rất lớn, phần lớn câu hỏi VBA trên Stack Overflow có câu trả lời được chấp nhận.
Đừng nản nếu macro lỗi lần đầu. Lập trình mà không gặp lỗi mới lạ. Quan trọng là đọc thông báo lỗi kỹ - VBA thường chỉ ra đúng dòng bị lỗi, không phải đoán mò.
Bước tiếp theo: từ Excel VBA đến automation test thực sự
Biết VBA Macro là bước đầu tốt. Nhưng khi đã quen với tư duy tự động hóa, bạn sẽ tự nhiên muốn đi xa hơn.
Path phổ biến mà nhiều tester mình biết đã đi:
- Excel VBA (bài này) - tạo data, export/import
- Selenium + Python/Java - automation UI testing
- Postman + Newman - automation API testing
- Cypress hoặc Playwright - end-to-end testing hiện đại
Bạn không cần học hết cùng lúc. Thành thạo VBA trước, sau đó tìm hiểu Selenium khi công ty yêu cầu.
Lộ trình tester từ Excel VBA đến automation tool chuyên nghiệp
Nếu muốn có nền tảng bài bản từ đầu - từ manual testing, viết test case, bug report, đến các kỹ năng Excel và SQL cho tester - khóa Kiểm thử phần mềm cover khá đầy đủ các phần này, phù hợp cho bạn đang chuyển ngành hoặc mới bắt đầu.
Về Excel VBA, mình cũng tổng hợp checklist các kỹ năng cần biết ở giai đoạn đầu:
Tải Checklist Kỹ Năng Excel Cho Tester
Test kỹ 1 lần tốt hơn fix lỗi nhiều lần. Tự động hóa test data cũng vậy - tốn 1-2 giờ viết macro, tiết kiệm hàng chục giờ làm tay về sau. Comment bên dưới nếu bạn gặp lỗi ở bước nào, mình trả lời từng bạn.
