Tóm tắt
Newman, trình chạy CLI chính thức của Postman, yêu cầu npm và Node.js trong quy trình CI của bạn. Điều này gây ra rủi ro chuỗi cung ứng, tăng thêm gánh nặng quản lý phụ thuộc và trên gói miễn phí của Postman, các lần chạy collection qua API hiện đã bị giới hạn tốc độ. Hướng dẫn này trình bày ba lựa chọn thay thế để chạy các bài kiểm tra API trong CI mà không cần Newman: trình chạy CLI của Apidog, k6 và Hurl. Apidog là con đường trực tiếp nhất nếu bạn có các collection Postman hiện có vì nó nhập chúng nguyên bản và không có giới hạn số lần chạy.
Giới thiệu
Newman từng là một ý tưởng hay. Một công cụ CLI chạy các collection Postman trong các quy trình CI đã giúp kiểm thử API trở nên di động và tự động hóa được. Nó được tin cậy bởi thương hiệu Postman, tích hợp với GitHub Actions thông qua một action cộng đồng phổ biến và hoạt động đủ tốt để nhiều đội xây dựng toàn bộ chiến lược tự động hóa kiểm thử API của họ dựa trên nó.
Sau đó, ba vấn đề đã phát sinh.
Thứ nhất, Newman là một gói npm. Mọi quy trình sử dụng nó đều lấy từ kho lưu trữ npm tại thời điểm xây dựng. Sự cố thỏa hiệp ua-parser-js năm 2021 và sự cố node-ipc năm 2022 đã chứng minh rằng các cuộc tấn công chuỗi cung ứng npm không chỉ là lý thuyết. Các đội bảo mật bắt đầu đặt câu hỏi tại sao lớp kiểm thử API lại cần npm.
Thứ hai, Postman bắt đầu giới hạn số lần chạy collection trên các gói miễn phí và gói trả phí cơ bản. Các đội phụ thuộc vào việc chạy collection qua API Postman như một phần của CI đã chạm giới hạn hạn mức và phải nâng cấp gói hoặc thiết kế lại quy trình của họ.
Thứ ba, tốc độ bảo trì của Newman đã chậm lại. Các vấn đề tồn đọng trên GitHub trong nhiều tháng. Một số API scripting Postman mới hơn có hỗ trợ không nhất quán trong Newman.
Kết quả: các nhà phát triển đã xây dựng quy trình CI dựa trên Newman hiện đang tìm kiếm các lựa chọn thay thế. Đây là những gì có sẵn.
Lựa chọn 1: Apidog CLI (khuyên dùng cho người dùng Postman collection)
Trình chạy CLI của Apidog là sự thay thế chức năng gần nhất cho Newman nếu bạn đã đầu tư vào các collection Postman.
Những gì nó hỗ trợ
- Định dạng Postman Collection v2 và v2.1
- Môi trường Postman (xuất JSON)
pm.test,pm.expect,pm.environment.set,pm.collectionVariables.set- Các script tiền yêu cầu (pre-request) và hậu yêu cầu (post-request)
- Kiểm thử dựa trên dữ liệu qua các tệp dữ liệu CSV và JSON
- Đầu ra JUnit XML và JSON cho báo cáo CI
Không yêu cầu npm. Apidog CLI được phân phối dưới dạng một tệp nhị phân độc lập. Bạn tải xuống một lần, thêm nó vào PATH của mình và nó sẽ chạy.
Không giới hạn số lần chạy. Apidog không giới hạn số lần chạy collection trên bất kỳ gói nào. Một quy trình chạy 500 collection mỗi ngày hoạt động giống như một quy trình chạy 5 collection.
Cài đặt
Tải xuống tệp nhị phân CLI cho nền tảng của bạn từ apidog.com/cli hoặc sử dụng trình cài đặt shell:
# macOS / Linux
curl -sSf https://apidog.com/cli/install.sh | sh
# Xác minh
apidog --version
Đối với các trình chạy CI dựa trên Docker, Apidog cung cấp một image chính thức:
FROM apidog/cli:latest
Chạy một Postman collection
Xuất collection của bạn từ Postman (Tệp > Xuất > Collection v2.1) và môi trường của bạn (Quản lý Môi trường > Xuất).
Sau đó chạy:
apidog run collection.json \
--environment environment.json \
--reporter-junit results.xml
Ví dụ GitHub Actions
name: Kiểm thử API
on: [push, pull_request]
jobs:
api-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Cài đặt Apidog CLI
run: curl -sSf httpsapidog.com/cli/install.sh | sh
- name: Chạy kiểm thử API
run: |
apidog run ./tests/collection.json \
--environment ./tests/env.json \
--reporter-junit test-results.xml
- name: Tải lên kết quả kiểm thử
uses: actions/upload-artifact@v4
if: always()
with:
name: api-test-results
path: test-results.xml
Không có npm install, không có package.json, không có ma trận phiên bản Node.js. Công việc chạy nhanh hơn và bề mặt phụ thuộc nhỏ hơn.
Ví dụ GitLab CI
api-tests:
image: apidog/cli:latest
script:
- apidog run ./tests/collection.json
--environment ./tests/env.json
--reporter-junit test-results.xml
artifacts:
reports:
junit: test-results.xml
Lựa chọn 2: k6
k6 là một công cụ kiểm thử tải từ Grafana Labs cũng xử lý kiểm thử API chức năng. Đáng để biết vì nó thực sự tuyệt vời cho kiểm thử hiệu suất cùng với các kiểm tra chức năng.
Những gì nó hỗ trợ
- HTTP/1.1, HTTP/2, WebSocket, gRPC
- Các script kiểm thử JavaScript (ES6+)
- Ngưỡng cho các xác nhận hiệu suất
- Đầu ra đến InfluxDB, Prometheus, Datadog
Những gì nó không hỗ trợ
- Định dạng collection Postman gốc. Bạn có thể chuyển đổi các collection Postman sang script k6 bằng cách sử dụng bộ chuyển đổi
postman-to-k6, nhưng đầu ra thường cần dọn dẹp thủ công, đặc biệt đối với các script phức tạp. - API
pm.*của Postman một cách nguyên bản. Lớp chuyển đổi mô phỏng nó nhưng có những khoảng trống.
Khi nào nên chọn k6
Nếu bạn cần kết hợp kiểm thử chức năng với kiểm thử hiệu suất trong cùng một quy trình – ví dụ, xác minh tính đúng đắn của API dưới tải – k6 đáng để bạn bỏ chi phí di chuyển. Nếu bạn chỉ muốn thay thế Newman cho các bài kiểm thử chức năng, Apidog sẽ nhanh hơn để thiết lập.
Sử dụng k6 cơ bản trong CI
# Cài đặt (Linux)
sudo apt-get install k6
# Chạy một script kiểm thử
k6 run api-tests.js
CI của k6 xuất kết quả pass/fail dựa trên các định nghĩa ngưỡng trong script của bạn. Đầu ra JUnit XML có sẵn thông qua gói k6-reporter.
Lựa chọn 3: Hurl
Hurl là một công cụ kiểm thử HTTP mã nguồn mở được viết bằng Rust. Nó nhanh, không có phụ thuộc runtime và sử dụng DSL văn bản thuần túy để định nghĩa các yêu cầu và xác nhận.
Những gì nó hỗ trợ
- HTTP/1.1 và HTTP/2
- Các xác nhận JSON, XPath và regex
- Biến và chuỗi yêu cầu
- Đầu ra HTML, JUnit và JSON
Những gì nó không hỗ trợ
- Định dạng collection Postman. Hurl sử dụng định dạng tệp
.hurlriêng. Không có bộ chuyển đổi tự động. - Các script kiểm thử JavaScript. Các xác nhận là khai báo, không phải lập trình.
Khi nào nên chọn Hurl
Nếu bạn sẵn lòng viết lại các bài kiểm thử của mình bằng DSL của Hurl, bạn sẽ có một tệp nhị phân cực kỳ nhỏ mà không cần runtime. Tệp nhị phân chỉ là một tệp 10 MB. Hurl là một lựa chọn mạnh mẽ cho các dự án mới nơi bạn không bị ràng buộc bởi các collection Postman cũ.
Ví dụ kiểm thử Hurl cơ bản
GET https://api.example.com/users/1
HTTP 200
[Asserts]
jsonpath "$.id" == 1
jsonpath "$.email" isString
Hurl trong GitHub Actions
- name: Cài đặt Hurl
run: |
curl -LO https://github.com/Orange-OpenSource/hurl/releases/latest/download/hurl-x86_64-unknown-linux-gnu.tar.gz
tar -xf hurl-*.tar.gz
sudo mv hurl /usr/local/bin/
- name: Chạy kiểm thử API
run: hurl --test tests/*.hurl
So sánh ba lựa chọn
| Tính năng | Apidog CLI | k6 | Hurl |
|---|---|---|---|
| Nhập Postman | Gốc | Bộ chuyển đổi (mất mát dữ liệu) | Không |
| Phụ thuộc npm | Không | Không | Không |
| Scripting JavaScript | Có (API pm.*) | Có (ES6) | Không (chỉ DSL) |
| Kiểm thử hiệu suất | Không | Có | Không |
| Kích thước tệp nhị phân | ~50 MB | ~30 MB | ~10 MB |
| Giới hạn chạy miễn phí | Không có | Không có | Không có |
| Đầu ra JUnit | Có | Qua plugin | Có |
Di chuyển từ Newman: các bước thực tế
Nếu bạn có một quy trình hiện có dựa trên Newman, đây là lộ trình di chuyển sang Apidog CLI:
Xuất các collection của bạn. Trong Postman, nhấp chuột phải vào từng collection và xuất dưới dạng v2.1. Xuất môi trường của bạn riêng biệt.
Cài đặt Apidog CLI. Thêm bước cài đặt vào cấu hình CI của bạn.
Thay thế lệnh Newman. Một lệnh Newman thông thường trông như sau:
newman run collection.json -e environment.json --reporters junit --reporter-junit-export results.xml
Tương đương với Apidog:
apidog run collection.json --environment environment.json --reporter-junit results.xml
Cấu trúc cờ (flag) tương tự nhau theo thiết kế.
Kiểm tra khả năng tương thích của script. Chạy collection của bạn cục bộ với Apidog CLI trước khi commit thay đổi CI. Hầu hết các script pm.* chạy mà không cần sửa đổi. Các script sử dụng pm.require để tải các module bên ngoài cần điều chỉnh.
Xóa Node.js khỏi cấu hình CI của bạn. Nếu Newman là lý do duy nhất khiến Node.js xuất hiện trong quy trình của bạn, bạn có thể loại bỏ hoàn toàn bước thiết lập Node.js và bước npm install.
Câu hỏi thường gặp
Newman có bị ngừng sử dụng chính thức không?Không, tính đến đầu năm 2026, Newman vẫn được Postman duy trì. Tuy nhiên, tốc độ bảo trì chậm và một số vấn đề mở ảnh hưởng đến các trường hợp sử dụng thực tế. Nó sẽ không biến mất sớm, nhưng việc xây dựng các quy trình mới dựa trên nó mang lại rủi ro ngày càng tăng.
Apidog CLI có yêu cầu tài khoản Apidog không?Để chạy các collection được xuất cục bộ, không. Để đồng bộ hóa các collection từ một không gian làm việc Apidog, có. Nếu bạn đang di chuyển từ Postman, bạn có thể chạy hoàn toàn từ các tệp JSON đã xuất.
Apidog CLI có thể chạy các bài kiểm thử dựa trên dữ liệu không?Có. Truyền một tệp dữ liệu CSV hoặc JSON với cờ --iteration-data. Điều này tương đương với cờ -d của Newman để lặp lại dựa trên dữ liệu.
Rủi ro chuỗi cung ứng với các trình chạy dựa trên npm là gì?Bất kỳ gói nào được kéo từ npm tại thời điểm CI đều là một bề mặt tấn công tiềm tàng. Các gói bị xâm phạm có thể trích xuất các biến môi trường, mà trong ngữ cảnh CI bao gồm khóa API và token. Một trình chạy nhị phân được tải xuống qua HTTPS và được ghim vào một checksum sẽ tránh được loại rủi ro này.
k6 có hỗ trợ kiểm thử gRPC không?Có. k6 có hỗ trợ gRPC gốc, điều này khiến nó trở thành một trong số ít công cụ mã nguồn mở xử lý cả REST và gRPC trong cùng một bộ kiểm thử. Nếu bề mặt API của bạn bao gồm các endpoint gRPC, k6 đáng để bạn đánh giá.
Hurl có hỗ trợ tiêu đề xác thực không?Có. Hurl hỗ trợ các tiêu đề tùy chỉnh, bao gồm Authorization, Bearer và xác thực dựa trên cookie. Các biến cho phép bạn chèn các bí mật từ các biến môi trường tại thời điểm chạy.
Kỷ nguyên của Newman là lựa chọn CI mặc định cho các bài kiểm thử API đang kết thúc. Các rủi ro chuỗi cung ứng là có thật, giới hạn gói miễn phí đã thay đổi cách tính toán cho nhiều đội và hiện có những lựa chọn thay thế tốt hơn. Việc di chuyển sang một quy trình không dùng Newman rất đơn giản, đặc biệt nếu bạn đang chuyển sang Apidog CLI với các collection Postman hiện có của mình.
