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:
| Hook | Khi nào chạy | Trường hợp dùng lý tưởng |
|---|---|---|
onFlowStart | Trướ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. |
onFlowComplete | Sau 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:
# 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>
---
- launchAppThự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
whentrong 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:
# 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:
# flow.yaml
appId: com.example.app
onFlowStart:
runFlow: subflows/login.yamlStep 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.
# 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ống | Kết quả / Hành vi |
|---|---|
onFlowStart fail | Toà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 fail | Flow bị đánh dấu Fail (🔴), kể cả khi phần thân chính của test đã pass. |
Nội dung liên quan
- Flow lồng nhau: tìm hiểu lệnh
runFlownền tảng mà hook sử dụng. - Thực thi tuần tự: tìm hiểu cách hook tương tác khi chạy test theo thứ tự cụ thể.
- Tham số và hằng số: xem cách quản lý biến trong hook.
