Tools

Bruno: test API offline, lưu collection trong Git thay cho Postman

Tóm tắt

Bruno lưu collection API thành file văn bản trong repo, cộng tác qua Git, chạy offline không đồng bộ cloud. Viết test bằng JavaScript, chạy trong CI bằng bru run --env, và giữ secret ngoài file request.

Postman là công cụ test API quen thuộc, nhưng nhiều team gặp cùng vấn đề: collection nằm trên cloud của nhà cung cấp, đồng bộ cần tài khoản, giới hạn số người cộng tác, và collection không nằm cạnh code nên thường lệch với API thật. Bruno là IDE mã nguồn mở để khám phá và test API, chọn hướng ngược lại: collection lưu thành file văn bản thuần trong một thư mục trên máy bạn, nên commit vào Git cùng với code. Bruno cam kết chạy offline, và theo README không có kế hoạch thêm đồng bộ cloud.

Trang GitHub của usebruno/bruno
Trang GitHub của usebruno/bruno (ảnh chụp tháng 11/2026)

GitHub: https://github.com/usebruno/bruno · khoảng 48 nghìn sao · JavaScript · MIT

Cài đặt

brew install bruno            # macOS
winget install Bruno.Bruno    # Windows
# Linux: tải bản .deb/.AppImage/Snap trên trang usebruno.com

npm install -g @usebruno/cli  # CLI để chạy trong terminal và CI

Bắt đầu với một collection

  1. Mở Bruno, chọn Create Collection, chọn thư mục, nên đặt trong repo, ví dụ api-tests/.
  2. Thêm request: chọn method, URL, header, body. Mỗi request được lưu thành một file .bru.
  3. Tạo Environment (Local, Staging…) chứa biến như baseUrl, token; dùng trong request bằng {{baseUrl}}.
  4. Commit thư mục collection; đồng đội pull về là có cùng bộ request.

Nhờ là file văn bản, khi API thay đổi, bạn sửa request trong cùng PR với code, và reviewer thấy diff rõ ràng.

Script và test

Mỗi request có tab Script (chạy trước và sau request) và tab Tests, viết bằng JavaScript:

// Tab Tests
test("trả về 200", function () {
  expect(res.getStatus()).to.equal(200);
});

test("có danh sách user", function () {
  expect(res.getBody().data).to.be.an("array");
});

// Tab Script (post-response): lưu token để request sau dùng
bru.setVar("token", res.getBody().accessToken);

Chạy bằng CLI và trong CI

LệnhTác dụng
bru runChạy mọi request trong collection (chạy trong thư mục collection)
bru run users/get-user.bruChạy một request
bru run usersChạy cả một thư mục
bru run --env StagingChọn environment
bru run --output results.jsonXuất kết quả để lưu làm artifact CI
bru import openapi --source api.yml ...Tạo collection từ file OpenAPI

Bruno cũng nhập được collection từ Postman và Insomnia, giúp chuyển đổi nhanh.

Lưu ý

  • Đừng commit secret: để token, mật khẩu trong biến môi trường đánh dấu secret hoặc file .env (thêm vào .gitignore), không ghi thẳng vào file request.
  • Bản mã nguồn mở đủ cho phần lớn nhu cầu; một số tính năng nâng cao thuộc phiên bản trả phí. Kiểm tra trang giá nếu team cần.
  • Không có đồng bộ cloud nghĩa là cộng tác hoàn toàn qua Git; team chưa quen Git cần hướng dẫn.

Áp dụng thế nào?

  • Dev: Đặt collection Bruno trong repo backend, cập nhật request cùng PR thay đổi API.
  • Tech Lead/QA: Chạy bru run --env Staging sau mỗi lần deploy staging như một bộ smoke test API, fail pipeline khi test hỏng.
  • PM: Dữ liệu API (kể cả ví dụ request có thông tin khách hàng) không rời khỏi máy và repo công ty, dễ đáp ứng yêu cầu bảo mật hơn so với lưu trên cloud bên thứ ba.

Nguồn & tham khảo

  1. usebruno/bruno — usebruno (GitHub)
  2. Bruno documentation — usebruno