Tất cả bài viết

6 phút đọcRead in English

Làm quen với VibeQA và Tokay

VibeQA là công cụ test tự động bằng AI cho web app: Tokay viết test design và code, con người duyệt cả hai. Toàn bộ vòng lặp, từ ticket Jira tới bản fix.

Trong bài trước, chúng tôi đã kể ra những lý do bộ test end-to-end dần xuống cấp: test flaky, selector dễ vỡ, file không ai đọc nổi, những lần chạy đỏ hoá ra do môi trường, và coverage không ai nói rõ được. VibeQA, một công cụ test tự động bằng AI cho web app, là câu trả lời của chúng tôi cho những vấn đề đó. Bài này nói VibeQA là gì, dành cho ai, và các phần ghép với nhau ra sao.

VibeQA là gì

VibeQA là công cụ test cho web app. Một AI agent tên Tokay đọc ticket và tài liệu đặc tả của bạn, viết một test design để team review, sinh code automation từ design đó, rồi chạy nó trong một sandbox mới. Con người ra quyết định: case nào đúng, phiên bản nào được đưa vào dùng, và một lần chạy fail có ý nghĩa gì với ticket.

VibeQA dành cho những team release web app khoảng mỗi tuần một lần và cần bộ test regression đáng tin: QA lead chịu trách nhiệm kế hoạch test, developer muốn biết bản fix của mình có hiệu quả không, và engineering manager muốn biết "xanh" thực ra bao phủ những gì.

Trang Tổng quan: Chưa thể release, Thanh toán fail 3 lần chạy gần nhất, kèm tỉ lệ pass, defect đang mở và bảng release
Trang Tổng quan trả lời câu hỏi release trước tiên: suite nào đang fail và ở test nào, còn màu đỏ nào là phía chúng tôi (lỗi hạ tầng màu tím của Giỏ hàng, đã chạy lại).

Vì sao lại là tắc kè

Tokay được đặt theo tên loài tắc kè tokay, mà tên loài này lại lấy từ tiếng kêu của nó: "to-kay". Một câu đùa nhỏ nhưng có ý. Tokay làm phần viết, nhưng không tự duyệt được việc của mình. Mọi phiên bản suite đều do một người duyệt, và chỉ duyệt được khi mọi case đã được review, coverage đã đủ và lần chạy thử đã xong.

Vòng lặp test tự động bằng AI, từ đầu tới cuối

1. Bắt đầu từ thứ bạn đã có

Đưa cho Tokay một ticket Jira, một trang Confluence hay Notion, một tài liệu bạn upload (PDF hoặc Word), hoặc chỉ cần mô tả luồng trong một câu. Giả sử SHOP-388 mô tả bước giao hàng của Storefront: khách nhập số điện thoại và địa chỉ, cả hai được kiểm tra trước khi thanh toán. Mọi thứ Tokay đọc từ ticket, từ một trang tài liệu hay từ app của bạn đều được gắn nhãn là văn bản không tin cậy, nên một chỉ dẫn giấu trong ticket chỉ được coi là nội dung, không phải mệnh lệnh.

2. Review test design, không phải file test

Trước khi có code, Tokay viết test design: các yêu cầu, mỗi input được chia thành lớp hợp lệ và không hợp lệ có đánh dấu giá trị biên, và các kịch bản Gherkin mà mỗi dòng Examples là một case cụ thể. Với ô số điện thoại, đó là các dòng cho số di động 10 chữ số, định dạng +84, 9 chữ số, 11 chữ số và số có chữ cái.

Coverage được tính bằng một quy tắc cố định, Tokay hay người review đều không tự khai: mỗi lớp xuất hiện ít nhất một lần, mọi giá trị biên đều được test, và không dòng nào chứa hai lớp không hợp lệ cùng lúc. Team bạn review từng case một: bấm "Đúng rồi", sửa tay, hoặc comment @Tokay rồi chấp nhận hay từ chối thay đổi nó đề xuất. Các quy tắc này được giải thích kỹ trong Thiết kế test trước, viết code sau.

