Insomnia là một ứng dụng client API do Kong phát triển để gửi yêu cầu và kiểm tra phản hồi. Nó nổi tiếng với giao diện gọn gàng, không gây mất tập trung và hỗ trợ HTTP, REST, GraphQL, gRPC, SOAP, và WebSocket tại một nơi duy nhất. Các nhà phát triển tìm đến nó khi họ muốn một công cụ nhẹ hơn so với các IDE nặng nề, nhưng vẫn đủ khả năng thực hiện công việc kiểm thử thực tế.
Hướng dẫn này sẽ chỉ cho bạn cách kiểm thử API trong Insomnia từ đầu đến cuối. Bạn sẽ tạo một bộ sưu tập yêu cầu, gửi và kiểm tra phản hồi, thiết lập các môi trường để bạn có thể chuyển đổi URL cơ sở và token, đồng thời sử dụng tính năng bộ kiểm thử (test suites) để viết các xác nhận (assertions) chạy tự động. Các ví dụ sử dụng một API công khai để bạn có thể thực hành ngay lập tức.
Cài đặt Insomnia và tạo một yêu cầu
Tải Insomnia từ trang web chính thức của Kong và cài đặt cho nền tảng của bạn. Khi khởi chạy lần đầu, Insomnia sẽ hỏi bạn có muốn đăng nhập không. Bạn có thể chọn làm việc cục bộ mà không cần tài khoản nếu muốn, và Insomnia sẽ lưu trữ dữ liệu của bạn trên máy tính của bạn. Đồng bộ hóa đám mây là tùy chọn và là điểm thay đổi trong phiên bản 8, mà chúng ta sẽ đề cập bên dưới.
Insomnia tổ chức công việc thành các bộ sưu tập (collections) và tài liệu (documents). Nhấp vào Create (Tạo) trên bảng điều khiển và chọn Request Collection (Bộ sưu tập yêu cầu). Đặt tên rõ ràng cho nó, ví dụ như “User API tests” (Kiểm thử API người dùng). Bên trong bộ sưu tập, nhấp vào nút + và chọn HTTP Request (Yêu cầu HTTP).
Một yêu cầu cần có phương thức và URL. Chọn GET và nhập một điểm cuối (endpoint) thực tế. Dịch vụ JSONPlaceholder hoạt động tốt để thực hành:
GET https://jsonplaceholder.typicode.com/users/1
Nhấp vào Send (Gửi). Ngăn bên phải hiển thị nội dung phản hồi, mã trạng thái, thời gian phản hồi và kích thước. Insomnia tự động định dạng đẹp JSON và cho phép bạn lọc nội dung bằng truy vấn JSONPath hoặc XPath, điều này rất tiện lợi khi phản hồi lớn.
Cấu hình phương thức, tham số và xác thực
Đối với bất kỳ điều gì phức tạp hơn một lần đọc đơn giản, bạn sẽ thiết lập thêm cho yêu cầu. Insomnia nhóm các thiết lập này dưới các tab bên dưới thanh URL.
Tab Body (Nội dung) xử lý các payload yêu cầu. Đối với POST, chọn JSON và nhập dữ liệu:
{
"name": "Daniel Okafor",
"email": "daniel.okafor@example.com"
}
Insomnia sẽ đặt header Content-Type cho bạn khi bạn chọn một loại nội dung. Tab Query (Truy vấn) cho phép bạn thêm các tham số chuỗi truy vấn mà không cần chỉnh sửa URL thủ công, điều này giúp URL dài dễ đọc và cho phép bạn bật/tắt từng tham số. Tab Headers (Tiêu đề) dành cho bất kỳ thứ gì khác mà API mong đợi, chẳng hạn như X-Request-Id tùy chỉnh hoặc header Accept để đàm phán định dạng phản hồi.
Tab Auth (Xác thực) xử lý thông tin xác thực. Insomnia hỗ trợ một danh sách dài các lược đồ: Bearer Token, Basic Auth, API Key, OAuth 1.0 và 2.0, AWS IAM, và các loại khác. Chọn lược đồ mà API của bạn sử dụng và điền vào các trường. Đối với API được bảo vệ bằng token, chọn Bearer Token và dán token, hoặc tốt hơn là tham chiếu một biến môi trường để token không bị mã hóa cứng. Nếu bạn không chắc chắn về các mã trạng thái (status codes) cần mong đợi, tài liệu tham khảo về các mã trạng thái HTTP mà REST API nên sử dụng là một người bạn đồng hành tốt.
Thiết lập môi trường và biến
Môi trường giúp bạn tránh lặp lại các giá trị và dễ dàng chuyển đổi mục tiêu. Trong Insomnia, một môi trường là một đối tượng JSON gồm các biến được gắn vào một bộ sưu tập.
Nhấp vào trình đơn thả xuống môi trường gần đầu thanh bên và mở Manage Environments (Quản lý môi trường). Base Environment (Môi trường cơ sở) chứa các giá trị dùng chung. Thêm các môi trường con cho mỗi mục tiêu:
{
"base_url": "https://jsonplaceholder.typicode.com",
"auth_token": "your-token-here"
}
Tạo một môi trường con thứ hai cho sản phẩm với các giá trị khác. Tham chiếu một biến trong bất kỳ yêu cầu nào với cú pháp mẫu {{ _.base_url }}, vì vậy một URL sẽ trở thành:
GET {{ _.base_url }}/users/1
Chuyển đổi môi trường đang hoạt động từ trình đơn thả xuống và mọi yêu cầu sử dụng biến sẽ được cập nhật. Insomnia cũng hỗ trợ thẻ mẫu (template tags), các hàm nhỏ bạn có thể thả vào một trường để tạo dấu thời gian, UUID hoặc để lấy một giá trị từ phản hồi trước đó. Điều này cho phép bạn xâu chuỗi các yêu cầu, ví dụ như thu thập một token từ phản hồi đăng nhập và đưa nó vào các yêu cầu sau này.
Thẻ mẫu phản hồi đáng để xem xét kỹ hơn vì đó là cách Insomnia xử lý các phụ thuộc yêu cầu mà không cần lập trình. Bạn thêm một thẻ nói "sử dụng nội dung của yêu cầu đăng nhập, tại JSONPath $.token," và thả nó vào header Authorization của mỗi yêu cầu được bảo vệ. Khi bạn chạy một yêu cầu được bảo vệ, Insomnia sẽ chạy yêu cầu đăng nhập trước nếu cần, trích xuất token và thay thế nó. Chuỗi này vẫn mang tính khai báo, vì vậy không có mã kết nối nào cần duy trì. Để biết ý tưởng rộng hơn về việc nhóm các kiểm tra liên quan, hãy xem hướng dẫn về ví dụ về trường hợp kiểm thử API.
Viết bộ kiểm thử với xác nhận
Gửi một yêu cầu cho bạn thấy phản hồi. Để kiểm tra phản hồi có đúng hay không, một cách tự động, bạn sử dụng tính năng bộ kiểm thử (test suites) của Insomnia, đôi khi được hiển thị là tab Unit Tests (Kiểm thử đơn vị) trên một bộ sưu tập.
Mở bộ sưu tập của bạn và chuyển sang chế độ xem Tests (Kiểm thử). Tạo một test suite (bộ kiểm thử), sau đó thêm các kiểm thử riêng lẻ bên trong đó. Mỗi kiểm thử là một đoạn JavaScript nhỏ. Insomnia sử dụng thư viện xác nhận Chai và cung cấp cho bạn một trợ giúp để gửi yêu cầu và lấy phản hồi của nó. Một kiểm thử trông như thế này:
const response = await insomnia.send();
expect(response.status).to.equal(200);
Bạn có thể cụ thể hơn bằng cách phân tích cú pháp nội dung và kiểm tra các trường:
const response = await insomnia.send();
const body = JSON.parse(response.data);
expect(response.status).to.equal(200);
expect(body.email).to.equal("daniel.okafor@example.com");
expect(body).to.have.property("id");
Mỗi kiểm thử trong bộ kiểm thử nhắm mục tiêu một yêu cầu từ bộ sưu tập của bạn, được chọn từ một trình đơn thả xuống, vì vậy kiểm thử biết phải gửi gì. Nhấp vào Run Tests (Chạy kiểm thử) và Insomnia sẽ thực thi mọi kiểm thử trong bộ kiểm thử, hiển thị từng kiểm thử là passed (đạt) hoặc failed (thất bại) cùng với thời gian thực hiện. Đây là kiểm tra hồi quy của bạn: chạy bộ kiểm thử sau một thay đổi và bạn ngay lập tức thấy liệu API có còn hoạt động bình thường hay không.
Cách bạn tổ chức các bộ kiểm thử rất quan trọng khi số lượng tăng lên. Một mô hình phổ biến là một bộ kiểm thử cho mỗi tài nguyên, vì vậy tất cả các kiểm thử bài viết nằm cùng nhau và tất cả các kiểm thử người dùng nằm cùng nhau. Bên trong một bộ kiểm thử, hãy giữ mỗi kiểm thử tập trung vào một hành vi duy nhất: một kiểm thử cho trường hợp thành công (happy path), các kiểm thử riêng biệt cho trường hợp không tìm thấy (not-found) và trường hợp lỗi xác thực (validation-error). Khi một kiểm thử thất bại, tên của nó và phạm vi hẹp của nó sẽ cho bạn biết điều gì đã hỏng mà không cần phải đọc mã xác nhận. Để tìm hiểu sâu hơn về việc viết các kiểm tra tốt, hướng dẫn về các xác nhận API giải thích những gì cần xác nhận và những gì cần bỏ qua, và bài viết bộ kiểm thử cho tự động hóa kiểm thử API bao gồm việc cấu trúc các bộ kiểm thử khi chúng phát triển.
Chạy từ dòng lệnh với Inso
Giao diện người dùng đồ họa (GUI) phù hợp cho việc phát triển, nhưng tự động hóa cần một cái gì đó không có giao diện (headless). Insomnia đi kèm với một công cụ dòng lệnh gọi là Inso. Sau khi xuất hoặc đồng bộ hóa bộ sưu tập của bạn, bạn chạy bộ kiểm thử từ một terminal:
inso run test "User API tests"
Inso thoát với mã trạng thái khác 0 nếu bất kỳ kiểm thử nào thất bại, đó chính xác là những gì một pipeline CI cần để đánh dấu một bản dựng là bị lỗi. Bạn có thể tích hợp điều này vào GitHub Actions hoặc bất kỳ runner nào khác để các kiểm thử Insomnia của bạn được thực thi trên mỗi lần đẩy, bắt được một điểm cuối bị hỏng trước khi nó đến tay đồng đội hoặc sản xuất. Inso cũng có thể lint đặc tả API của bạn và tạo báo cáo kiểm thử ở các định dạng tiêu chuẩn, điều này làm cho nó hữu ích hơn ngoài việc chỉ chạy các bộ kiểm thử. Bài viết về tự động hóa kiểm thử API trong CI/CD trình bày mẫu chung, áp dụng rõ ràng cho Inso.
Thay đổi đám mây của phiên bản 8, và một giải pháp thay thế
Insomnia 8 đã chuyển sang mô hình ưu tiên đám mây. Mặc định, nó thúc đẩy người dùng tạo tài khoản Kong và lưu trữ dự án trên đám mây. Quyết định đó đã khiến một phần cộng đồng thất vọng, vì các phiên bản trước đó hoàn toàn cục bộ và thân thiện với việc làm việc ngoại tuyến. Các bản phát hành sau này đã khôi phục tùy chọn chỉ cục bộ hoặc "Scratch Pad" rõ ràng hơn, nhưng sự kiện này đã khiến một số nhóm tìm kiếm các giải pháp thay thế, đặc biệt trong các môi trường mà dữ liệu không thể rời khỏi tòa nhà.
Nếu điều đó mô tả bạn, Apidog đáng để xem xét. Đó là một nền tảng API tất cả trong một bao gồm thiết kế, gỡ lỗi, giả lập (mocking), kiểm thử và tài liệu, và nó nhập các xuất từ Insomnia để bạn không phải bắt đầu lại. Apidog cho phép bạn xây dựng các xác nhận một cách trực quan mà không cần viết JavaScript, đồng thời vẫn hỗ trợ các script khi bạn muốn. Vì đặc tả API, dữ liệu kiểm thử và máy chủ giả lập chia sẻ một dự án, các kiểm thử của bạn luôn phù hợp với hợp đồng thực tế thay vì bị lệch. Bạn có thể tải Apidog và nhập bộ sưu tập Insomnia để so sánh song song. Để có cái nhìn tổng quan rộng hơn, danh sách các công cụ kiểm thử API trực tuyến miễn phí bao gồm một số tùy chọn.
Insomnia vẫn là một client mạnh mẽ, tập trung, đặc biệt dành cho các nhà phát triển độc lập và các nhóm nhỏ coi trọng giao diện tối giản, không gây xao nhãng và khả năng khởi động nhanh. Lựa chọn đúng đắn phụ thuộc vào cách nhóm của bạn làm việc và mức độ bạn muốn xử lý vòng đời API ở một nơi thay vì phân tán qua các công cụ riêng biệt.
Các câu hỏi thường gặp
Insomnia có miễn phí để sử dụng không?
Insomnia có một gói miễn phí bao gồm việc sử dụng cá nhân, bao gồm gửi yêu cầu và chạy các bộ kiểm thử cục bộ. Các gói trả phí bổ sung tính năng cộng tác nhóm và giới hạn đồng bộ hóa đám mây lớn hơn. Bạn có thể sử dụng client cốt lõi mà không phải trả phí, và các phiên bản gần đây cho phép bạn làm việc hoàn toàn cục bộ nếu bạn không muốn sử dụng đồng bộ hóa đám mây.
Insomnia hỗ trợ những giao thức nào?
Insomnia xử lý HTTP, REST, GraphQL, gRPC, SOAP và WebSocket. Việc thiết lập yêu cầu khác nhau tùy theo giao thức, nhưng việc kiểm tra phản hồi và, đối với các yêu cầu dựa trên HTTP, các xác nhận của bộ kiểm thử hoạt động nhất quán trên tất cả chúng.
Làm cách nào để viết xác nhận trong Insomnia?
Sử dụng tính năng bộ kiểm thử. Mở chế độ xem Tests (Kiểm thử) trên một bộ sưu tập, tạo một bộ kiểm thử, và thêm các kiểm thử. Mỗi kiểm thử là một đoạn JavaScript gọi insomnia.send() để chạy một yêu cầu, sau đó sử dụng các xác nhận expect theo kiểu Chai trên trạng thái, headers hoặc nội dung đã phân tích cú pháp. Chạy toàn bộ bộ kiểm thử bằng nút Run Tests (Chạy kiểm thử).
Điều gì đã thay đổi trong Insomnia 8?
Insomnia 8 đã chuyển sang mặc định ưu tiên đám mây, nhắc nhở người dùng đăng nhập vào tài khoản Kong và đồng bộ hóa dự án lên đám mây. Một số người dùng không thích quy trình tài khoản bắt buộc và việc rời xa một ứng dụng hoàn toàn cục bộ. Các bản cập nhật sau này đã bổ sung các tùy chọn chỉ cục bộ rõ ràng hơn, nhưng sự thay đổi này đã thúc đẩy một số nhóm đánh giá các giải pháp thay thế.
Tôi có thể chạy các kiểm thử Insomnia trong một pipeline CI không?
Có. Sử dụng Inso, công cụ dòng lệnh đi kèm. Xuất hoặc đồng bộ hóa bộ sưu tập của bạn, sau đó chạy inso run test "<tên bộ kiểm thử>" trong pipeline của bạn. Inso trả về mã thoát khác 0 khi thất bại, vì vậy CI có thể tự động làm hỏng bản dựng khi một kiểm thử API bị lỗi.
