CYBERSOFT
Đăng nhập

Chuẩn bị dữ liệu test trong automation cho người mới: fixtures, tạo & dọn dữ liệu (có code chạy được)

Chuyên công nghệNền tảngNgười mớiChuẩn SEO
🗓 1 tháng trước19 phút đọc·👁 266 lượt xem👤 437 người đọc

Bài cho người mới: chuẩn bị dữ liệu test trong automation qua app TMĐT ShopEasy. Vì sao test cần dữ liệu độc lập & lặp lại được, khái niệm fixture với setup/teardown, tạo tài khoản/đơn hàng qua API thay vì UI, dọn dữ liệu sau test, giữ test không phụ thuộc nhau, hai tình huống thật (dùng chung tài khoản chạy song song đụng nhau, không dọn data khiến lần chạy sau fail), nhiều mockup giao diện, FAQ và trắc nghiệm 5 câu. Chuẩn SEO, dẫn về khóa Tester CyberSoft.

1. Tóm tắt nhanh & vì sao dữ liệu test quan trọng

⭐ TL;DR — Chuẩn bị dữ liệu test là bước nền tảng của automation: mỗi test cần dữ liệu của RIÊNG mình, độc lập với test khác, và có thể tạo lại y hệt ở bất kỳ lần chạy nào (repeatable). Bài này bám app TMĐT ShopEasy: bạn học vì sao dữ liệu dùng chung gây lỗi khó lường, khái niệm fixture với setup/teardown, cách tạo tài khoản/đơn hàng qua API thay vì qua giao diện, cách dọn dữ liệu sau test, và cách giữ test không phụ thuộc lẫn nhau — có code Playwright chạy được, nhiều hình minh hoạ và trắc nghiệm cuối bài.

Chào bạn mới! Khi bắt đầu viết test automation, phần lớn người mới tập trung vào việc thao tác giao diện: bấm nút, điền form, kiểm tra kết quả hiện ra. Nhưng có một câu hỏi âm thầm quyết định test của bạn có đáng tin hay không: dữ liệu bạn đang test LÀ dữ liệu gì, TỪ ĐÂU mà có, và LIỆU nó có còn nguyên vẹn ở lần chạy tiếp theo? Nếu test 'mượn' một tài khoản có sẵn, một đơn hàng ai đó tạo trước, kết quả hôm nay đúng không có nghĩa ngày mai vẫn đúng — vì dữ liệu đó có thể đã bị người khác đổi, xoá, hoặc dùng chung với 1 test khác đang chạy song song. Chuẩn bị dữ liệu test đúng cách chính là nền móng giúp automation đáng tin cậy lâu dài, và đó là điều bài này sẽ giúp bạn làm chủ qua ví dụ thật với ShopEasy.

🔒 shopeasy.vn/tai-khoan/don-hang ShopEasy · TMĐT ShopEasy · Đơn hàng của tôi Tài khoản đăng nhập qa.1721.938201@shopeasy.vnMã đơn hàng vừa tạo DH-TEST-938201Xem chi tiết đơn Sinh riêng cho lần chạy: email gắn timestamp Đơn hàng tạo qua API, không đụng đơn của ai khác
Màn hình ShopEasy: tài khoản và đơn hàng được tạo riêng cho mỗi lần chạy test, không lẫn với dữ liệu khác
📖 Dữ liệu test (test data): toàn bộ dữ liệu (tài khoản, đơn hàng, sản phẩm...) mà một kịch bản test cần có sẵn để chạy và kiểm tra kết quả, có thể là dữ liệu có sẵn hoặc do chính test tự tạo ra.

2. Vấn đề: test dùng chung dữ liệu, kết quả không đáng tin

Hãy hình dung đội automation ShopEasy viết 20 test, và cả 20 test đều đăng nhập bằng đúng 1 tài khoản 'demo@shopeasy.vn' có sẵn trên môi trường staging. Ban đầu mọi thứ chạy ổn — cho tới khi 2 test cùng cập nhật giỏ hàng của tài khoản này cùng lúc: một test đang kiểm tra 'giỏ hàng trống sau khi xoá hết', test kia lại vừa thêm 2 sản phẩm vào giỏ để test 'tính tổng tiền'. Cả hai chạy song song, và tuỳ vào việc ai 'thắng' trước, một trong hai test sẽ fail dù code tính năng hoàn toàn đúng.

Vấn đề không dừng ở đó. Khi 1 test khác vô tình xoá tài khoản 'demo@shopeasy.vn' để kiểm tra tính năng 'xoá tài khoản', mọi test còn lại dùng chung tài khoản này sẽ đồng loạt fail — không phải vì tính năng của chúng có lỗi, mà vì dữ liệu chúng cần đã biến mất. Đây là dấu hiệu rõ ràng nhất của một bộ test 'giòn': kết quả phụ thuộc vào thứ tự chạy, vào việc test nào chạy trước, và vào việc có ai đó đang đụng vào cùng dữ liệu hay không — những thứ mà bản thân tính năng cần kiểm thử không hề liên quan.

📖 Cô lập dữ liệu (data isolation): nguyên tắc mỗi test dùng dữ liệu của riêng nó, không đọc/ghi lên dữ liệu mà test khác cũng đang dùng, để kết quả không bị ảnh hưởng bởi test khác.

3. Fixture là gì & vì sao gắn liền với dữ liệu test

