#การทดสอบ API ด้วย Postman และ Postman CLI

การทดสอบ API เป็นขั้นตอนสำคัญของการพัฒนาซอฟต์แวร์สมัยใหม่ เพราะ Frontend, Mobile Application, Microservices และระบบภายนอกต่างสื่อสารกันผ่าน API หาก API ส่งข้อมูลผิดรูปแบบ ตอบกลับด้วย Status Code ที่ไม่ถูกต้อง หรือมี Regression หลังจากแก้ไขระบบ ย่อมส่งผลต่อระบบส่วนอื่นทันที

Postman ช่วยให้เราสร้างและทดสอบ HTTP Request ผ่านส่วนติดต่อแบบกราฟิก ขณะที่ Postman CLI ช่วยนำ Collection และ Test Script เดิมไปรันจาก Terminal และ CI/CD Pipeline ได้โดยไม่ต้องเปิด Postman App

บทความนี้อธิบาย Workflow ตั้งแต่การทดสอบแบบ Manual ไปจนถึง Automated API Testing


postman-infographic

#1. สิ่งที่ควรทดสอบใน API

การตรวจสอบว่า Request ส่งได้และได้รับ 200 OK ยังไม่เพียงพอ โดยทั่วไปควรตรวจสอบอย่างน้อย

  • HTTP Status Code เช่น 200, 201, 400, 401, 404
  • Response Body
  • JSON Structure
  • Header
  • Business Rule
  • Response Time
  • Authentication / Authorization
  • Error Handling
  • Regression ของ Endpoint เดิม

ตัวอย่าง API:

GET https://jsonplaceholder.typicode.com/posts/1

Response ตัวอย่าง:

{
  "userId": 1,
  "id": 1,
  "title": "...",
  "body": "..."
}

#2. Workflow ของ Postman

แนวทางการทำงานพื้นฐานคือ

Create Request
      ↓
Send Request
      ↓
Inspect Response
      ↓
Write Tests
      ↓
Save to Collection
      ↓
Run Collection
      ↓
Run with Postman CLI
      ↓
Integrate with CI/CD

Postman App เหมาะสำหรับการออกแบบและ Debug Test ส่วน Postman CLI เหมาะสำหรับการทดสอบซ้ำแบบอัตโนมัติ


#3. สร้าง Collection

สร้าง Collection เช่น

My API Tests
├── Posts
│   ├── GET Post
│   ├── CREATE Post
│   ├── UPDATE Post
│   └── DELETE Post
└── Users
    ├── GET Users
    └── GET User

ข้อดีของ Collection คือสามารถรวม Request ที่เกี่ยวข้องไว้ด้วยกัน และรันเป็น Test Suite ได้


#4. ใช้ Environment Variable

แทนที่จะเขียน URL แบบ Hard-code

https://api.example.com/users

ควรสร้าง Environment Variable

base_url = https://api.example.com

แล้วใช้ใน Request

GET {{base_url}}/users

เมื่อมีหลาย Environment สามารถแยกได้ เช่น

Development
base_url = https://dev-api.example.com

Staging
base_url = https://staging-api.example.com

Production
base_url = https://api.example.com

แนวทางนี้ช่วยให้ Collection เดียวสามารถใช้กับหลาย Environment ได้


#5. เขียน Test Script ใน Postman

Postman ใช้ JavaScript สำหรับเขียน Test Script

#ตรวจสอบ Status Code

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

#ตรวจสอบ Response Time

pm.test("Response time is less than 500 ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(500);
});

#ตรวจสอบ JSON Property

pm.test("Response contains required properties", function () {
    const jsonData = pm.response.json();

    pm.expect(jsonData).to.have.property("id");
    pm.expect(jsonData).to.have.property("title");
    pm.expect(jsonData).to.have.property("body");
});

#ตรวจสอบชนิดข้อมูล

pm.test("id is a number", function () {
    const jsonData = pm.response.json();

    pm.expect(jsonData.id).to.be.a("number");
});

#ตรวจสอบค่า Business Rule

pm.test("User ID must be positive", function () {
    const jsonData = pm.response.json();

    pm.expect(jsonData.userId).to.be.above(0);
});

