Postman เป็นหนึ่งในเครื่องมือที่นักพัฒนาใช้บ่อยที่สุดสำหรับส่ง HTTP request และตรวจสอบพฤติกรรมของ API ตั้งแต่การลอง GET แบบเร็ว ๆ ไปจนถึงการรัน test suite ใน CI ถ้าคุณสร้าง ดูแล หรือ consume API คุณมีโอกาสสูงที่จะต้องใช้ Postman ใน workflow ประจำวัน
คู่มือนี้สรุปวิธีทดสอบ API ใน Postman แบบลงมือทำจริง: ส่ง request, ตรวจ response, เขียน assertions ใน Tests, ตั้ง environments เพื่อสลับ staging/production และรันทั้ง collection ด้วย Collection Runner ตัวอย่างใช้ public API เพื่อให้ทำตามได้ทันทีโดยไม่ต้องตั้ง backend เอง
ตั้งค่า Postman และส่ง request แรก
ดาวน์โหลด Postman จาก เว็บไซต์ทางการ แล้วติดตั้งแอปเดสก์ท็อป คุณสามารถใช้งาน local ได้โดยไม่ต้องมีบัญชี แต่การลงชื่อเข้าใช้จะช่วย sync collections ระหว่างอุปกรณ์
ขั้นตอนเริ่มต้น:
- เปิด Postman
- คลิก New
- เลือก HTTP Request
- เลือก method เป็น
GET - ใส่ URL ต่อไปนี้
GET https://jsonplaceholder.typicode.com/users/1
คลิก Send แล้วดู response panel ซึ่งจะแสดง:
- response body
- status code เช่น
200 OK - response time
- response size
- มุมมอง body แบบ Pretty, Raw และ Preview
สำหรับ POST ให้เปลี่ยน method เป็น POST จากนั้นไปที่แท็บ Body:
- เลือก raw
- เลือก format เป็น JSON
- ใส่ payload
{
"name": "Maria Chen",
"email": "maria.chen@example.com"
}
เมื่อเลือก body เป็น JSON แล้ว Postman จะเพิ่ม header เช่น Content-Type: application/json ให้โดยอัตโนมัติ ถ้า API ต้องการ header อื่น เช่น Authorization ให้เพิ่มในแท็บ Headers
ถ้าคุณยังไม่แน่ใจว่าควรคาดหวัง status code แบบใดในแต่ละกรณี อ่านเพิ่มเติมได้ที่ รหัสสถานะ HTTP ที่ REST API ควรใช้
จัด request เป็น collection
request เดี่ยวเหมาะกับการตรวจแบบเร็ว ๆ แต่การทดสอบ API จริงมักเป็น flow หลายขั้นตอน เช่น:
- สร้างผู้ใช้
- ดึงข้อมูลผู้ใช้
- อัปเดตผู้ใช้
- ลบผู้ใช้
ใน Postman ให้จัดกลุ่ม request เหล่านี้ด้วย Collection
วิธีสร้าง collection:
- เปิดแถบ Collections
- คลิกไอคอน +
- ตั้งชื่อ เช่น
User API smoke tests - บันทึก request ด้วย Ctrl/Cmd + S
- ตั้งชื่อ request ให้สื่อความหมาย เช่น
Get user by ID
คุณยังสามารถสร้าง folder ภายใน collection เพื่อแยกประเภท request เช่น:
User API smoke tests
├── Auth
│ └── Login
├── Users
│ ├── Create user
│ ├── Get user
│ ├── Update user
│ └── Delete user
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);
});
การใส่ logic ที่ใช้ซ้ำไว้ระดับ collection จะช่วยลด duplication ในแต่ละ request
เขียน test ในแท็บ Tests
การส่ง request บอกว่า API ตอบอะไรกลับมา ส่วน test บอกว่า response นั้น “ถูกต้องหรือไม่” Postman รัน JavaScript หลังจากได้รับ response แล้ว โดยใช้ object หลักชื่อ pm
รูปแบบพื้นฐานคือ:
pm.test("ชื่อ test", function () {
// assertion
});
ตัวอย่าง 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");
});
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);
หลังคลิก 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:
- เปิดเมนู environments
- สร้าง environment ชื่อ
Staging - เพิ่ม variable ชื่อ
base_url - ตั้งค่าเป็น
https://jsonplaceholder.typicode.com
จากนั้นแก้ request เป็น:
GET {{base_url}}/users/1
เมื่อเลือก 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);
});
request ถัดไปสามารถใช้ token ได้ใน header:
Authorization: Bearer {{auth_token}}
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
ขั้นตอน:
- เปิด collection
- คลิก Run หรือเลือกเมนูสามจุดแล้วคลิก Run collection
- เลือก environment
- กำหนดจำนวน iterations
- แนบ data file ถ้าต้องการ
- คลิก Run
Runner จะส่ง request จากบนลงล่างและรัน test ของแต่ละ request
ลำดับ request สำคัญมาก เช่น:
1. Login
2. Create user
3. Get user
4. Update user
5. Delete user
ถ้า 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
ใน request ใช้ variable:
{
"username": "{{username}}",
"password": "{{password}}"
}
ใน Tests ตรวจ expected status:
pm.test("Status code matches expected status", function () {
pm.response.to.have.status(Number(pm.iterationData.get("expected_status")));
});
วิธีนี้ช่วยให้ 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
รัน collection:
newman run collection.json -e environment.json
ถ้ามี 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
อ่านเพิ่มเติมได้ที่ การทำให้การทดสอบ API เป็นอัตโนมัติใน CI/CD
จุดที่ Postman เริ่มมีข้อจำกัด
Postman เหมาะกับ exploratory testing และ test suite ขนาดเล็กถึงกลาง แต่เมื่อโปรเจกต์โตขึ้นมักเจอข้อจำกัดหลัก ๆ สองเรื่อง:
Assertions ต้องเขียนด้วย JavaScript
ทีม QA หรือคนที่ไม่ถนัด code อาจต้องใช้เวลาเรียนรู้เพิ่ม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
ถ้า 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)