Bỏ qua, đến nội dung

Hook ​

Dùng hook onFlowStart và onFlowComplete để tự động thiết lập và dọn dẹp.

Trong test tự động, bạn thường cần thực hiện các tác vụ thiết lập hoặc dọn dẹp riêng cho mỗi test. Thay vì thêm runFlow thủ công vào đầu hay cuối từng file, Astra Scout cung cấp Hook.

Hook cung cấp một phần cấu hình để đặt logic thiết lập và dọn dẹp, tách biệt khỏi các step của test. Điều này đảm bảo môi trường nhất quán, giảm code lặp và đơn giản hóa việc bảo trì.

Các loại hook ​

Astra Scout hỗ trợ hai hook chính được khai báo trong phần cấu hình (phía trên dấu --- trong file flow). Các hook này áp dụng mỗi khi bạn chạy flow:

HookKhi nào chạyTrường hợp dùng lý tưởng
onFlowStartTrước khi mỗi flow bắt đầu.Reset trạng thái app, đăng nhập, hoặc xử lý các quyền động.
onFlowCompleteSau khi mỗi flow kết thúc (pass hoặc fail).Xoá cookie, đăng xuất, báo cáo metric tùy chỉnh, hoặc xoá dữ liệu test.

Đây là cách bạn có thể dùng các hook này trong flow.yaml:

yaml
# flow.yaml
appId: my.app
onFlowStart:
  - runFlow: setup.yaml
  - runScript: setup.js
  - <any other command>
onFlowComplete:
  - runFlow: teardown.yaml
  - runScript: teardown.js
  - <any other command>
---
- launchApp

Thực hành tốt

  • Vì hook chạy cho từng flow, một hook chậm sẽ làm tăng đáng kể tổng thời gian chạy bộ test.
  • Cẩn thận đừng gọi một flow mà chính nó lại kích hoạt cùng hook đó, gây ra vòng lặp vô hạn.
  • Dùng khối when trong subflow của hook để chỉ thực hiện hành động trên một số nền tảng (ví dụ xoá Keychain của iOS).
  • Dùng hook onFlowComplete để đảm bảo app ở trạng thái "trung tính" cho test tiếp theo, như quay về màn hình chính, đăng xuất, hoặc xoá dữ liệu test khỏi môi trường của bạn.

Ví dụ sử dụng ​

Hãy đi qua cách thiết lập logic thiết lập và dọn dẹp để mọi test trong workspace đều bắt đầu với người dùng đã xác thực.

Step 1: tạo subflow đăng nhập ​

Tạo một file tái sử dụng tại subflows/login.yaml:

yaml
# subflows/login.yaml
- tapOn: "Username"
- inputText: "maestro_user"
- tapOn: "Login"

Step 2: đăng ký hook ​

Mở file flow.yaml và thêm các hook vào phần cấu hình:

yaml
# flow.yaml
appId: com.example.app

onFlowStart:
  runFlow: subflows/login.yaml

Step 3: chạy flow ​

Từ giờ, mỗi khi bạn chạy một flow từ Astra Scout (xem Chạy flow), chuỗi login.yaml chạy trước logic trong file test của bạn.

Hook động ​

Bạn có thể truyền biến môi trường vào hook giống như runFlow thông thường. Cách này hữu ích để chuyển vai trò (ví dụ User so với Admin) trong toàn bộ bộ test.

yaml
# flow.yaml
appId: com.example.app

onFlowStart:
  runFlow:
    file: subflows/login.yaml
    env:
      ROLE: "admin"

Xử lý khi hook fail ​

Cần hiểu Astra Scout hành xử thế nào khi hook gặp error. Logic của nó nhất quán với các framework test chuẩn trong ngành như JUnit (@Before/@After) và XCTest (setUp/tearDown).

Nếu một hook fail, Astra Scout ưu tiên tính toàn vẹn của test và việc dọn dẹp môi trường.

Tình huốngKết quả / Hành vi
onFlowStart failToàn bộ flow lập tức bị đánh dấu fail. Phần thân chính của flow bị bỏ qua. Hook onFlowComplete vẫn được thực thi để đảm bảo việc dọn dẹp diễn ra.
onFlowComplete failFlow bị đánh dấu Fail (🔴), kể cả khi phần thân chính của test đã pass.