Màn review suite Thanh toán, 6 trên 16 case đã ổn: case TC-1.2 dạng Given/When/Then với +84 912 345 678 và địa chỉ ở Đà Nẵng
Review từng case một: giá trị sửa được ngay tại chỗ, mỗi case ghi rõ các lớp nó bao phủ, và comment kèm @Tokay để nhờ sửa.

3. Sinh code, rồi chạy thử một lần

Khi mọi case đã được review và coverage đã đủ, Tokay biến mỗi case tự động thành một test dựa trên Playwright, đặt tên theo case, ví dụ TC-1.2. Phiên bản mới được chạy thử một lần trong sandbox, và kết quả từng test được map ngược về đúng dòng của nó trong design. Sau đó một người duyệt phiên bản. Một case fail vẫn có thể được duyệt, vì test tái hiện một lỗi đã biết thì đương nhiên phải fail.

4. Chạy trong một sandbox mới

Mỗi lần chạy có sandbox riêng, với trình duyệt và mạng riêng. Bên trong không có secret nào của nền tảng; credential duy nhất là một token chỉ dùng được cho lần chạy đó. Test account bạn thêm vào một dự án chỉ tới được các lần chạy của dự án đó. Bạn có thể chạy bằng tay ("Chạy tất cả suite"), theo lịch, hoặc từ CI bằng API key.

Khi một lần chạy không xong được vì sự cố phía chúng tôi, như sandbox hay nhà cung cấp model, nó được ghi là lỗi hạ tầng hoặc lỗi model, được hàng đợi chạy lại, và không bao giờ hiện thành lỗi của app bạn.

PassFailLỗi suiteLỗi hạ tầng
Kết quả như trên dashboard. Lỗi phía chúng tôi có trạng thái riêng.

5. Theo dõi defect và kiểm lại bản fix

Khi một test fail vì app hỏng thật, nút "Báo lỗi" trên trang lần chạy sẽ tạo một bug trên Jira hoặc gắn với một ticket có sẵn, lấy phiên bản suite làm bản tái hiện lỗi. Bạn cũng có thể đi từ đầu kia: chọn "Theo dõi ticket Jira" ở trang Defect, rồi gắn một test tái hiện đã được duyệt, hoặc nhờ Tokay viết nháp một test để người duyệt.

Khi ticket chuyển sang trạng thái bạn chọn, VibeQA chạy test tái hiện ba lần trong các sandbox mới và comment một kết luận lên Jira: đã fix, vẫn còn lỗi, flaky hoặc bị chặn. Vì sao là ba lần thì có một bài riêng.

Defect SHOP-418, Tìm kiếm không ra sản phẩm khi gõ không dấu: ba run re-verify đều Pass, kết luận Đã sửa, 3/3 run pass
Re-verify SHOP-418 sau khi ticket chuyển sang Ready for QA: ba lần chạy mới của test tái hiện, một kết luận.

Dùng bản hosted hay tự host

VibeQA có bản hosted với gói miễn phí cho một dự án, và chi phí AI đã nằm trong mọi gói hosted. Nếu app của bạn không được rời khỏi mạng nội bộ, bạn có thể tự host bằng Docker Compose trên một server, với Anthropic key của chính bạn.

Những gì chưa làm được

  • Chỉ web app. Android và iOS là bước tiếp theo, nhưng hiện chưa chạy được.
  • Không có hộp thư. Luồng đăng nhập bằng magic link hay đăng nhập mạng xã hội vẫn phải test tay, hoặc bạn đưa cho test một phiên đăng nhập đã export sẵn.
  • Đính kèm trên Jira. Defect tạo từ một lần chạy chỉ mô tả lỗi; ảnh chụp màn hình và trace vẫn nằm trong VibeQA chứ không được đính kèm vào ticket.

Đọc tiếp