#6. ตัวอย่าง GET API Test

Request

GET {{base_url}}/posts/1

กำหนด Environment

base_url = https://jsonplaceholder.typicode.com

Test Script

pm.test("Status code is 200", () => {
    pm.response.to.have.status(200);
});

pm.test("Response is JSON", () => {
    pm.response.to.be.json;
});

pm.test("Post structure is correct", () => {
    const data = pm.response.json();

    pm.expect(data).to.have.property("userId");
    pm.expect(data).to.have.property("id");
    pm.expect(data).to.have.property("title");
    pm.expect(data).to.have.property("body");
});

pm.test("Post ID is correct", () => {
    const data = pm.response.json();

    pm.expect(data.id).to.eql(1);
});

#7. ตัวอย่าง POST API Test

Request

POST {{base_url}}/posts

Header

Content-Type: application/json

Body

{
  "title": "Postman API Testing",
  "body": "Automated API Testing",
  "userId": 1
}

Test Script

pm.test("Status code is 201", () => {
    pm.response.to.have.status(201);
});

pm.test("Created post contains ID", () => {
    const data = pm.response.json();

    pm.expect(data).to.have.property("id");
});

pm.test("Response contains submitted title", () => {
    const data = pm.response.json();

    pm.expect(data.title).to.eql("Postman API Testing");
});

#8. ส่งค่าระหว่าง Request

API Test มักมีลำดับ เช่น

Login
  ↓
Get Token
  ↓
Create Resource
  ↓
Get Resource
  ↓
Update Resource
  ↓
Delete Resource

ตัวอย่างเก็บ Token

const data = pm.response.json();

pm.environment.set("access_token", data.access_token);

จากนั้นนำไปใช้ใน Authorization Header

Authorization: Bearer {{access_token}}

ตัวอย่างเก็บ ID

const data = pm.response.json();

pm.environment.set("post_id", data.id);

Request ถัดไปสามารถใช้

GET {{base_url}}/posts/{{post_id}}

#9. Collection Runner

เมื่อมีหลาย Request เราสามารถรันทั้ง Collection ได้

ตัวอย่าง

Authentication
    PASS

Create User
    PASS

Get User
    PASS

Update User
    PASS

Delete User
    PASS

Collection Runner เหมาะสำหรับ Regression Testing เพราะสามารถรัน Test Suite เดิมซ้ำได้ทุกครั้งที่ระบบเปลี่ยนแปลง


#10. Postman CLI คืออะไร

Postman CLI เป็น Command-line companion ที่ Postman พัฒนาและสนับสนุนโดยตรง สามารถใช้รัน Collection จากไฟล์หรือ Collection ID และเหมาะสำหรับเชื่อมต่อกับ CI/CD

คำสั่งหลักสำหรับรัน Collection คือ

postman collection run <collection>

ตัวอย่างจากไฟล์ Local

postman collection run postman/MyAPI.postman_collection.json

หากใช้ไฟล์ในเครื่อง การทำงานแบบ Local สามารถรันได้โดยไม่ต้อง Login ส่วนงานที่เชื่อมต่อกับ Postman Cloud ต้อง Authentication


#11. ติดตั้ง Postman CLI

หากติดตั้ง Node.js และ npm แล้ว สามารถติดตั้งได้ด้วย

npm install -g postman-cli

ตรวจสอบเวอร์ชัน

postman --version

ดู Help

postman --help

#12. Login Postman CLI

Login ผ่าน Browser

postman login

สำหรับ CI/CD ควรใช้ API Key

postman login --with-api-key "$POSTMAN_API_KEY"

ไม่ควรเขียน API Key ลงใน Repository โดยตรง ควรเก็บใน Secret ของ CI/CD Provider


#13. รัน Collection จากไฟล์

สมมติโครงสร้าง Project

project/
├── postman/
│   ├── MyAPI.postman_collection.json
│   └── dev.postman_environment.json
└── src/

รัน Collection

postman collection run postman/MyAPI.postman_collection.json

รันพร้อม Environment

