Kiểm thử và giám sát API bằng Hurl: Giải pháp ‘siêu nhẹ’ thay thế Postman

Development tutorial - IT technology blog
Development tutorial - IT technology blog

Chạy test đầu tiên trong 2 phút

Cảm giác chờ Postman khởi động mất 30 giây chỉ để kiểm tra một endpoint đơn giản thật sự rất khó chịu. Mình đã chuyển sang Hurl. Đây là công cụ dòng lệnh (CLI) giúp bạn viết kịch bản test API bằng file text thuần túy, nhanh và nhẹ hơn nhiều.

Để bắt đầu, bạn hãy cài đặt Hurl. Trên macOS, việc này chỉ tốn một dòng lệnh:

# macOS
brew install hurl

# Linux (Ubuntu/Debian)
curl -LO https://github.com/Orange-OpenSource/hurl/releases/download/4.3.0/hurl_4.3.0_amd64.deb
sudo dpkg -i hurl_4.3.0_amd64.deb

Bây giờ, hãy tạo file test.hurl để kiểm tra một API mẫu:

GET https://jsonplaceholder.typicode.com/posts/1

HTTP 200
[Asserts]
jsonpath "$.id" == 1
jsonpath "$.title" contains "sunt aut facere"

Chạy lệnh sau để thực hiện bài test:

hurl --test test.hurl

Kết quả hiện lên ngay lập tức. Không cần giao diện rườm rà, bạn đã có một bộ test case chuyên nghiệp.

Tại sao nên chọn Hurl thay vì Postman?

Mình từng quản lý hệ thống với hơn 100 endpoints. Khi đó, việc dùng Postman bộc lộ 3 nhược điểm chí mạng khiến team mình mệt mỏi:

  • Nỗi ám ảnh mang tên Git Conflict: File JSON của Postman cực kỳ khó đọc khi review code. Chỉ cần hai người cùng sửa một collection, việc merge code sẽ trở thành thảm họa. Hurl dùng text thuần, nên diff cực kỳ sạch sẽ.
  • Hiệu năng chênh lệch rõ rệt: Postman thường chiếm khoảng 500MB đến 1GB RAM. Hurl được viết bằng Rust, chỉ tiêu tốn chưa đến 10MB RAM khi chạy.
  • Tích hợp CI/CD siêu gọn: Bạn không cần cài thêm Node.js hay Newman. Hurl là một file binary duy nhất nặng khoảng 5MB, cực kỳ phù hợp cho các Docker image tối giản.

Cú pháp Hurl: Trực quan và mạnh mẽ

Hurl không chỉ gửi request đơn thuần. Nó cho phép bạn kiểm tra dữ liệu trả về (assertions) một cách chi tiết.

1. Gửi dữ liệu (POST request)

Việc tạo mới dữ liệu được thực hiện rất tự nhiên:

POST https://api.itfromzero.com/v1/users
{
  "name": "Nguyen Van A",
  "email": "[email protected]"
}

HTTP 201
[Asserts]
jsonpath "$.message" == "User created"

2. Kiểm soát tốc độ và Header

Bạn có thể áp đặt tiêu chuẩn về hiệu năng ngay trong file test. Ví dụ, API phải phản hồi dưới 500ms:

GET https://api.itfromzero.com/v1/health

HTTP 200
[Asserts]
duration < 500
header "Content-Type" == "application/json; charset=utf-8"

Xử lý kịch bản phức tạp: Chaining Request

Trong thực tế, bạn thường phải đăng nhập để lấy Token, sau đó mới gọi API chính. Hurl xử lý luồng này rất mượt mà thông qua biến số.

# Bước 1: Đăng nhập và lưu Token
POST https://api.example.com/login
{
  "username": "admin",
  "password": "secret"
}

HTTP 200
[Captures]
token: jsonpath "$.access_token"

# Bước 2: Sử dụng token cho request tiếp theo
GET https://api.example.com/profile
Authorization: Bearer {{token}}

HTTP 200
[Asserts]
jsonpath "$.username" == "admin"

Để chạy trên nhiều môi trường (Dev/Staging), bạn chỉ cần dùng file env.properties và flag --variables-file. Cách tiếp cận này giúp tách biệt dữ liệu và kịch bản test.

Tự động hóa với GitHub Actions

Thay vì tốn tiền cho các dịch vụ monitoring bên thứ ba, bạn có thể biến GitHub Actions thành hệ thống giám sát API miễn phí. Mỗi khi push code, Hurl sẽ tự động kiểm tra toàn bộ hệ thống.

name: API Monitoring
on: [push, schedule: {cron: "*/5 * * * *"}]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install Hurl
        run: |
          curl -LO https://github.com/Orange-OpenSource/hurl/releases/download/4.3.0/hurl_4.3.0_amd64.deb
          sudo dpkg -i hurl_4.3.0_amd64.deb
      - name: Run Tests
        run: hurl --test tests/*.hurl

Lời khuyên từ thực tế

Sau khi áp dụng Hurl cho nhiều dự án, mình rút ra 3 lưu ý nhỏ:

  1. Cấu trúc file: Đừng bỏ tất cả vào một file duy nhất. Hãy chia nhỏ theo tính năng như auth.hurl, payment.hurl để dễ quản lý.
  2. Tận dụng HTML Report: Dùng flag --report-html report/ trên CI. Khi test fail, bạn sẽ có một trang web trực quan để xem chính xác lỗi ở đâu.
  3. Đừng lạm dụng: Hurl tuyệt vời cho automation, nhưng nếu bạn cần vọc vạch (explore) API mới lần đầu, các công cụ GUI như Postman hoặc Insomnia vẫn có giá trị riêng.

Hurl là một công cụ nhỏ nhưng có võ. Nó giúp quy trình phát triển chuyên nghiệp hơn bằng cách đưa kịch bản test vào luồng quản lý mã nguồn chuẩn chỉnh.

Share: