DEV Community

Cover image for วิธีทดสอบ API ด้วย Postman: คู่มือฉบับลงมือทำ
Thanawat Wongchai
Thanawat Wongchai

Posted on • Originally published at apidog.com

วิธีทดสอบ API ด้วย Postman: คู่มือฉบับลงมือทำ

Postman เป็นหนึ่งในเครื่องมือที่นักพัฒนาใช้บ่อยที่สุดสำหรับส่ง HTTP request และตรวจสอบพฤติกรรมของ API ตั้งแต่การลอง GET แบบเร็ว ๆ ไปจนถึงการรัน test suite ใน CI ถ้าคุณสร้าง ดูแล หรือ consume API คุณมีโอกาสสูงที่จะต้องใช้ Postman ใน workflow ประจำวัน

ลองใช้ Apidog วันนี้

คู่มือนี้สรุปวิธีทดสอบ API ใน Postman แบบลงมือทำจริง: ส่ง request, ตรวจ response, เขียน assertions ใน Tests, ตั้ง environments เพื่อสลับ staging/production และรันทั้ง collection ด้วย Collection Runner ตัวอย่างใช้ public API เพื่อให้ทำตามได้ทันทีโดยไม่ต้องตั้ง backend เอง

ตั้งค่า Postman และส่ง request แรก

ดาวน์โหลด Postman จาก เว็บไซต์ทางการ แล้วติดตั้งแอปเดสก์ท็อป คุณสามารถใช้งาน local ได้โดยไม่ต้องมีบัญชี แต่การลงชื่อเข้าใช้จะช่วย sync collections ระหว่างอุปกรณ์

ขั้นตอนเริ่มต้น:

  1. เปิด Postman
  2. คลิก New
  3. เลือก HTTP Request
  4. เลือก method เป็น GET
  5. ใส่ URL ต่อไปนี้
GET https://jsonplaceholder.typicode.com/users/1
Enter fullscreen mode Exit fullscreen mode

คลิก Send แล้วดู response panel ซึ่งจะแสดง:

  • response body
  • status code เช่น 200 OK
  • response time
  • response size
  • มุมมอง body แบบ Pretty, Raw และ Preview

สำหรับ POST ให้เปลี่ยน method เป็น POST จากนั้นไปที่แท็บ Body:

  1. เลือก raw
  2. เลือก format เป็น JSON
  3. ใส่ payload
{
  "name": "Maria Chen",
  "email": "maria.chen@example.com"
}
Enter fullscreen mode Exit fullscreen mode

เมื่อเลือก body เป็น JSON แล้ว Postman จะเพิ่ม header เช่น Content-Type: application/json ให้โดยอัตโนมัติ ถ้า API ต้องการ header อื่น เช่น Authorization ให้เพิ่มในแท็บ Headers

ถ้าคุณยังไม่แน่ใจว่าควรคาดหวัง status code แบบใดในแต่ละกรณี อ่านเพิ่มเติมได้ที่ รหัสสถานะ HTTP ที่ REST API ควรใช้

จัด request เป็น collection

request เดี่ยวเหมาะกับการตรวจแบบเร็ว ๆ แต่การทดสอบ API จริงมักเป็น flow หลายขั้นตอน เช่น:

  1. สร้างผู้ใช้
  2. ดึงข้อมูลผู้ใช้
  3. อัปเดตผู้ใช้
  4. ลบผู้ใช้

ใน Postman ให้จัดกลุ่ม request เหล่านี้ด้วย Collection

วิธีสร้าง collection:

  1. เปิดแถบ Collections
  2. คลิกไอคอน +
  3. ตั้งชื่อ เช่น User API smoke tests
  4. บันทึก request ด้วย Ctrl/Cmd + S
  5. ตั้งชื่อ request ให้สื่อความหมาย เช่น Get user by ID

คุณยังสามารถสร้าง folder ภายใน collection เพื่อแยกประเภท request เช่น:

User API smoke tests
├── Auth
│   └── Login
├── Users
│   ├── Create user
│   ├── Get user
│   ├── Update user
│   └── Delete user
Enter fullscreen mode Exit fullscreen mode

Collection ยังเป็นหน่วยที่ใช้แชร์และรันอัตโนมัติได้ คุณสามารถ export เป็น JSON หรือแชร์ผ่าน cloud workspace ได้ เมื่อเพื่อนร่วมทีมนำเข้า collection จะได้ request และ test เหมือนกัน

Postman ยังรองรับ script ระดับ collection หรือ folder เช่น:

  • Pre-request script: รันก่อนทุก request เหมาะกับการ refresh token หรือสร้าง timestamp
  • Tests script: รันหลังทุก request เหมาะกับ assertion กลาง เช่น ตรวจว่า response time ไม่เกิน threshold

ตัวอย่าง test ระดับ collection:

pm.test("Response time is acceptable", function () {
    pm.expect(pm.response.responseTime).to.be.below(1000);
});
Enter fullscreen mode Exit fullscreen mode

การใส่ logic ที่ใช้ซ้ำไว้ระดับ collection จะช่วยลด duplication ในแต่ละ request

เขียน test ในแท็บ Tests

การส่ง request บอกว่า API ตอบอะไรกลับมา ส่วน test บอกว่า response นั้น “ถูกต้องหรือไม่” Postman รัน JavaScript หลังจากได้รับ response แล้ว โดยใช้ object หลักชื่อ pm

รูปแบบพื้นฐานคือ:

pm.test("ชื่อ test", function () {
    // assertion
});
Enter fullscreen mode Exit fullscreen mode

ตัวอย่าง assertions ที่ใช้บ่อย:

// ตรวจ status code
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

// ตรวจ response time
pm.test("Response is under 500ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(500);
});

// ตรวจ field ใน JSON body
pm.test("User has the expected email", function () {
    const body = pm.response.json();
    pm.expect(body.email).to.eql("maria.chen@example.com");
});

// ตรวจ header
pm.test("Content-Type is JSON", function () {
    pm.expect(pm.response.headers.get("Content-Type"))
      .to.include("application/json");
});
Enter fullscreen mode Exit fullscreen mode

Postman ใช้ assertion syntax จาก Chai ดังนั้น pm.expect รองรับรูปแบบอย่างเช่น:

pm.expect(value).to.eql(expectedValue);
pm.expect(value).to.include("text");
pm.expect(number).to.be.above(0);
pm.expect(number).to.be.below(1000);
Enter fullscreen mode Exit fullscreen mode

หลังคลิก Send ให้ดูผลที่แท็บ Test Results แต่ละ test จะแสดงว่า pass หรือ fail

แนวทางเขียน test ให้ดูแลต่อได้ง่าย:

  • ตั้งชื่อ pm.test ตามพฤติกรรมที่ตรวจ เช่น Status code is 200
  • ตรวจสิ่งที่ client พึ่งพาจริง เช่น status code, schema, required fields
  • หลีกเลี่ยงการ assert ค่าที่เปลี่ยนตลอด เช่น timestamp ที่ server สร้าง
  • แยก assertion ให้ชัด เพื่อให้รู้ว่า fail เพราะอะไร
  • ใช้แผง Snippets ใน Postman เพื่อ insert assertion สำเร็จรูป

ถ้าต้องการออกแบบ assertion ให้ดีขึ้น อ่านต่อได้ที่ คำยืนยัน API และวิธีเขียนให้ดี และ ตัวอย่างกรณีทดสอบ API

ใช้ environments และ variables

อย่า hard-code base URL เช่น https://api.staging.example.com ลงในทุก request เพราะเมื่อสลับไป production คุณจะต้องแก้หลายจุด Postman แก้ปัญหานี้ด้วย Environments

สร้าง environment:

  1. เปิดเมนู environments
  2. สร้าง environment ชื่อ Staging
  3. เพิ่ม variable ชื่อ base_url
  4. ตั้งค่าเป็น https://jsonplaceholder.typicode.com

จากนั้นแก้ request เป็น:

GET {{base_url}}/users/1
Enter fullscreen mode Exit fullscreen mode

เมื่อเลือก environment จาก dropdown มุมขวาบน ทุก request ที่ใช้ {{base_url}} จะเปลี่ยนตาม environment ทันที

ตัวแปรยังใช้ส่งข้อมูลระหว่าง request ได้ เช่น login request ดึง token จาก response แล้วเก็บไว้:

pm.test("Save the auth token", function () {
    const token = pm.response.json().token;
    pm.environment.set("auth_token", token);
});
Enter fullscreen mode Exit fullscreen mode

request ถัดไปสามารถใช้ token ได้ใน header:

Authorization: Bearer {{auth_token}}
Enter fullscreen mode Exit fullscreen mode

scope ของ variable ที่ควรรู้:

Scope ใช้เมื่อ
Environment variables ค่าที่เปลี่ยนตาม environment เช่น base_url, auth_token
Collection variables ค่าคงที่ของ collection เช่น API version
Global variables ค่าที่ใช้ได้ทุก collection
Local variables ค่าชั่วคราวระหว่างการรัน

เลือก scope ให้เหมาะสมเพื่อลดปัญหา variable ชนกันหรือเปลี่ยนค่าผิด environment

รันทั้ง collection ด้วย Collection Runner

การกด Send ทีละ request ไม่เหมาะกับ regression test ให้ใช้ Collection Runner เพื่อรันทุก request ตามลำดับและสรุปผล pass/fail

ขั้นตอน:

  1. เปิด collection
  2. คลิก Run หรือเลือกเมนูสามจุดแล้วคลิก Run collection
  3. เลือก environment
  4. กำหนดจำนวน iterations
  5. แนบ data file ถ้าต้องการ
  6. คลิก Run

Runner จะส่ง request จากบนลงล่างและรัน test ของแต่ละ request

ลำดับ request สำคัญมาก เช่น:

1. Login
2. Create user
3. Get user
4. Update user
5. Delete user
Enter fullscreen mode Exit fullscreen mode

ถ้า request แรกเก็บ auth_token ไว้ request ถัดไปก็สามารถใช้ {{auth_token}} ได้ทันที

หน้าผลลัพธ์จะแสดง:

  • จำนวน tests ที่ผ่าน
  • จำนวน tests ที่ไม่ผ่าน
  • รายละเอียด assertion ของแต่ละ request
  • ประวัติการรันก่อนหน้า

ใช้ Runner หลัง deploy เพื่อเช็ค regression ได้เร็วขึ้น

ทำ data-driven testing ด้วย CSV หรือ JSON

ถ้าต้องการทดสอบ input หลายชุด ให้แนบ CSV หรือ JSON ใน Collection Runner แต่ละ row จะกลายเป็นหนึ่ง iteration และเรียกใช้ variable ได้ เช่น {{username}}

ตัวอย่าง CSV:

username,password,expected_status
valid_user,correct_password,200
wrong_user,bad_password,401
empty_user,,400
Enter fullscreen mode Exit fullscreen mode

ใน request ใช้ variable:

{
  "username": "{{username}}",
  "password": "{{password}}"
}
Enter fullscreen mode Exit fullscreen mode

ใน Tests ตรวจ expected status:

pm.test("Status code matches expected status", function () {
    pm.response.to.have.status(Number(pm.iterationData.get("expected_status")));
});
Enter fullscreen mode Exit fullscreen mode

วิธีนี้ช่วยให้ request เดียวทดสอบหลายกรณีได้โดยไม่ต้อง copy request ซ้ำ อ่านเพิ่มเติมได้ที่ การทดสอบ API ที่ขับเคลื่อนด้วยข้อมูลโดยใช้ CSV และ JSON

ถ้าต้องการรัน collection เดียวกันใน CI โดยไม่มี GUI ให้ใช้ Newman ซึ่งเป็น CLI runner ของ Postman ดูรายละเอียดเพิ่มเติมได้ที่ Newman กับ Postman

รัน Postman test ใน CI ด้วย Newman

Newman ใช้รัน Postman collection จาก command line ได้ เหมาะกับ GitHub Actions, GitLab CI, Jenkins หรือ pipeline อื่น ๆ

ติดตั้ง Newman:

npm install -g newman
Enter fullscreen mode Exit fullscreen mode

รัน collection:

newman run collection.json -e environment.json
Enter fullscreen mode Exit fullscreen mode

ถ้ามี test fail Newman จะ exit ด้วย non-zero code ทำให้ CI job fail ได้โดยอัตโนมัติ

ตัวอย่าง GitHub Actions แบบพื้นฐาน:

name: API Tests

on:
  push:
    branches:
      - main

jobs:
  postman-tests:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Install Newman
        run: npm install -g newman

      - name: Run Postman collection
        run: newman run collection.json -e environment.json
Enter fullscreen mode Exit fullscreen mode

อ่านเพิ่มเติมได้ที่ การทำให้การทดสอบ API เป็นอัตโนมัติใน CI/CD

จุดที่ Postman เริ่มมีข้อจำกัด