postman collection run \
  postman/MyAPI.postman_collection.json \
  -e postman/dev.postman_environment.json

#14. กำหนด Environment Variable จาก Command Line

สามารถ Override Variable ใน Runtime ได้ เช่น

postman collection run \
  postman/MyAPI.postman_collection.json \
  --env-var base_url=https://staging-api.example.com

แนวทางนี้เหมาะกับ CI/CD เพราะไม่จำเป็นต้องสร้าง Environment File แยกทุก Environment


#15. Data-driven Testing

Postman CLI รองรับ JSON หรือ CSV สำหรับ Iteration Data

ตัวอย่าง users.csv

email,password
user1@example.com,password1
user2@example.com,password2
user3@example.com,password3

ใช้ใน Request

{
  "email": "{{email}}",
  "password": "{{password}}"
}

รัน

postman collection run \
  postman/MyAPI.postman_collection.json \
  -d users.csv

แต่ละ Row จะถูกนำไปใช้เป็นหนึ่ง Iteration


#16. Stop เมื่อ Test Fail

ใน CI/CD เรามักต้องการหยุดเมื่อเกิด Failure

postman collection run \
  postman/MyAPI.postman_collection.json \
  --bail

Postman CLI คืน Exit Code ที่ CI/CD นำไปใช้ตัดสินว่า Pipeline ผ่านหรือไม่ผ่าน


#17. สร้าง Test Report

Postman CLI มี Built-in Reporters ได้แก่

CLI
JSON
JUnit
HTML

ตัวอย่างแสดงผลที่ Terminal และสร้าง JUnit Report

postman collection run \
  postman/MyAPI.postman_collection.json \
  -r cli,junit \
  --reporter-junit-export reports/postman-junit.xml

สร้าง HTML Report

postman collection run \
  postman/MyAPI.postman_collection.json \
  -r cli,html \
  --reporter-html-export reports/postman-report.html

สร้างหลาย Report พร้อมกัน

postman collection run \
  postman/MyAPI.postman_collection.json \
  -r cli,json,junit,html

Report แบบ JUnit เหมาะสำหรับ CI Server ส่วน HTML เหมาะสำหรับเปิดดูผลแบบ Human-readable


#18. ตัวอย่าง GitHub Actions

สร้างไฟล์

.github/workflows/api-test.yml

ตัวอย่าง Workflow

name: API Tests

on:
  push:
  pull_request:

jobs:
  postman-api-test:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Run Postman collection
        uses: postmanlabs/postman-cli-action@v1
        with:
          command: >
            collection run
            postman/MyAPI.postman_collection.json
            -e postman/dev.postman_environment.json
            -r cli,junit
            --reporter-junit-export reports/postman-junit.xml

      - name: Upload test report
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: postman-test-report
          path: reports/

Workflow นี้จะทำงานทุกครั้งที่มี Push หรือ Pull Request

แนวคิดคือ

Developer Push Code
        ↓
GitHub Actions
        ↓
Postman CLI
        ↓
Run Collection
        ↓
Assertions
     ↙     ↘
   PASS    FAIL
    ↓       ↓
 Continue  Stop Pipeline

#19. ใช้ Collection ID กับ Postman Cloud

หากต้องการรัน Collection ที่อยู่บน Postman Cloud สามารถใช้ Collection ID ได้

postman login --with-api-key "$POSTMAN_API_KEY"

postman collection run \
  12345678-12345ab-1234-1ab2-1ab2-ab1234112a12

Postman CLI สามารถส่งผลการรันไปยัง Postman เพื่อให้ทีมตรวจสอบผลร่วมกันได้


#20. Postman CLI กับ Newman ต่างกันอย่างไร

ปัจจุบัน Postman แนะนำ Postman CLI สำหรับ Workflow ใหม่ โดยเฉพาะเมื่อใช้งานความสามารถของ Postman รุ่นใหม่และ Collection v3

