CYBERSOFT
Đăng nhập

Chạy test song song & giữ test độc lập cho người mới (có code Playwright 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·👁 1,457 lượt xem👤 462 người đọc

Bài cho người mới: học cách chạy test song song và giữ test độc lập qua app TMĐT ShopEasy. Vì sao chạy tuần tự hàng trăm test quá chậm, nguyên tắc không chia sẻ trạng thái, mỗi test tự dựng dữ liệu riêng, cấu hình workers/fullyParallel bằng Playwright chạy được, hai tình huống thật (2 test đụng dữ liệu fail ngẫu nhiên, rút CI từ 42 xuống 11 phút), 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 & màn hình bạn sẽ test

⭐ TL;DR — Chạy test song song là chạy nhiều test cùng lúc bằng nhiều worker để rút ngắn tổng thời gian, thay vì chạy từng test một tuần tự. Điều kiện bắt buộc để làm được điều đó an toàn là mọi test phải ĐỘC LẬP: không phụ thuộc thứ tự, không chia sẻ trạng thái, và mỗi test tự dựng dữ liệu riêng. Bài này bám theo app TMĐT ShopEasy: bạn học vì sao chạy tuần tự quá chậm, nguyên tắc giữ test độc lập, cách cấu hình workers/fullyParallel và viết test tự tạo dữ liệu bằng Playwright chạy được thật. Nhiều hình minh hoạ và trắc nghiệm cuối bài.

Chào bạn mới! Khi bộ test tự động của bạn còn ít — vài test, mười test — chạy tuần tự (test này xong mới tới test kia) không phải vấn đề lớn, chỉ mất vài phút. Nhưng khi bộ test lớn dần lên hàng chục, hàng trăm test, chạy tuần tự có thể mất cả tiếng đồng hồ, làm chậm cả pipeline CI/CD và khiến cả đội phải chờ. Câu trả lời là chạy test song song — nhưng chạy test song song CHỈ an toàn khi mọi test đều độc lập với nhau. Bài này sẽ giúp bạn hiểu rõ hai khái niệm đi liền nhau này: chạy test song song và giữ test độc lập, qua ví dụ thật của ShopEasy, có hình minh hoạ và code Playwright chạy được.

🔒 shopeasy.vn/gio-hang ShopEasy · TMĐT ShopEasy · Giỏ hàng test Mã đơn hàng test (tự sinh) SE-TEST-8841Sản phẩm test (SKU tự tạo) SKU-PARALLEL-0007Tạo dữ liệu test mới Mỗi test tự sinh mã đơn hàng riêng Mỗi test tự tạo SKU riêng, không dùng chung sản phẩm Gọi API tạo dữ liệu test độc lập
Màn hình test: giỏ hàng ShopEasy, mỗi test tự sinh mã đơn hàng và SKU sản phẩm riêng
📖 Chạy test song song: chạy nhiều test cùng lúc trên nhiều worker (tiến trình) thay vì chạy từng test một, nhằm rút ngắn tổng thời gian chạy cả bộ test.
💡 Nếu bạn muốn học automation bài bản, từ nền tảng tới cấu hình CI/CD chạy song song thực chiến, khóa Software Testing chuyên nghiệp tại CyberSoft Academy sẽ giúp bạn đi nhanh và đúng hướng. 👉 https://cybersoft.edu.vn/software-testing-chuyen-nghiep-tu-zero-toi-duoc-nhan-viec-manual-automation-testing/

2. Vấn đề: chạy tuần tự 100 test quá lâu

Hãy hình dung bộ test ShopEasy có 120 test: đăng nhập, tìm kiếm sản phẩm, thêm giỏ hàng, thanh toán, huỷ đơn... Nếu chạy tuần tự — Playwright mở trình duyệt, chạy xong test 1, đóng lại, mở lại cho test 2, cứ thế lần lượt — mỗi test trung bình mất 20 giây thì 120 test sẽ mất khoảng 40 phút. Với một đội chạy CI mỗi lần push code, 40 phút chờ đợi mỗi lần là con số rất lớn, làm chậm cả vòng lặp phát triển.

Chạy tuần tự: mỗi test phải đợi test trước xong mới bắt đầu chờ xong rồi mới chạy chờ xong rồi mới chạyTest 1đăng nhậpTest 2thêm giỏ hàngTest 3thanh toán
Sơ đồ chạy tuần tự: test 2 phải chờ test 1 xong, test 3 phải chờ test 2 xong

Vấn đề không chỉ là 'chờ lâu' — nó còn ảnh hưởng tới thói quen của cả đội. Khi CI chạy quá lâu, lập trình viên có xu hướng gộp nhiều commit lại trước khi push, hoặc bỏ qua việc chờ kết quả test mà merge luôn, làm giảm giá trị của automation. Giải pháp tự nhiên là chạy nhiều test cùng lúc bằng nhiều worker (chạy song song) — nhưng làm vậy an toàn hay không phụ thuộc hoàn toàn vào việc các test có ĐỘC LẬP với nhau hay không, điều ta sẽ tìm hiểu ngay sau đây.

📖 Sequential run (chạy tuần tự): cách chạy test lần lượt từng test một, test sau chỉ bắt đầu khi test trước đã hoàn tất.

3. Test độc lập là gì & vì sao quan trọng

Một test được coi là ĐỘC LẬP khi kết quả pass/fail của nó không phụ thuộc vào: (1) test nào đã chạy trước nó, (2) test nào sẽ chạy sau nó, và (3) test đó chạy một mình hay chạy cùng lúc với các test khác. Nói cách khác, dù bạn chạy test này đầu tiên, cuối cùng, hay chạy song song với 10 test khác — kết quả luôn giống nhau, vì test tự lo liệu đủ mọi thứ nó cần (dữ liệu, trạng thái đăng nhập, môi trường) mà không dựa vào 'may mắn' rằng test khác đã chuẩn bị sẵn.

Test phụ thuộc thứ tự vs Test độc lập Tiêu chíTest PHỤ THUỘC (không độc lập)Test ĐỘC LẬPNguồn dữ liệuDùng chung 1 tài khoản/sản phẩm được seed sẵnTự tạo tài khoản/sản phẩm riêng ngay lúc chạyThứ tự chạyBắt buộc đúng thứ tự: Test A rồi mới tới Test BChạy trước, chạy sau, hay chạy song song đều ra cùng kết quảChạy song song (nhiều workers)Dễ đụng độ dữ liệu, fail ngẫu nhiên khó tái hiệnAn toàn, mỗi worker xử lý dữ liệu riêng của nóChạy lại 1 test lẻPhải chạy cả chuỗi test trước nó mới ra đúng kết quảChạy riêng lẻ một mình vẫn pass bình thườngTốc độ khi bộ test lớn dầnChỉ chạy được tuần tự, càng nhiều test càng lâuTận dụng được nhiều worker, tăng tốc đáng kểTest độc lập không có nghĩa là 'không liên quan nghiệp vụ' — mà là kết quả của nó không phụ thuộc việc test khác đã chạy hay chưa.
Bảng so sánh: cùng một luồng nghiệp vụ ShopEasy, test PHỤ THUỘC thứ tự và test ĐỘC LẬP

Vì sao điều này quan trọng đến mức được coi là nguyên tắc nền tảng của automation? Vì test tự động chỉ có giá trị khi bạn TIN TƯỞNG được kết quả của nó. Nếu một test có thể pass hôm nay, fail ngày mai chỉ vì thứ tự chạy đổi khác (do CI chọn ngẫu nhiên, do chạy song song, do có người thêm test mới ở giữa), cả đội sẽ dần mất niềm tin vào bộ test, coi 'fail' là chuyện bình thường và bỏ qua — đây chính là lúc automation mất hết ý nghĩa vốn có của nó.

💡 Một cách tự kiểm tra nhanh: thử chạy MỘT test lẻ (chỉ đúng file đó, không chạy gì khác trước) — nếu nó fail hoặc báo lỗi thiếu dữ liệu, rất có thể test đó đang phụ thuộc vào test khác.

4. Nguyên tắc: không chia sẻ trạng thái giữa các test

Nguồn gốc phổ biến nhất khiến test mất độc lập là CHIA SẺ TRẠNG THÁI (shared state): nhiều test cùng đọc/ghi lên cùng một tài khoản, cùng một sản phẩm, hay cùng một biến toàn cục trong code test. Ví dụ ở ShopEasy: nếu 'test thêm sản phẩm vào giỏ' và 'test xoá sản phẩm khỏi giỏ' cùng thao tác trên MỘT tài khoản 'test@shopeasy.vn' cố định, thứ tự chạy sẽ quyết định giỏ hàng đang có gì — test nào chạy sau sẽ 'thừa hưởng' trạng thái không đoán trước được từ test chạy trước.

Nguyên tắc để tránh điều này: mỗi test nên có 'sân chơi' riêng — tài khoản riêng, sản phẩm riêng, đơn hàng riêng — thay vì dùng chung dữ liệu cố định. Ngoài dữ liệu, cũng cần tránh chia sẻ trạng thái trình duyệt: mỗi test nên chạy trong một browser context riêng (Playwright tự làm điều này mặc định cho mỗi test), không tái sử dụng cookie/session đăng nhập từ test trước để lại nếu không chủ đích. Không chia sẻ trạng thái là điều kiện cần để đạt được test độc lập ở chương trước.

📖 Shared state (trạng thái dùng chung): dữ liệu hoặc trạng thái (tài khoản, sản phẩm, biến toàn cục, session trình duyệt...) mà nhiều test cùng đọc/ghi lên, khiến kết quả của một test bị ảnh hưởng bởi test khác.
🔒

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 25% 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!