Postman เหมาะกับ exploratory testing และ test suite ขนาดเล็กถึงกลาง แต่เมื่อโปรเจกต์โตขึ้นมักเจอข้อจำกัดหลัก ๆ สองเรื่อง:

  1. Assertions ต้องเขียนด้วย JavaScript

    ทีม QA หรือคนที่ไม่ถนัด code อาจต้องใช้เวลาเรียนรู้เพิ่ม

  2. API design, testing, mocking และ docs อาจแยกกันอยู่

    ถ้า spec, test และ docs ไม่ได้ใช้ source เดียวกัน อาจเกิด drift ได้ เช่น docs บอกอย่างหนึ่ง แต่ test เช็คอีกอย่าง

Apidog เป็นแพลตฟอร์ม API แบบครบวงจรที่ช่วยรวมการออกแบบ ดีบัก mock test และ documentation ไว้ใน workflow เดียวกัน และสามารถ import Postman collection ได้โดยตรง จึงไม่จำเป็นต้องเริ่มใหม่ทั้งหมด นอกจากนี้ยังรองรับการสร้าง assertion แบบ visual โดยไม่ต้องเขียน code ในกรณีที่ทีมต้องการ workflow ที่เข้าถึงง่ายขึ้น

ถ้ากำลังเปรียบเทียบตัวเลือกอื่น อ่านต่อได้ที่ ทางเลือก Postman ที่ดีที่สุดสำหรับการทดสอบ API หรือ ดาวน์โหลด Apidog เพื่อนำเข้า collection ที่มีอยู่แล้วลองเทียบ workflow โดยตรง

ไม่ได้หมายความว่าต้องเลิกใช้ Postman ทันที Postman ยังเป็นเครื่องมือที่แข็งแรงมาก โดยเฉพาะสำหรับการตรวจสอบอย่างรวดเร็ว ทีมที่ใช้ Postman อยู่แล้วสามารถเริ่มจากการจัด collection, เพิ่ม assertions และเชื่อม CI ก่อน จากนั้นค่อยพิจารณาเครื่องมืออื่นเมื่อ workflow เริ่มซับซ้อนขึ้น

คำถามที่พบบ่อย

ฉันต้องเขียนโค้ดเพื่อทดสอบ API ใน Postman หรือไม่?

ถ้าแค่ส่ง request และดู response ไม่จำเป็นต้องเขียนโค้ด แต่ถ้าต้องการ automated assertions ต้องเขียน JavaScript ใน Tests อย่างน้อยเล็กน้อย โดยใช้ object pm ของ Postman คุณสามารถเริ่มจาก Snippets ที่ Postman มีให้ แล้วปรับตาม endpoint ของคุณ

Collection และ Environment ใน Postman ต่างกันอย่างไร?

Collection คือชุดของ request และ tests ที่จัดกลุ่มเข้าด้วยกัน ส่วน Environment คือชุดของ variables เช่น base_url หรือ auth_token

พูดสั้น ๆ:

  • Collection = สิ่งที่คุณจะส่ง
  • Environment = ค่าที่เปลี่ยนตาม target เช่น staging, production หรือ local

คุณสามารถใช้ collection เดียวกันกับหลาย environment ได้

ฉันจะรัน Postman test อัตโนมัติใน CI ได้อย่างไร?

ใช้ Newman โดย export collection และ environment เป็น JSON จากนั้นรัน:

newman run collection.json -e environment.json
Enter fullscreen mode Exit fullscreen mode

ถ้า test ใด fail Newman จะส่ง exit code ที่ไม่ใช่ศูนย์ ทำให้ CI pipeline ตรวจจับความล้มเหลวได้

Postman ทดสอบ API ได้มากกว่า REST หรือไม่?

ได้ Postman เวอร์ชันใหม่รองรับ GraphQL, gRPC, WebSocket และ SOAP นอกเหนือจาก HTTP/REST ทั่วไป แต่รูปแบบการตั้งค่า request จะแตกต่างกันตาม protocol

request หนึ่งควรมี assertion กี่รายการ?

ควรมีเท่าที่จำเป็นเพื่อยืนยันว่า response ถูกต้อง โดยทั่วไปเริ่มจาก:

  • status code
  • response time
  • required fields
  • ค่าที่ client ต้องใช้จริง

หลีกเลี่ยงการ assert ทุก field โดยไม่จำเป็น เพราะจะทำให้ test เปราะและ fail ง่ายเมื่อมีการเปลี่ยนแปลงเล็กน้อย เก็บแต่ละ pm.test ให้ตรวจ expectation เดียวเพื่อให้ debug ได้ง่ายขึ้น

Top comments (0)