Tất cả bài viết

6 phút đọcRead in English

Chuyện gì xảy ra khi bạn bấm chạy

Chạy test end-to-end trong VibeQA: hàng đợi, sandbox mới với network riêng, test account mà Tokay không thấy password, và chỗ cần xem khi test fail.

Chiều hôm trước ngày release Storefront. Mọi suite trong dự án đều có phiên bản đã duyệt, và bạn muốn chạy test end-to-end trên staging để biết checkout, đăng nhập và tìm kiếm còn chạy đúng không. Bạn mở trang Lần chạy và bấm "Chạy mọi suite". Đây là những gì xảy ra sau đó.

Chọn chạy test end-to-end nào

"Chạy mọi suite" hỏi vài điều trước khi xếp hàng:

  • Tên. Không bắt buộc, ví dụ "Kiểm tra trước phát hành". Tên này hiện trong lịch sử chạy.
  • Nền tảng. Hiện tại là web. Android và iOS hiện là chưa hỗ trợ.
  • Suite nào. "Mọi suite đã duyệt", hoặc "Chỉ những gì lỗi lần trước": những suite có lần chạy gần nhất kết thúc bằng test fail hoặc suite bị lỗi.
  • Môi trường web. URL web mặc định của dự án, hoặc một môi trường có tên như staging mà bạn đã tạo trong cài đặt dự án.

Mỗi suite chạy phiên bản đã duyệt của nó, một lần chạy cho mỗi suite, gom thành một batch. Suite chưa có phiên bản được duyệt, hoặc chưa có URL app cho nền tảng của nó, sẽ bị bỏ qua, và batch ghi rõ suite nào bị bỏ qua và vì sao. CI (dùng API key) và lịch chạy cũng tạo cùng một loại batch, và CI có thể truyền một URL app bất kỳ thay cho môi trường. Bạn cũng có thể chạy riêng một suite từ trang của nó, qua cùng hàng đợi.

Hàng đợi

Mọi lần chạy chờ trong một hàng đợi. Khi có chỗ trống, VibeQA chọn lần chạy kế tiếp thoả ba giới hạn: tổng số lần chạy của cả hệ thống, giới hạn cho mỗi tổ chức, và chia đều. Trong số những lần chạy thoả điều kiện, tổ chức đang có ít lần chạy hơn được ưu tiên, sau đó tới lần chạy cũ nhất, nên một tổ chức đang bận không thể chiếm hết mọi chỗ. Các lần chạy trong một batch giữ đúng thứ tự của các suite.

Bảng lần chạy cho biết mỗi lần chạy đang ở đâu ("Kế tiếp", "Thứ 3 trong hàng", đang chạy), tổ chức của bạn chạy bao nhiêu suite cùng lúc, và ước lượng thời gian còn lại dựa trên thời gian mỗi suite chạy gần đây. "Huỷ các lần đang chờ" bỏ những gì chưa bắt đầu.

Một sandbox mới cho mỗi lần chạy

Khi một lần chạy được nhận, execution engine tạo một container mới và một network mới chỉ dành cho lần chạy đó. Mỗi lần chạy bắt đầu với trình duyệt mới, không còn cookie nào từ lần trước.

Container bị khoá chặt: chạy dưới gVisor, tức có một kernel riêng nằm giữa test và máy chủ, với user thường, filesystem chỉ đọc, không có Linux capability nào, và có giới hạn bộ nhớ, CPU và số tiến trình.

Network cũng hẹp. Một lần chạy chỉ tới được model gateway, nơi phục vụ các bước AI trong test, và internet công cộng. Các dải địa chỉ nội bộ và endpoint metadata của cloud bị chặn. Vì vậy URL app phải truy cập được từ internet, ví dụ một bản staging hoặc preview; VibeQA từ chối localhost và địa chỉ nội bộ ngay khi bạn nhập.

Sandbox không giữ secret nào của nền tảng. Thứ duy nhất nó có là một token cho riêng lần chạy này, mà model gateway chấp nhận; gateway đổi token đó sang key thật của nhà cung cấp model, và key thật không bao giờ vào sandbox.

