Newman และ Postman ไม่ใช่คู่แข่งกัน แต่เป็นสองส่วนของเวิร์กโฟลว์เดียวกัน: Postman ใช้สร้างและดีบั๊กคำขอ API แบบมี GUI ส่วน Newman ใช้รันคอลเลกชันเดียวกันจากบรรทัดคำสั่งโดยไม่มี GUI เหมาะสำหรับ CI/CD, scheduled jobs และ automation ที่ต้องการผลลัพธ์ผ่าน exit code
คำตอบสั้นๆ คือใช้ทั้งสองอย่างในคนละขั้นตอน: สร้างและตรวจสอบคอลเลกชันใน Postman จากนั้น export เป็น JSON แล้วให้ Newman รันใน pipeline บทความนี้สรุปวิธีใช้งานจริง ตั้งแต่การติดตั้ง การรันคอลเลกชัน การต่อกับ CI/CD ไปจนถึงข้อผิดพลาดที่ควรระวัง
Postman คืออะไร
Postman เป็นแพลตฟอร์ม API แบบกราฟิกสำหรับสร้างคำขอ จัดกลุ่มเป็น collection/folder และผูก environment ที่เก็บตัวแปร เช่น base URL, token หรือค่า config อื่นๆ หลังจากได้รับ response แล้ว Postman สามารถรัน JavaScript test script ในแท็บ Tests ได้ทันที
ตัวอย่าง test script:
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
pm.test("Order total is a positive number", function () {
const body = pm.response.json();
pm.expect(body.total).to.be.a("number");
pm.expect(body.total).to.be.above(0);
});
Postman เหมาะกับงานแบบ interactive เช่น:
- ดีบั๊ก endpoint ใหม่
- ทดลองเปลี่ยน header/body/query parameter
- ตรวจ response แบบ manual
- สร้าง regression test suite
- แชร์ collection ให้ทีมใช้ร่วมกัน
ถ้าต้องการเวิร์กโฟลว์การทดสอบ API ด้วย Postman แบบละเอียด ดูคู่มือ ทดสอบ API ด้วย Postman
ข้อจำกัดคือ Postman ไม่ได้ออกแบบมาเพื่อรันแบบ unattended ใน build server เพราะต้องเปิดแอปและใช้ Collection Runner ผ่าน GUI ซึ่งไม่เหมาะกับ pipeline
Newman คืออะไร
Newman คือ official command-line collection runner ของ Postman เป็นแพ็กเกจ npm แบบโอเพ่นซอร์ส ใช้รันไฟล์ collection JSON ที่ export จาก Postman ได้โดยตรง
ติดตั้ง Newman:
npm install -g newman
รัน collection พร้อม environment:
newman run orders-api.postman_collection.json \
--environment staging.postman_environment.json
Newman จะรัน request ทั้งหมดใน collection, execute pm.test เหมือน Postman และแสดงผลใน terminal จุดสำคัญคือ Newman ใช้ runtime เดียวกับ Postman ดังนั้น test ที่ผ่านใน Postman Collection Runner ควรให้ผลลัพธ์เดียวกันเมื่อรันด้วย Newman
เมื่อ test ล้มเหลว Newman จะ exit ด้วย status code ที่ไม่ใช่ 0 ทำให้ CI/CD ตรวจจับได้ทันทีและ mark build เป็น failed
ตัวอย่างตรวจ exit code ใน shell:
newman run orders-api.postman_collection.json \
--environment staging.postman_environment.json
echo $?
ถ้า exit code เป็น 0 คือผ่าน ถ้าไม่ใช่ 0 คือมี error หรือ assertion failed
เปรียบเทียบ Postman กับ Newman
| แง่มุม | Postman | Newman |
|---|---|---|
| อินเทอร์เฟซ | แอปเดสก์ท็อปแบบกราฟิก | บรรทัดคำสั่ง ไม่มี UI |
| การใช้งานหลัก | สร้าง ดีบั๊ก สำรวจ API | รันอัตโนมัติใน script หรือ CI/CD |
| รันที่ไหน | เครื่องของนักพัฒนา | CI server, terminal, scheduler |
| ค่าใช้จ่าย | มีทั้งแผนฟรีและเสียเงิน | โอเพ่นซอร์ส ฟรี |
| การติดตั้ง | Desktop installer | npm package หรือ Docker image |
| สคริปต์ทดสอบ | เขียนและรันในแอป | รันสคริปต์เดียวกันแบบ headless |
| การรายงานผล | แสดงผลใน GUI | CLI output และ reporter เช่น JUnit |
| เหมาะที่สุดสำหรับ | การทำงานแบบ interactive | การรันซ้ำได้แบบอัตโนมัติ |
สรุปคือ collection JSON คือสะพานระหว่างสองเครื่องมือ: ออกแบบใน Postman แล้วรันอัตโนมัติด้วย Newman
วิธีใช้ Newman ใน CI/CD
รูปแบบทั่วไปมี 5 ขั้นตอน:
Export จาก Postman
Export collection และ environment เป็นไฟล์ JSONCommit เข้า repository
เก็บไฟล์ไว้ใน repo เดียวกับโค้ด เช่น:
api-tests/
orders-api.postman_collection.json
staging.postman_environment.json
- ติดตั้ง Newman ใน CI job ใช้ npm:
npm install -g newman
หรือใช้ Docker image:
docker run --rm -v "$PWD:/etc/newman" postman/newman run /etc/newman/api-tests/orders-api.postman_collection.json
- รัน collection ระบุ collection และ environment ให้ชัดเจน:
newman run api-tests/orders-api.postman_collection.json \
--environment api-tests/staging.postman_environment.json
- ให้ exit code ตัดสินผล build ถ้ามี test fail Newman จะ exit non-zero และ CI จะ fail job
ตัวอย่าง GitHub Actions:
name: API Tests
on:
pull_request:
push:
branches:
- main
jobs:
newman:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Newman
run: npm install -g newman
- name: Run API tests
run: |
newman run api-tests/orders-api.postman_collection.json \
--environment api-tests/staging.postman_environment.json \
--reporters cli,junit \
--reporter-junit-export results.xml
แฟล็ก --reporters cli,junit ช่วยให้ได้ทั้ง output ใน terminal และไฟล์ JUnit XML สำหรับแสดงผลใน CI dashboard
อ่านต่อได้ที่:
ตัวเลือกบรรทัดคำสั่ง Newman ที่ควรรู้
Newman มี flag หลายตัวที่ช่วยให้ pipeline เสถียรขึ้น
รันด้วยข้อมูลหลายชุด
ใช้ --iteration-data เพื่อรัน collection ซ้ำตามข้อมูลใน CSV หรือ JSON
newman run orders-api.postman_collection.json \
--environment staging.postman_environment.json \
--iteration-data test-data/orders.csv
ตัวอย่าง orders.csv:
productId,quantity
p-1001,1
p-1002,3
p-1003,5
ใน Postman script หรือ request สามารถเรียกใช้ตัวแปรเป็น {{productId}} และ {{quantity}}
จำกัดจำนวนรอบ
newman run orders-api.postman_collection.json \
--iteration-count 3
เหมาะกับการทดสอบซ้ำเพื่อดูความเสถียรของ endpoint
หยุดทันทีเมื่อเจอ failure
newman run orders-api.postman_collection.json \
--bail
เหมาะกับ pull request pipeline ที่ต้องการ feedback เร็ว
ตั้ง timeout ต่อ request
newman run orders-api.postman_collection.json \
--timeout-request 10000
ตัวอย่างนี้กำหนด timeout request ละ 10 วินาที ลดความเสี่ยงที่ CI job จะค้างเพราะ service ไม่ตอบ
หน่วงเวลาระหว่าง request
newman run orders-api.postman_collection.json \
--delay-request 500
เหมาะกับ API ที่มี rate limit หรือระบบ staging ที่รับโหลดได้จำกัด
รันเฉพาะ folder
newman run orders-api.postman_collection.json \
--folder "Smoke Tests"
ใช้แยก pipeline ได้ เช่น:
- Pull request: รันเฉพาะ
Smoke Tests - Nightly build: รัน regression ทั้ง collection
ข้อผิดพลาดทั่วไปเมื่อย้ายจาก Postman ไป Newman
1. ลืมส่ง environment file
Request ที่รันผ่านใน Postman อาจ fail ใน Newman ถ้าตัวแปรอยู่ใน active environment แต่ไม่ได้ส่งไฟล์ environment ให้ Newman
ควรระบุเสมอ:
newman run orders-api.postman_collection.json \
--environment staging.postman_environment.json
2. Hardcode ค่าเฉพาะเครื่อง
หลีกเลี่ยงการ hardcode เช่น token, base URL หรือ user ID ใน request โดยตรง ให้ใช้ environment variable แทน:
{{baseUrl}}/orders/{{orderId}}
แล้วจัดการค่าผ่าน environment file หรือ CI secrets
3. ใช้ token ที่หมดอายุ
ถ้า environment file มี token แบบ static pipeline อาจ fail เมื่อ token หมดอายุ ทางแก้คือเพิ่ม request สำหรับ login/auth แล้วเก็บ token ด้วย script
ตัวอย่าง:
const body = pm.response.json();
pm.environment.set("accessToken", body.access_token);
จากนั้นใช้ใน header:
Authorization: Bearer {{accessToken}}
4. Export collection แล้วลืมอัปเดต repo
ไฟล์ collection ใน repository เป็น snapshot ถ้าแก้ collection ใน Postman แล้วไม่ export ใหม่ CI จะยังรันเวอร์ชันเก่า
แนวทางที่ควรทำ:
- ทุกการแก้ test ต้อง export ใหม่
- commit collection และ environment พร้อมโค้ด
- review diff ของ JSON ใน pull request
- ทดสอบด้วย Newman local ก่อน push
newman run api-tests/orders-api.postman_collection.json \
--environment api-tests/staging.postman_environment.json
5. พึ่งพา Postman cloud/session มากเกินไป
คอลเลกชันที่อ้างอิง state จาก cloud sync หรือ login session อาจไม่ทำงานเหมือนเดิมเมื่อรันจากไฟล์ JSON ใน CI ให้ทดสอบไฟล์ export ด้วย Newman ในเครื่องก่อนเสมอ
ควรใช้ Postman หรือ Newman เมื่อไหร่
ใช้ Postman เมื่อมีคนกำลังทำงานกับ API โดยตรง:
- ออกแบบ request ใหม่
- ดีบั๊ก response
- ทดลอง endpoint ของ third-party service
- เขียนและปรับ test script
- จัดระเบียบ collection
ใช้ Newman เมื่อต้องการให้ระบบรันเอง:
- รัน test ทุก pull request
- รัน nightly regression
- รัน smoke test หลัง deploy
- สร้าง API monitoring job แบบ scheduled
- ส่งผลลัพธ์เข้า CI dashboard
ขอบเขตที่จำง่ายคือ:
Postman ใช้สร้างงาน ส่วน Newman ใช้รันงานอัตโนมัติ
ถ้าไม่ต้องการใช้ Newman เป็นตัวรันแยก ดูตัวเลือกเพิ่มเติมในคู่มือ รันคอลเลกชัน Postman ใน CI โดยไม่มี Newman
ทางเลือกแบบครบวงจร: Apidog
การใช้ Postman ร่วมกับ Newman ต้องดูแลหลายส่วน: export collection, sync ไฟล์ JSON, จัดการ environment และตั้งค่าตัวรันใน CI/CD
Apidog รวมงานออกแบบ API, debug request, automated testing และ CI/CD runner ไว้ในแพลตฟอร์มเดียว คุณสามารถสร้าง test scenario พร้อม assertion ในแอป แล้วนำไปรันใน pipeline ด้วย command-line runner โดยไม่ต้อง export/sync collection แยกเหมือน workflow แบบ Postman + Newman
Apidog ยังรองรับ API design, mock servers และ performance testing ใน workspace เดียวกัน คุณสามารถ ดาวน์โหลด Apidog และใช้ฟีเจอร์ทดสอบได้ฟรี
สำหรับการเปรียบเทียบเครื่องมือเพิ่มเติม ดูรายการ ทางเลือกที่ดีที่สุดของ Postman สำหรับการทดสอบ API
คำถามที่พบบ่อย
Newman เป็นตัวแทนของ Postman ใช่หรือไม่?
ไม่ใช่ Newman สร้างหรือแก้ไข collection ไม่ได้ ทำได้เพียงรัน collection ที่สร้างไว้แล้ว คุณยังต้องใช้ Postman หรือเครื่องมืออื่นเพื่อสร้าง request และเขียน test script
Newman มีค่าใช้จ่ายหรือไม่?
ไม่มี Newman เป็นโอเพ่นซอร์สและใช้ฟรี แจกจ่ายผ่าน npm package ส่วน Postman มีทั้งแผนฟรีและแผนเสียเงิน แต่ Newman เองไม่มีค่าใช้จ่าย
Test script จาก Postman จะทำงานเหมือนกันใน Newman หรือไม่?
ใช่ Newman ใช้ execution engine เดียวกับ Postman ดังนั้น pm.test, assertion และ request logic จะทำงานเหมือนกันเมื่อ export collection และ environment อย่างถูกต้อง
Newman รายงาน test failure อย่างไร?
Newman แสดงผลใน terminal และ exit ด้วย status code ที่ไม่ใช่ 0 เมื่อมี test fail CI/CD จึงตรวจจับ failure ได้ทันที นอกจากนี้ยังรองรับ reporter เช่น JUnit XML และ HTML สำหรับนำผลลัพธ์ไปแสดงใน dashboard
รัน Newman โดยไม่ติดตั้ง Node.js ได้ไหม?
ได้ ถ้าไม่ต้องการติดตั้ง Node.js โดยตรง ให้ใช้ Docker image postman/newman:
docker run --rm -v "$PWD:/etc/newman" postman/newman run \
/etc/newman/api-tests/orders-api.postman_collection.json \
--environment /etc/newman/api-tests/staging.postman_environment.json
วิธีนี้เหมาะกับ CI environment ที่ไม่ต้องการจัดการ Node.js runtime เอง
Top comments (0)