ประเด็น Postman CLI Newman
ผู้พัฒนา Postman Postman
การรัน Collection รองรับ รองรับ
Login Postman รองรับ ไม่รองรับ
Postman Cloud Integration โดยตรง จำกัดกว่า
Native Git / Collection v3 รองรับ ไม่รองรับ Collection v3
ใช้เป็น Node.js Library ไม่ใช่ ได้
เหมาะกับ Workflow ใหม่ แนะนำ เหมาะกับระบบเดิมบางกรณี

สำหรับ Project ใหม่ที่ใช้ Postman รุ่นใหม่ ควรเริ่มจาก Postman CLI


#21. แนวทางจัด Folder สำหรับ Project

ตัวอย่าง

project/
├── postman/
│   ├── collections/
│   │   └── MyAPI.postman_collection.json
│   │
│   ├── environments/
│   │   ├── dev.postman_environment.json
│   │   └── staging.postman_environment.json
│   │
│   └── data/
│       └── users.csv
│
├── reports/
│
├── .github/
│   └── workflows/
│       └── api-test.yml
│
└── README.md

รัน

postman collection run \
  postman/collections/MyAPI.postman_collection.json \
  -e postman/environments/dev.postman_environment.json \
  -d postman/data/users.csv

#22. Best Practices

#อย่า Hard-code URL

ควรใช้

{{base_url}}

แทน

https://api.example.com

#อย่า Commit Secret

หลีกเลี่ยง

api_key=123456789

ใน Repository

ควรใช้ GitHub Secrets, GitLab CI/CD Variables หรือ Secret Manager

#ตั้งชื่อ Test ให้สื่อความหมาย

ไม่ควรใช้

pm.test("test1", () => {});

ควรใช้

pm.test("GET /users returns 200", () => {});

#แยก Test ตามความรับผิดชอบ

ตัวอย่าง

Status Code
Response Schema
Business Rule
Performance
Security

#ให้ Test เป็น Deterministic

Automated Test ไม่ควรขึ้นกับข้อมูลที่เปลี่ยนแปลงแบบคาดเดาไม่ได้โดยไม่จัดการ Test Data ให้เหมาะสม


#23. API Testing Pyramid

การทดสอบ API ควรเป็นส่วนหนึ่งของ Automated Testing Strategy

              E2E
            /     \
           /       \
      API /Integration
         /           \
        /             \
          Unit Tests

API Test มีข้อดีคือเร็วกว่า UI E2E Test และสามารถตรวจสอบ Business Logic ระหว่าง Service ได้โดยตรง จึงเหมาะสำหรับ Regression Test ใน CI/CD


#24. Workflow ที่แนะนำ

สำหรับทีมพัฒนาซอฟต์แวร์สามารถใช้ Workflow ดังนี้

1. Developer สร้าง API
        ↓
2. Tester / Developer สร้าง Postman Request
        ↓
3. เพิ่ม Assertions
        ↓
4. จัด Request เป็น Collection
        ↓
5. รันด้วย Collection Runner
        ↓
6. Export หรือจัดเก็บ Collection ใน Repository
        ↓
7. รันด้วย Postman CLI
        ↓
8. Integrate กับ CI/CD
        ↓
9. Generate Test Report
        ↓
10. Block Deployment เมื่อ Test Fail

ผลลัพธ์คือ API Regression Testing สามารถทำงานอัตโนมัติทุกครั้งที่มีการเปลี่ยนแปลง Code


#25. สรุป

Postman ไม่ได้มีประโยชน์เฉพาะการทดลองเรียก API แบบ Manual แต่สามารถใช้สร้าง Automated API Test Suite ได้ โดยเขียน Assertions ด้วย JavaScript และจัด Request เป็น Collection

เมื่อใช้ร่วมกับ Postman CLI จะสามารถนำ Test Suite เดิมไปรันจาก Terminal และ CI/CD ได้ เช่น GitHub Actions ทำให้เกิด Workflow

Postman
   ↓
Collection
   ↓
Tests
   ↓
Postman CLI
   ↓
CI/CD
   ↓
Automated API Testing

แนวทางนี้ช่วยตรวจจับ Regression ได้เร็ว ลดการทดสอบซ้ำด้วยมือ และเพิ่มความมั่นใจก่อน Deploy ระบบ


#เอกสารอ้างอิง