สรุปโดยย่อ
Newman ซึ่งเป็น CLI runner อย่างเป็นทางการของ Postman ต้องการ npm และ Node.js ใน CI pipeline ของคุณ ซึ่งทำให้เกิดความเสี่ยงด้านซัพพลายเชน, เพิ่มภาระในการจัดการ dependency และสำหรับ Postman เวอร์ชันฟรี การรัน collection ผ่าน API ถูกจำกัดจำนวนครั้งแล้ว คู่มือนี้ครอบคลุมสามทางเลือกสำหรับการรัน API tests ใน CI โดยไม่ต้องใช้ Newman ได้แก่ CLI runner ของ Apidog, k6 และ Hurl Apidog เป็นเส้นทางที่ตรงที่สุดหากคุณมี Postman collection อยู่แล้ว เนื่องจากมันสามารถนำเข้า collection ได้โดยตรงและไม่มีข้อจำกัดในการรันแต่ละครั้ง
💡 Apidog เป็นแพลตฟอร์มพัฒนา API แบบครบวงจรที่ใช้งานฟรี CLI runner สามารถรัน collection ที่เข้ากันได้กับ Postman ใน CI โดยไม่มี dependency ของ npm และไม่มีการจำกัดจำนวนการรัน ลองใช้ Apidog ฟรี ไม่ต้องใช้บัตรเครดิต
บทนำ
Newman เป็นแนวคิดที่ดี เครื่องมือ CLI ที่รัน Postman collections ใน CI pipelines ทำให้การทดสอบ API สามารถเคลื่อนย้ายและทำให้เป็นอัตโนมัติได้ มันมาพร้อมกับความน่าเชื่อถือของแบรนด์ Postman, รวมเข้ากับ GitHub Actions ผ่าน community action ยอดนิยม และทำงานได้ดีพอที่หลายทีมสร้างกลยุทธ์การทดสอบ API แบบอัตโนมัติทั้งหมดโดยอิงกับ Newman
จากนั้นก็เกิดปัญหาขึ้นสามประการ
Newman เป็นแพ็คเกจ npm: ทุก pipeline ที่ใช้ Newman จะดึงจาก npm registry ในช่วงเวลาที่ build ซึ่งเสี่ยงต่อการโจมตีซัพพลายเชน (เช่นเหตุการณ์
ua-parser-jsปี 2021 และnode-ipcปี 2022) ทีม security หลายทีมเริ่มตั้งคำถามกับการใช้ npm ในเลเยอร์ testingPostman จำกัดการรัน collection: ทั้งในเวอร์ชันฟรีและแบบเสียเงินขั้นพื้นฐาน มีโควต้าในการรันผ่าน API หาก pipeline ของคุณต้องรันบ่อย โควต้าจะเต็มและต้องอัปเกรดแผนหรือเปลี่ยน pipeline
การบำรุงรักษา Newman ช้าลง: ปัญหาบน GitHub ถูกค้างคา API ใหม่ๆ ของ Postman อาจไม่รองรับใน Newman
ผลลัพธ์: นักพัฒนาที่สร้าง CI pipelines บน Newman กำลังมองหาทางเลือกอื่น นี่คือสิ่งที่มีอยู่
ตัวเลือกที่ 1: Apidog CLI (แนะนำสำหรับผู้ใช้ Postman collection)
CLI runner ของ Apidog เป็นทางเลือกที่ใกล้เคียงกับ Newman มากที่สุด โดยเฉพาะถ้าคุณมี Postman collections อยู่แล้ว
สิ่งที่รองรับ
- Postman Collection รูปแบบ v2 และ v2.1
- Postman environments (ส่งออกเป็น JSON)
- รองรับ
pm.test,pm.expect,pm.environment.set,pm.collectionVariables.set - Pre-request และ post-request scripts
- Data-driven test ผ่านไฟล์ CSV และ JSON
- เอาต์พุต JUnit XML และ JSON สำหรับ CI reporting
ไม่ต้องใช้ npm
Apidog CLI แจกจ่ายเป็นไบนารีแบบสแตนด์อโลน ดาวน์โหลดครั้งเดียว ใส่ไว้ใน PATH แล้วใช้งานได้ทันที
ไม่มีการจำกัดจำนวนการรัน
Apidog ไม่จำกัดจำนวนการรัน collection ในทุกแผนงาน ไม่ว่าคุณจะรัน 5 หรือ 500 ครั้งต่อวัน
การติดตั้ง
ดาวน์โหลด CLI ตามแพลตฟอร์มของคุณจาก apidog.com/cli หรือใช้ shell installer:
# macOS / Linux
curl -sSf https://apidog.com/cli/install.sh | sh
# ตรวจสอบเวอร์ชัน
apidog --version
สำหรับ CI runners ที่ใช้ Docker, Apidog มีอิมเมจอย่างเป็นทางการ:
FROM apidog/cli:latest
การรัน Postman collection
- ส่งออก collection ของคุณจาก Postman (File > Export > Collection v2.1)
- ส่งออก environment ของคุณ (Manage Environments > Export)
รันด้วยคำสั่ง:
apidog run collection.json \
--environment environment.json \
--reporter-junit results.xml
ตัวอย่าง GitHub Actions
name: API Tests
on: [push, pull_request]
jobs:
api-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Apidog CLI
run: curl -sSf https://apidog.com/cli/install.sh | sh
- name: Run API tests
run: |
apidog run ./tests/collection.json \
--environment ./tests/env.json \
--reporter-junit test-results.xml
- name: Upload test results
uses: actions/upload-artifact@v4
if: always()
with:
name: api-test-results
path: test-results.xml
ไม่มี npm install, ไม่มี package.json, ไม่ต้องใช้ Node.js jobs ทำงานเร็วขึ้นและ dependency surface เล็กลง
ตัวอย่าง 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
ตัวเลือกที่ 2: k6
k6 เป็นเครื่องมือทดสอบโหลดจาก Grafana Labs ที่จัดการการทดสอบ API เชิงฟังก์ชันได้ด้วย เหมาะสำหรับการทดสอบ performance และ functional test ควบคู่กัน
สิ่งที่รองรับ
- HTTP/1.1, HTTP/2, WebSocket, gRPC
- สคริปต์ทดสอบ JavaScript (ES6+)
- เกณฑ์สำหรับ performance
- เอาต์พุตไปยัง InfluxDB, Prometheus, Datadog
สิ่งที่ไม่รองรับ
- ไม่รองรับ Postman collection โดยตรง (ต้องแปลงด้วย
postman-to-k6และอาจต้องแก้ไขสคริปต์เอง) - ไม่รองรับ Postman’s
pm.*API แบบเต็มรูปแบบ
เหมาะกับกรณีไหน
ถ้าคุณต้องการทดสอบ functional + performance ใน pipeline เดียว (เช่น เช็ค API response ภายใต้โหลดหนัก) k6 คือคำตอบ แต่ถ้าต้องการแค่แทน Newman ใน functional test ใช้ Apidog จะเร็วกว่า
การใช้งาน k6 เบื้องต้นใน CI
# ติดตั้ง (Linux)
sudo apt-get install k6
# รันสคริปต์ทดสอบ
k6 run api-tests.js
เอาต์พุต CI ของ k6 แสดงผลผ่าน/ไม่ผ่านตามเกณฑ์ในสคริปต์คุณ หากต้องการ JUnit XML ใช้แพ็คเกจ k6-reporter
ตัวเลือกที่ 3: Hurl
Hurl เป็นเครื่องมือทดสอบ HTTP แบบโอเพ่นซอร์สที่เขียนด้วย Rust เร็ว ไม่มี runtime dependencies และใช้ DSL อ่านง่าย
สิ่งที่รองรับ
- HTTP/1.1 และ HTTP/2
- JSON, XPath, regex assertions
- ตัวแปรและเชื่อมโยง request
- เอาต์พุต HTML, JUnit, JSON
สิ่งที่ไม่รองรับ
- ไม่รองรับ Postman collection (ใช้ไฟล์
.hurlเท่านั้น ไม่มีตัวแปลงอัตโนมัติ) - ไม่รองรับ JavaScript (assertion เป็นแบบ declarative)
เหมาะกับกรณีไหน
ถ้าคุณพร้อมเขียน test ใหม่ใน Hurl DSL จะได้ไบนารีเล็กมาก (~10 MB) ไม่มีรันไทม์ เหมาะกับโปรเจกต์ใหม่หรือกรณีที่ไม่ต้องพึ่งพา Postman collection
ตัวอย่าง Hurl test เบื้องต้น
GET https://api.example.com/users/1
HTTP 200
[Asserts]
jsonpath "$.id" == 1
jsonpath "$.email" isString
Hurl ใน GitHub Actions
- name: ติดตั้ง 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: รัน API tests
run: hurl --test tests/*.hurl
เปรียบเทียบสามตัวเลือก
| คุณสมบัติ | Apidog CLI | k6 | Hurl |
|---|---|---|---|
| การนำเข้า Postman | โดยตรง | ตัวแปลง (มีการสูญหาย) | ไม่รองรับ |
| Dependency ของ npm | ไม่มี | ไม่มี | ไม่มี |
| การเขียนสคริปต์ JS | รองรับ (pm.* API) | รองรับ (ES6) | ไม่รองรับ (DSL) |
| การทดสอบประสิทธิภาพ | ไม่รองรับ | รองรับ | ไม่รองรับ |
| ขนาดไบนารี | ~50 MB | ~30 MB | ~10 MB |
| ข้อจำกัดการรันฟรี | ไม่มี | ไม่มี | ไม่มี |
| เอาต์พุต JUnit | รองรับ | ผ่านปลั๊กอิน | รองรับ |
การย้ายจาก Newman: ขั้นตอนปฏิบัติ
ถ้าคุณมี pipeline ที่ใช้ Newman อยู่แล้ว ทำตามขั้นตอนนี้เพื่อย้ายมายัง Apidog CLI:
ส่งออก collection และ environment: ใน Postman คลิกขวาที่ collection ส่งออกเป็น v2.1 และส่งออก environment แยก
ติดตั้ง Apidog CLI: เพิ่มขั้นตอนการติดตั้งใน CI
แทนที่คำสั่ง Newman:
ตัวอย่าง Newman:
newman run collection.json -e environment.json --reporters junit --reporter-junit-export results.xml
แทนที่ด้วย Apidog:
apidog run collection.json --environment environment.json --reporter-junit results.xml
โครงสร้าง flag ใกล้เคียงกัน
ตรวจสอบความเข้ากันได้ของสคริปต์:
รัน collection ในเครื่องกับ Apidog CLI ก่อน commit บน CI สคริปต์pm.*ส่วนใหญ่ใช้ได้เลย หากใช้pm.requireกับโมดูลภายนอกอาจต้องแก้ไขนำ Node.js ออกจาก CI:
ถ้าใช้ Newman เป็นเหตุผลเดียวที่ใช้ Node.js และ npm ใน pipeline สามารถลบขั้นตอนเหล่านั้นออกไปได้
คำถามที่พบบ่อย
Newman ถูกเลิกใช้งานหรือยัง?
ยัง (ต้นปี 2026 ยังดูแลอยู่โดย Postman) แต่การบำรุงรักษาช้าและปัญหาหลายข้อยังเปิดอยู่
Apidog CLI ต้องใช้บัญชี Apidog ไหม?
ไม่จำเป็นสำหรับการรันไฟล์ที่ส่งออก (local export) ถ้าจะ sync จาก workspace ต้องใช้บัญชี
Apidog CLI รองรับ data-driven tests ไหม?
รองรับ ใช้ไฟล์ CSV/JSON กับ flag --iteration-data (เทียบเท่า flag -d ของ Newman)
ความเสี่ยง supply chain ของ npm คืืออะไร?
การดึง npm package ระหว่าง CI มีโอกาสโดนโจมตี เช่น package ถูกฝังโค้ดขโมย env vars (API keys, tokens) ไบนารีที่ดาวน์โหลดผ่าน HTTPS และตรวจ SHA256 จะลดความเสี่ยงนี้
k6 รองรับ gRPC ไหม?
รองรับ gRPC ดั้งเดิม เหมาะกับทีมที่มี REST และ gRPC endpoints
Hurl รองรับ authentication headers ไหม?
รองรับ custom header ทุกชนิด (เช่น Authorization, Bearer) สามารถใช้ตัวแปรจาก environment ได้
ยุคของ Newman เป็น default สำหรับ API CI กำลังจะหมดไป ความเสี่ยง supply chain และข้อจำกัดเวอร์ชันฟรีเปลี่ยนสมการสำหรับหลายทีม ทางเลือกใหม่อย่าง Apidog CLI ทำให้การย้าย pipeline โดยเฉพาะกับ Postman collections เดิม เป็นเรื่องง่ายและปลอดภัยกว่า
Top comments (0)