Bỏ qua, đến nội dung

Gửi HTTP request ​

Gọi HTTP API từ flow để chuẩn bị dữ liệu test hoặc kiểm tra trạng thái backend.

maestro-runner có sẵn HTTP client JavaScript, nên bạn có thể gọi API bên ngoài trực tiếp từ flow. Điều này hữu ích để chuẩn bị dữ liệu test, xác thực người dùng, hoặc kiểm tra trạng thái backend mà không cần đi qua UI.

Gửi request ​

Dùng các phương thức viết tắt cho request chuẩn:

  • http.get(url, options)
  • http.post(url, options)
  • http.put(url, options)
  • http.delete(url, options)

Với các phương thức khác (như PATCH), dùng hàm request tổng quát. Trong maestro-runner, HTTP method là đối số đầu tiên:

javascript
const response = http.request('PATCH', 'https://example.com', {
    body: JSON.stringify({ status: "active" })
});

Lưu ý: khác với Maestro

Maestro ghi http.request(url, { method: "PATCH" }). Dạng này không chạy trong maestro-runner, vốn mong đợi http.request(method, url, options).

Làm việc với JSON ​

Hàm global json() phân tích chuỗi JSON thành đối tượng JavaScript. Một response thành công có body là đối tượng JSON cũng cung cấp nó qua response.json.

Ví dụ, giả sử https://api.example.com/user/1 trả về:

json
{
  "id": 1,
  "email": "user@example.com",
  "profile": {
    "name": "Jane Doe",
    "age": 32
  }
}

Bạn có thể phân tích body của response và truy cập trực tiếp các trường:

js
// script.js
const response = http.get('https://api.example.com/user/1');

// Phân tích body và truy cập trực tiếp các trường
const userData = json(response.body);
output.username = userData.profile.name;

Trong ví dụ này, tên người dùng được đọc từ profile.name và gán cho output.username.

Option của request ​

Đối số thứ hai là một đối tượng options. Các key sau được hỗ trợ:

OptionKiểuMô tả
headersObjectHeader của request, như token xác thực.
bodyString hoặc ObjectPayload. Một object thuần được gửi dưới dạng JSON với Content-Type: application/json.
timeoutNumberTimeout tính bằng mili giây. Mặc định là 30000.
insecureBooleanBỏ qua xác minh chứng chỉ TLS, ví dụ với server staging dùng chứng chỉ tự ký.

Header ​

javascript
const response = http.get('https://example.com', {
    headers: {
        'Authorization': 'Bearer ' + output.token,
        'Content-Type': 'application/json'
    }
});

Body của request ​

Với request POST, PUT hoặc PATCH, cung cấp payload trong body. Hãy tự stringify các object JSON để body đúng như bạn mong đợi:

javascript
const response = http.post('https://example.com/login', {
    body: JSON.stringify({
        username: "test_user",
        password: "password123"
    })
});

Lưu ý: không hỗ trợ upload multipart

Option multipartForm của Maestro (upload file) không có trong maestro-runner. Nếu truyền vào, nó bị bỏ qua. Hãy upload qua UI của chính app, hoặc qua các endpoint test của backend với body JSON.

Đối tượng response ​

Mỗi lời gọi HTTP trả về một đối tượng response với các trường sau:

Tên trườngKiểuMô tả
okBooleantrue nếu request thành công (status 200-299).
statusNumberMã trạng thái HTTP (ví dụ 200, 404).
bodyStringBody thô của response dưới dạng chuỗi.
headersObjectHeader của HTTP response.
jsonObject hoặc nullBody đã phân tích khi nó là một đối tượng JSON, ngược lại là null.

Ví dụ sử dụng ​

Mẫu thường gặp là dùng API để tạo sẵn dữ liệu test trước khi thực hiện tương tác UI. Cách này đảm bảo dữ liệu bạn cần đã có mà không cần các step thiết lập UI chậm và flaky.

Trong ví dụ này, một script tạo lịch hẹn mới bằng request POST và lưu appointmentTitle vào đối tượng output cho flow chính.

javascript
// create_appointment.js
const response = http.post('https://my-api.com/v1/appointments', {
    body: JSON.stringify({
        title: "Maestro Health Check",
        date: "2026-02-10"
    }),
    headers: { 'Content-Type': 'application/json' }
});

const data = json(response.body);

// Lưu tiêu đề ở phạm vi global để flow có thể assert trên đó
output.appointmentTitle = data.title;

Sau khi script đã chạy, các giá trị đã lưu có thể dùng ở bất kỳ step nào sau đó trong flow:

yaml
# flow.yaml
appId: com.example.app
---
- launchApp
- runScript: create_appointment.js
- tapOn: "My Appointments"
# Kiểm tra dữ liệu vừa tạo qua API giờ đã hiển thị trên UI
- assertVisible: ${output.appointmentTitle}

Step tiếp theo ​

Tìm hiểu cách tạo dữ liệu test giả lập khi chạy, giúp test linh hoạt hơn và ít phụ thuộc vào giá trị hardcode.