DEV Community

Cover image for วิธีรัน Postman Collection ใน CI โดยไม่ต้องใช้ Newman
Thanawat Wongchai
Thanawat Wongchai

Posted on • Originally published at apidog.com

วิธีรัน Postman Collection ใน CI โดยไม่ต้องใช้ Newman

สรุปโดยย่อ

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 วันนี้

💡 Apidog เป็นแพลตฟอร์มพัฒนา API แบบครบวงจรที่ใช้งานฟรี CLI runner สามารถรัน collection ที่เข้ากันได้กับ Postman ใน CI โดยไม่มี dependency ของ npm และไม่มีการจำกัดจำนวนการรัน ลองใช้ Apidog ฟรี ไม่ต้องใช้บัตรเครดิต

บทนำ

Newman เป็นแนวคิดที่ดี เครื่องมือ CLI ที่รัน Postman collections ใน CI pipelines ทำให้การทดสอบ API สามารถเคลื่อนย้ายและทำให้เป็นอัตโนมัติได้ มันมาพร้อมกับความน่าเชื่อถือของแบรนด์ Postman, รวมเข้ากับ GitHub Actions ผ่าน community action ยอดนิยม และทำงานได้ดีพอที่หลายทีมสร้างกลยุทธ์การทดสอบ API แบบอัตโนมัติทั้งหมดโดยอิงกับ Newman

จากนั้นก็เกิดปัญหาขึ้นสามประการ

  1. Newman เป็นแพ็คเกจ npm: ทุก pipeline ที่ใช้ Newman จะดึงจาก npm registry ในช่วงเวลาที่ build ซึ่งเสี่ยงต่อการโจมตีซัพพลายเชน (เช่นเหตุการณ์ ua-parser-js ปี 2021 และ node-ipc ปี 2022) ทีม security หลายทีมเริ่มตั้งคำถามกับการใช้ npm ในเลเยอร์ testing

  2. Postman จำกัดการรัน collection: ทั้งในเวอร์ชันฟรีและแบบเสียเงินขั้นพื้นฐาน มีโควต้าในการรันผ่าน API หาก pipeline ของคุณต้องรันบ่อย โควต้าจะเต็มและต้องอัปเกรดแผนหรือเปลี่ยน pipeline

  3. การบำรุงรักษา 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
Enter fullscreen mode Exit fullscreen mode

สำหรับ CI runners ที่ใช้ Docker, Apidog มีอิมเมจอย่างเป็นทางการ:

FROM apidog/cli:latest
Enter fullscreen mode Exit fullscreen mode

การรัน Postman collection

  1. ส่งออก collection ของคุณจาก Postman (File > Export > Collection v2.1)
  2. ส่งออก environment ของคุณ (Manage Environments > Export)

รันด้วยคำสั่ง:

apidog run collection.json \
  --environment environment.json \
  --reporter-junit results.xml
Enter fullscreen mode Exit fullscreen mode

ตัวอย่าง 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
Enter fullscreen mode Exit fullscreen mode

ไม่มี 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
Enter fullscreen mode Exit fullscreen mode

ตัวเลือกที่ 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
Enter fullscreen mode Exit fullscreen mode

เอาต์พุต 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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

เปรียบเทียบสามตัวเลือก

คุณสมบัติ Apidog CLI k6 Hurl
การนำเข้า Postman โดยตรง ตัวแปลง (มีการสูญหาย) ไม่รองรับ
Dependency ของ npm ไม่มี ไม่มี ไม่มี
การเขียนสคริปต์ JS รองรับ (pm.* API) รองรับ (ES6) ไม่รองรับ (DSL)
การทดสอบประสิทธิภาพ ไม่รองรับ รองรับ ไม่รองรับ
ขนาดไบนารี ~50 MB ~30 MB ~10 MB
ข้อจำกัดการรันฟรี ไม่มี ไม่มี ไม่มี
เอาต์พุต JUnit รองรับ ผ่านปลั๊กอิน รองรับ

การย้ายจาก Newman: ขั้นตอนปฏิบัติ

ถ้าคุณมี pipeline ที่ใช้ Newman อยู่แล้ว ทำตามขั้นตอนนี้เพื่อย้ายมายัง Apidog CLI:

  1. ส่งออก collection และ environment: ใน Postman คลิกขวาที่ collection ส่งออกเป็น v2.1 และส่งออก environment แยก

  2. ติดตั้ง Apidog CLI: เพิ่มขั้นตอนการติดตั้งใน CI

  3. แทนที่คำสั่ง Newman:

    ตัวอย่าง Newman:

   newman run collection.json -e environment.json --reporters junit --reporter-junit-export results.xml
Enter fullscreen mode Exit fullscreen mode

แทนที่ด้วย Apidog:

   apidog run collection.json --environment environment.json --reporter-junit results.xml
Enter fullscreen mode Exit fullscreen mode

โครงสร้าง flag ใกล้เคียงกัน

  1. ตรวจสอบความเข้ากันได้ของสคริปต์:

    รัน collection ในเครื่องกับ Apidog CLI ก่อน commit บน CI สคริปต์ pm.* ส่วนใหญ่ใช้ได้เลย หากใช้ pm.require กับโมดูลภายนอกอาจต้องแก้ไข

  2. นำ 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)