สรุปโดยย่อ
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 ได้โดยตรงและไม่มีข้อจำกัดในการรันแต่ละครั้ง
บทนำ
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 แสดงให้เห็นว่าการโจมตีซัพพลายเชนของ npm ไม่ใช่แค่ทฤษฎี ทีมรักษาความปลอดภัยเริ่มตั้งคำถามว่าทำไมเลเยอร์การทดสอบ API ถึงต้องใช้ npm ด้วยซ้ำ
ประการที่สอง Postman เริ่มจำกัดการรัน collection ในเวอร์ชันฟรีและแบบเสียเงินขั้นพื้นฐาน ทีมที่พึ่งพาการรัน collection ผ่าน Postman API เป็นส่วนหนึ่งของ CI ต้องเผชิญกับโควต้าและต้องอัปเกรดแผนหรือออกแบบ 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 ผ่านไฟล์ข้อมูล CSV และ JSON
- เอาต์พุต JUnit XML และ JSON สำหรับการรายงานใน CI
ไม่ต้องใช้ npm Apidog CLI ถูกแจกจ่ายเป็นไบนารีแบบสแตนด์อโลน คุณดาวน์โหลดครั้งเดียว เพิ่มลงใน PATH และมันก็ทำงาน
ไม่มีการจำกัดจำนวนการรัน Apidog ไม่จำกัดจำนวนการรัน collection ในแผนใดๆ Pipeline ที่รัน 500 collections ต่อวันทำงานเหมือนกับ pipeline ที่รัน 5 collections
การติดตั้ง
ดาวน์โหลดไบนารี 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 version matrix Job ทำงานเร็วขึ้นและ 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 เชิงฟังก์ชันได้ด้วย มันคุ้มค่าที่จะรู้จักเพราะมันยอดเยี่ยมสำหรับการทดสอบประสิทธิภาพควบคู่ไปกับการตรวจสอบฟังก์ชัน
สิ่งที่รองรับ
- HTTP/1.1, HTTP/2, WebSocket, gRPC
- สคริปต์ทดสอบ JavaScript (ES6+)
- เกณฑ์สำหรับการยืนยันประสิทธิภาพ
- เอาต์พุตไปยัง InfluxDB, Prometheus, Datadog
สิ่งที่ไม่รองรับ
- รูปแบบ Postman collection ดั้งเดิม คุณสามารถแปลง Postman collections เป็นสคริปต์ k6 โดยใช้ตัวแปลง
postman-to-k6แต่ผลลัพธ์มักจะต้องมีการแก้ไขด้วยตนเอง โดยเฉพาะอย่างยิ่งสำหรับสคริปต์ที่ซับซ้อน - Postman’s
pm.*API ดั้งเดิม เลเยอร์การแปลงจะจำลองขึ้นมาแต่มีช่องโหว่
ควรเลือก k6 เมื่อใด
หากคุณต้องการรวมการทดสอบฟังก์ชันกับการทดสอบประสิทธิภาพใน pipeline เดียวกัน เช่น การตรวจสอบความถูกต้องของ API ภายใต้โหลด k6 ก็คุ้มค่ากับค่าใช้จ่ายในการย้ายข้อมูล หากคุณต้องการเพียงแค่แทนที่ Newman สำหรับการทดสอบฟังก์ชัน 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 แบบข้อความธรรมดาในการกำหนด requests และ assertions
สิ่งที่รองรับ
- HTTP/1.1 และ HTTP/2
- JSON, XPath และ regex assertions
- ตัวแปรและการเชื่อมโยง requests
- เอาต์พุต HTML, JUnit และ JSON
สิ่งที่ไม่รองรับ
- รูปแบบ Postman collection Hurl ใช้รูปแบบไฟล์
.hurlของตัวเอง ไม่มีตัวแปลงอัตโนมัติ - สคริปต์ทดสอบ JavaScript Assertions เป็นแบบประกาศ ไม่ใช่แบบโปรแกรม
ควรเลือก Hurl เมื่อใด
หากคุณยินดีที่จะเขียนการทดสอบของคุณใหม่ใน Hurl’s DSL คุณจะได้ไบนารีที่มีขนาดเล็กอย่างน่าทึ่งโดยไม่มีรันไทม์ ไบนารีเป็นไฟล์เดียวขนาด 10 MB Hurl เป็นตัวเลือกที่แข็งแกร่งสำหรับโปรเจกต์ใหม่ที่คุณไม่มีภาระ Postman collection ค้างอยู่
ตัวอย่างการทดสอบ Hurl เบื้องต้น
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 | ไม่มี | ไม่มี | ไม่มี |
| การเขียนสคริปต์ JavaScript | รองรับ (pm.* API) | รองรับ (ES6) | ไม่รองรับ (DSL เท่านั้น) |
| การทดสอบประสิทธิภาพ | ไม่รองรับ | รองรับ | ไม่รองรับ |
| ขนาดไบนารี | ประมาณ 50 MB | ประมาณ 30 MB | ประมาณ 10 MB |
| ข้อจำกัดการรันฟรี | ไม่มี | ไม่มี | ไม่มี |
| เอาต์พุต JUnit | รองรับ | ผ่านปลั๊กอิน | รองรับ |
การย้ายจาก Newman: ขั้นตอนปฏิบัติ
หากคุณมี pipeline ที่ใช้ Newman อยู่แล้ว นี่คือเส้นทางการย้ายไปยัง Apidog CLI:
ส่งออกคอลเล็กชันของคุณ ใน 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 ปรากฏใน pipeline ของคุณ คุณสามารถลบขั้นตอนการตั้งค่า Node.js และขั้นตอน npm install ออกทั้งหมดได้
คำถามที่พบบ่อย
Newman ถูกเลิกใช้งานอย่างเป็นทางการแล้วหรือยัง?ไม่ ในช่วงต้นปี 2026 Newman ยังคงได้รับการดูแลโดย Postman แต่ความเร็วในการบำรุงรักษาช้าและปัญหาที่เปิดอยู่หลายประการส่งผลกระทบต่อกรณีการใช้งานจริง มันยังไม่หายไปเร็วๆ นี้ แต่การสร้าง pipeline ใหม่โดยใช้มันมีความเสี่ยงเพิ่มขึ้น
Apidog CLI ต้องใช้บัญชี Apidog หรือไม่?สำหรับการรัน collection ที่ส่งออกในเครื่อง ไม่จำเป็น สำหรับการซิงค์ collection จาก Apidog workspace จำเป็น หากคุณกำลังย้ายจาก Postman คุณสามารถรันได้จากไฟล์ JSON ที่ส่งออกเท่านั้น
Apidog CLI สามารถรันการทดสอบแบบ data-driven ได้หรือไม่?ได้ ผ่านไฟล์ข้อมูล CSV หรือ JSON ด้วย flag --iteration-data ซึ่งเทียบเท่ากับ flag -d ของ Newman สำหรับการวนซ้ำแบบ data-driven
ความเสี่ยงด้านซัพพลายเชนของรันเนอร์ที่ใช้ npm คืออะไร?แพ็คเกจใดๆ ที่ดึงมาจาก npm ในช่วงเวลา CI เป็นจุดที่อาจถูกโจมตีได้ แพ็คเกจที่ถูกบุกรุกสามารถส่งข้อมูลตัวแปรสภาพแวดล้อม ซึ่งในบริบทของ CI จะรวมถึง API keys และ tokens รันเนอร์แบบไบนารีที่ดาวน์โหลดผ่าน HTTPS และตรึงไว้กับ checksum จะหลีกเลี่ยงความเสี่ยงประเภทนี้ได้
k6 รองรับการทดสอบ gRPC หรือไม่?ได้ k6 มีการรองรับ gRPC ดั้งเดิม ซึ่งทำให้เป็นหนึ่งในไม่กี่เครื่องมือโอเพ่นซอร์สที่จัดการทั้ง REST และ gRPC ในชุดการทดสอบเดียวกัน หาก API surface ของคุณมี gRPC endpoints k6 ก็คุ้มค่าที่จะประเมิน
Hurl รองรับ authentication headers หรือไม่?ได้ Hurl รองรับ custom headers รวมถึง Authorization, Bearer และการยืนยันตัวตนแบบ cookie-based ตัวแปรช่วยให้คุณสามารถแทรก secrets จาก environment variables ในขณะรันไทม์ได้
ยุคของ Newman ที่เป็นตัวเลือกเริ่มต้นสำหรับ CI ในการทดสอบ API กำลังจะสิ้นสุดลง ความเสี่ยงด้านซัพพลายเชนเป็นของจริง ข้อจำกัดของเวอร์ชันฟรีได้เปลี่ยนแปลงสมการสำหรับหลายทีม และมีทางเลือกที่ดีกว่าอยู่ในขณะนี้ การย้ายไปใช้ pipeline ที่ไม่มี Newman เป็นเรื่องตรงไปตรงมา โดยเฉพาะอย่างยิ่งหากคุณย้ายไปใช้ Apidog CLI กับ Postman collections ที่มีอยู่ของคุณ