Fixture là cách Playwright (và nhiều framework automation khác) chuẩn hoá việc chuẩn bị và dọn dẹp mọi thứ một test cần — trong đó dữ liệu test là ví dụ phổ biến nhất. Một fixture gồm 2 giai đoạn: phần đứng TRƯỚC use() là setup (tạo tài khoản, tạo đơn hàng...), phần đứng SAU use() là teardown (xoá dữ liệu vừa tạo). Test chỉ cần khai báo tên fixture mình cần trong tham số hàm test, Playwright tự lo phần còn lại — kể cả khi test đó fail giữa chừng, teardown vẫn được đảm bảo chạy.

Các loại fixture thường dùng khi chuẩn bị dữ liệu test Loại fixtureVai tròVí dụ trong ShopEasytestAccountTạo + tự xoá 1 tài khoản riêng cho mỗi testtestAccount.email, testAccount.idtestOrderTạo sẵn 1 đơn hàng ở đúng trạng thái cần testtestOrder.code = 'DH-TEST-9021'apiContextCung cấp kênh gọi thẳng API, không qua thao tác UIrequest.post('/accounts', {...})page (có sẵn)Tab trình duyệt riêng biệt cho từng testawait page.goto(url)fixture cấp workerDữ liệu chỉ-đọc, dùng chung an toàn cho cả nhóm test trong 1 workercatalogFixture (danh mục sản phẩm mẫu)Mỗi fixture chịu trách nhiệm cho đúng 1 loại dữ liệu — test chỉ khai báo cần fixture nào, không tự tạo dữ liệu thủ công.
Các loại fixture thường dùng khi chuẩn bị dữ liệu test cho ShopEasy

Điểm mấu chốt của fixture không nằm ở cú pháp, mà ở TƯ DUY: thay vì mỗi test tự tay tạo dữ liệu theo cách riêng (và dễ quên dọn), bạn định nghĩa MỘT nơi duy nhất biết cách tạo đúng loại dữ liệu đó, và mọi test chỉ cần 'mượn' fixture này. Nhờ vậy, nếu sau này cách tạo tài khoản test thay đổi (ví dụ thêm trường bắt buộc), bạn chỉ cần sửa đúng 1 fixture, thay vì rà từng test.

💡 Đặt tên fixture theo đúng dữ liệu nó tạo ra (testAccount, testOrder...) để bất kỳ ai đọc tên tham số trong hàm test cũng đoán được dữ liệu đang dùng là gì.

4. Setup → Test → Teardown: vòng đời của 1 fixture

Mỗi lần một test khai báo dùng fixture testAccount, vòng đời diễn ra theo đúng 3 bước: (1) Setup — Playwright chạy đoạn code trước use(), gọi API tạo tài khoản mới; (2) Test — hàm use(account) trả tài khoản đó vào test, và toàn bộ thân test chạy với dữ liệu này; (3) Teardown — ngay sau khi test kết thúc (bất kể pass hay fail), đoạn code sau use() chạy tiếp để gọi API xoá tài khoản vừa tạo. Ba bước này lặp lại độc lập cho MỖI test, nên 2 test chạy song song sẽ có 2 tài khoản hoàn toàn khác nhau.

Sơ đồ chuẩn bị dữ liệu: Setup → Test → Teardown trước use() sau use(), luôn chạySetuptạo dữ liệu qua APITestchạy kịch bản trên ShopEasyTeardownxoá dữ liệu vừa tạo
Vòng đời chuẩn bị dữ liệu qua fixture: Setup tạo dữ liệu, Test dùng dữ liệu, Teardown xoá dữ liệu

Điều làm nên sự khác biệt so với việc tự viết setup/dọn dẹp thủ công trong từng test là TÍNH ĐẢM BẢO: teardown của fixture chạy ngay cả khi test throw lỗi giữa chừng, vì Playwright quản lý phần này ở khung chạy test, không phụ thuộc vào việc bạn có nhớ gọi hàm dọn dẹp ở cuối file hay không. Đây chính là lý do fixture là công cụ đúng đắn để chuẩn bị dữ liệu test, thay vì viết tay từng bước setup/cleanup rải rác trong mỗi file.

5. Tạo dữ liệu qua API/DB thay vì qua giao diện

Có một câu hỏi người mới hay bỏ qua: khi cần 1 tài khoản để test giỏ hàng, nên tạo tài khoản đó bằng cách nào — điền form đăng ký trên giao diện, hay gọi thẳng API tạo tài khoản? Câu trả lời gần như luôn là API/DB, TRỪ KHI chính bài test đó đang kiểm thử tính năng đăng ký. Lý do rất thực tế: mỗi bước UI (mở trang, điền ô, chờ phản hồi, chờ redirect) tốn thời gian và có thể fail vì lý do không liên quan gì tới dữ liệu — ví dụ 1 ô input đổi id, 1 bước xác thực OTP mới được thêm vào.

🔒

Nội dung bị khoá

Bạn đang xem bản xem trước. Đăng nhập để mở khoá toàn bộ bài viết và tất cả tài liệu Tester/QA.

Đã xem 24% nội dung
  • Đọc trọn vẹn mọi bài viết
  • Lưu bài & ghi chú cá nhân
  • Theo dõi tiến độ đã đọc
  • Luyện phỏng vấn, ISTQB, Mock
Đăng nhập để đọc tiếp

Chưa có mã? Lấy mã qua Fanpage / Zalo CyberSoft.

0

💬 Bình luận (0)

Bạn có thể đọc mọi bình luận. Đăng nhập để bình luận

Chưa có bình luận nào. Hãy là người đầu tiên!