Test account và secret

Phần lớn app cần đăng nhập. Trong cài đặt dự án, ở mục Test account, bạn thêm tài khoản với tên như member hay admin, username và password. Password được mã hoá khi lưu và chỉ tới được các sandbox chạy dự án này.

Tokay thấy tên tài khoản và username, không bao giờ thấy password. Khi một bước AI hoặc Tokay cần đăng nhập, nó gọi type_secret với tên tài khoản, và giá trị được gõ vào bên trong sandbox. Code dùng credentials.user('member'). Báo cáo che giá trị này đi.

Có test cần một giá trị không phải tài khoản, ví dụ API token để tạo dữ liệu test qua API của app trước một test checkout. Những giá trị đó nằm ở mục Secret. Chỉ những lần chạy có code gọi secret('name') mới nhận được chúng, báo cáo che chúng đi, và những lần chạy đó không ghi trace.

Nếu app đăng nhập bằng magic link, Google hay SSO, test account có thể giữ một phiên đăng nhập đã export. Phiên đó chỉ dùng được trên host nơi nó được export, và bạn phải tự thay khi nó hết hạn. Test account và secret thuộc về dự án, không thuộc về từng môi trường.

Theo dõi một lần chạy

Mỗi lần chạy có trang riêng, cập nhật trong lúc chạy. Trang liệt kê các test, mỗi test kèm các bước khi chúng pass hoặc fail. Bên cạnh là log, bạn có thể lọc chỉ các bước hoặc chỉ lỗi, và theo dõi khi dòng mới tới.

Log chỉ để theo dõi. Pass hay fail lấy từ báo cáo test và exit code của runner, không bao giờ từ các dòng log hay từ lời một model nói về chúng.

Khi một test fail

Bắt đầu từ bảng lần chạy. Với một lần chạy fail trong batch, bảng hiện test fail đầu tiên và bước bị lỗi, nên nhiều khi bạn biết suite nào cần xem mà không phải mở gì.

Các lần chạy trước: Kiểm tra bản 2.14 fail, đạt 2/4, Thanh toán lỗi ở bước trả bằng thẻ Visa đã lưu; ba nhóm kiểm tra lại
Bảng ghi rõ suite và bước bị lỗi của mỗi lần chạy fail; ô tím trong batch phát hành là lần chạy Giỏ hàng được chạy lại do lỗi phía chúng tôi.

Trên trang lần chạy, test fail đầu tiên đã được mở sẵn ở đúng bước bị lỗi. Dưới bước đó là thông báo lỗi, một ghi chú ngắn "Vì sao lỗi" khi runner có đưa ra, và ảnh chụp nếu có. Bấm vào một bước để xem các dòng của nó trong log. Khi lần chạy kết thúc, ảnh chụp, video, trace và báo cáo test xuất hiện ở "Tệp từ lần chạy này", được lưu trong bảy ngày.

Lần chạy Thanh toán v1, Fail sau 2m 48s: TC-4.1 thanh toán bằng thẻ lỗi ở bước 4, không tìm thấy nút Thanh toán sau 15 giây
Bước lỗi mở sẵn kèm thông báo lỗi và lời giải thích ngắn (thanh tổng tiền dính ở cuối trang che nút Thanh toán), và log tô đúng dòng đó.

Không phải lần chạy nào dừng lại cũng là do app của bạn. Sandbox hết bộ nhớ là lỗi phía chúng tôi; VibeQA tự chạy lại một lần và không bao giờ tính đó là test fail. Sáu kết quả một lần chạy có thể có được giải thích trong Một run đỏ phải có nghĩa là app của bạn hỏng.

Nếu đúng là app có lỗi, "Báo lỗi" tạo một ticket Jira từ lần chạy, hoặc liên kết với ticket đã có, và giữ phiên bản suite làm repro.

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

Hiện tại chỉ chạy được web. Tokay chỉ xem app của bạn được bằng tài khoản có password, không dùng được phiên đăng nhập đã export. Và thời gian ước lượng trên bảng đúng nghĩa chỉ là ước lượng.