Insomnia คือไคลเอนต์ API จาก Kong สำหรับส่งคำขอ ตรวจสอบการตอบกลับ และทดสอบ API ในเครื่องมือเดียว รองรับ HTTP, REST, GraphQL, gRPC, SOAP และ WebSocket เหมาะกับนักพัฒนาที่ต้องการเครื่องมือเบากว่า IDE ขนาดใหญ่ แต่ยังทำงานทดสอบ API ได้จริง
บทความนี้สรุปขั้นตอนทดสอบ API ด้วย Insomnia แบบลงมือทำ: สร้างคอลเล็กชันคำขอ, ส่ง request, ตรวจ response, ตั้งค่า environment, ใช้ตัวแปรแทน URL และ token, เขียน assertion ด้วย test suite และรันผ่าน command line ด้วย Inso ตัวอย่างใช้ API สาธารณะเพื่อให้ทดลองตามได้ทันที
ติดตั้ง Insomnia และสร้างคำขอแรก
ดาวน์โหลด Insomnia จาก เว็บไซต์ทางการของ Kong แล้วติดตั้งตามระบบปฏิบัติการของคุณ เมื่อเปิดครั้งแรก Insomnia อาจถามให้ลงชื่อเข้าใช้ คุณสามารถเลือกทำงานแบบโลคอลได้หากไม่ต้องการซิงค์ข้อมูลขึ้นคลาวด์
Insomnia จัดงานหลักเป็น Collection และ Document สำหรับการทดสอบ API ให้เริ่มจาก Collection:
- เปิด Dashboard
- คลิก Create
- เลือก Request Collection
- ตั้งชื่อ เช่น
User API Tests - คลิกปุ่ม +
- เลือก HTTP Request
สร้างคำขอแรกด้วย API สาธารณะ JSONPlaceholder:
GET https://jsonplaceholder.typicode.com/users/1
คลิก Send แล้วตรวจสิ่งต่อไปนี้ในแผง response:
- HTTP status code เช่น
200 - response body
- response time
- response size
- JSON ที่ถูก format ให้อ่านง่าย
ถ้า response มีขนาดใหญ่ คุณสามารถใช้ JSONPath หรือ XPath เพื่อกรองข้อมูลเฉพาะส่วนที่ต้องการตรวจสอบได้
กำหนด Method, Query, Header, Body และ Auth
สำหรับ API จริง คุณมักต้องตั้งค่ามากกว่า URL และ method ใน Insomnia ให้ใช้แท็บใต้แถบ URL เพื่อจัดการ request แต่ละส่วน
ส่ง JSON Body
สำหรับ POST ให้เลือก method เป็น POST แล้วไปที่แท็บ Body เลือกชนิดเป็น JSON จากนั้นใส่ payload:
{
"name": "Daniel Okafor",
"email": "daniel.okafor@example.com"
}
เมื่อเลือก body เป็น JSON Insomnia จะตั้ง header Content-Type: application/json ให้โดยอัตโนมัติ
เพิ่ม Query Parameter
ใช้แท็บ Query เพื่อเพิ่ม query string โดยไม่ต้องแก้ URL เอง เช่น:
| Name | Value |
|---|---|
| page | 1 |
| limit | 20 |
ข้อดีคือเปิด/ปิด parameter แต่ละตัวได้ และ URL ยังอ่านง่ายเมื่อมี parameter จำนวนมาก
เพิ่ม Header
ใช้แท็บ Headers สำหรับค่าที่ API ต้องการ เช่น:
Accept: application/json
X-Request-Id: test-001
ตั้งค่า Authentication
ไปที่แท็บ Auth แล้วเลือก schema ที่ API ใช้ เช่น:
- Bearer Token
- Basic Auth
- API Key
- OAuth 1.0 / 2.0
- AWS IAM
สำหรับ API ที่ใช้ bearer token ให้เลือก Bearer Token แล้วใส่ token โดยตรง หรือดีกว่านั้นให้อ้างอิงจาก environment variable เพื่อไม่ hard-code ค่า secret ลงใน request
ตัวอย่าง:
{{ _.auth_token }}
หากต้องการทบทวนว่า REST API ควรตอบ status code แบบใด ดูคู่มือเรื่อง รหัสสถานะ HTTP ที่ REST API ควรใช้
ตั้งค่า Environment และตัวแปร
Environment ช่วยให้คุณไม่ต้องเขียนค่าเดิมซ้ำ เช่น base URL, token หรือค่า config ของแต่ละ environment
ตัวอย่าง use case:
- local
- staging
- production
ใน Insomnia ให้ทำดังนี้:
- คลิก dropdown ของ environment ใกล้ด้านบนของ sidebar
- เลือก Manage Environments
- เพิ่มค่าใน Base Environment
- สร้าง sub-environment สำหรับแต่ละเป้าหมาย
ตัวอย่าง environment:
{
"base_url": "https://jsonplaceholder.typicode.com",
"auth_token": "your-token-here"
}
จากนั้นแก้ URL ของ request ให้ใช้ตัวแปร:
GET {{ _.base_url }}/users/1
เมื่อสลับ environment จาก dropdown ทุก request ที่อ้างอิงตัวแปรจะเปลี่ยนค่าตาม environment นั้นทันที
ใช้ Template Tag เพื่อเชื่อม request
Insomnia รองรับ template tags สำหรับสร้างหรือดึงค่าระหว่าง request เช่น:
- timestamp
- UUID
- response body จาก request ก่อนหน้า
- token จาก login response
ตัวอย่าง flow ที่ใช้บ่อย:
- ส่ง request login
- ดึงค่า token จาก response ด้วย JSONPath เช่น
$.token - ใส่ token นั้นใน header
Authorizationของ request ถัดไป
แนวทางนี้ช่วยให้ chain request ได้โดยไม่ต้องเขียน script เชื่อมเอง เหมาะกับกรณีที่ API ต้อง login ก่อนเรียก endpoint ที่มีการป้องกัน
สำหรับการจัดกลุ่มกรณีทดสอบเพิ่มเติม ดูตัวอย่าง กรณีทดสอบ API
เขียน Test Suite และ Assertion
การกด Send ช่วยให้ดู response ได้ทันที แต่ถ้าต้องการตรวจสอบซ้ำแบบอัตโนมัติ ให้ใช้ Test Suite หรือบางเวอร์ชันอาจแสดงเป็น Unit Tests
ขั้นตอนพื้นฐาน:
- เปิด collection
- ไปที่มุมมอง Tests
- สร้าง Test Suite
- เพิ่ม test case
- เลือก request ที่ test case นั้นต้องรัน
- เขียน JavaScript assertion
- คลิก Run Tests
Insomnia ใช้ Chai assertion และมี helper สำหรับส่ง request
ตัวอย่างตรวจ status code:
const response = await insomnia.send();
expect(response.status).to.equal(200);
ตัวอย่างตรวจ response body:
const response = await insomnia.send();
const body = JSON.parse(response.data);
expect(response.status).to.equal(200);
expect(body.email).to.equal("daniel.okafor@example.com");
expect(body).to.have.property("id");
หาก response เป็น JSON array คุณสามารถตรวจจำนวนรายการได้:
const response = await insomnia.send();
const body = JSON.parse(response.data);
expect(response.status).to.equal(200);
expect(body).to.be.an("array");
expect(body.length).to.be.greaterThan(0);
หรือถ้าต้องการตรวจ header:
const response = await insomnia.send();
expect(response.headers["content-type"]).to.include("application/json");
จัดโครงสร้าง Test Suite ให้ดูแลง่าย
เมื่อ test เพิ่มขึ้น ให้แบ่ง suite ตาม resource หรือ feature เช่น:
User API TestsPost API TestsAuth API Tests
ภายในแต่ละ suite ให้ test หนึ่งรายการตรวจพฤติกรรมเดียว เช่น:
- happy path
- not found
- validation error
- unauthorized
- forbidden
ตัวอย่างชื่อ test ที่อ่านแล้วรู้ปัญหาทันที:
GET /users/1 returns 200 and user profile
GET /users/999999 returns 404
POST /users rejects invalid email
หลักสำคัญคือเมื่อ test fail ชื่อ test ควรบอกได้ทันทีว่า behavior ไหนเสีย โดยไม่ต้องอ่าน assertion ทั้งหมด
อ่านเพิ่มเกี่ยวกับ การยืนยัน API และการจัดโครงสร้าง ชุดทดสอบสำหรับ API test automation
รัน Test จาก Command Line ด้วย Inso
GUI เหมาะกับการ debug ระหว่างพัฒนา แต่ถ้าต้องการรันใน CI/CD ให้ใช้ Inso ซึ่งเป็น command line companion ของ Insomnia
หลังจาก export หรือ sync collection แล้ว สามารถรัน test suite จาก terminal ได้:
inso run test "User API tests"
ถ้ามี test ใดล้มเหลว Inso จะคืนค่า exit code ที่ไม่เป็นศูนย์ ซึ่งเหมาะกับ CI pipeline เพราะระบบสามารถ mark build ว่าล้มเหลวได้ทันที
ตัวอย่างการใช้งานใน pipeline:
inso run test "User API tests"
แนวทางนี้ช่วยให้ตรวจจับ endpoint ที่เสียก่อน merge หรือ deploy ไป production
Inso ยังใช้ lint API specification และสร้าง test report ในรูปแบบมาตรฐานได้ จึงเหมาะกับ workflow ที่ต้องการตรวจทั้ง contract และ behavior ของ API
ดูตัวอย่างรูปแบบ CI/CD เพิ่มเติมได้ที่ การทำให้การทดสอบ API เป็นไปโดยอัตโนมัติใน CI/CD
การเปลี่ยนแปลง Cloud ใน Insomnia 8 และทางเลือกอื่น
Insomnia 8 เปลี่ยนไปใช้แนวทาง cloud-first มากขึ้น โดยค่าเริ่มต้นจะผลักดันให้ผู้ใช้สร้างบัญชี Kong และจัดเก็บโปรเจกต์ในคลาวด์ การเปลี่ยนแปลงนี้ทำให้ผู้ใช้บางกลุ่มไม่พอใจ เพราะเวอร์ชันก่อนหน้ารองรับการใช้งานแบบโลคอลและออฟไลน์ได้ชัดเจนกว่า
เวอร์ชันต่อมาได้เพิ่มตัวเลือกแบบโลคอลหรือ “Scratch Pad” ให้ชัดเจนขึ้น แต่เหตุการณ์นี้ทำให้หลายทีมเริ่มประเมินเครื่องมืออื่น โดยเฉพาะทีมที่มีข้อกำหนดด้านข้อมูลว่า project หรือ test data ไม่ควรออกนอกองค์กร
หากอยู่ในกรณีนี้ Apidog เป็นอีกทางเลือกหนึ่ง เป็นแพลตฟอร์ม API แบบ all-in-one สำหรับ:
- API design
- debugging
- mocking
- testing
- documentation
Apidog สามารถนำเข้าไฟล์ Insomnia ที่ export ออกมาได้ ช่วยให้ย้ายหรือทดลองเปรียบเทียบได้โดยไม่ต้องเริ่มใหม่ทั้งหมด นอกจากนี้ยังสร้าง assertion แบบ visual ได้โดยไม่ต้องเขียน JavaScript แต่ยังรองรับ script เมื่อจำเป็น
คุณสามารถ ดาวน์โหลด Apidog แล้วนำเข้า collection จาก Insomnia เพื่อเปรียบเทียบ workflow ได้ หากต้องการดูตัวเลือกอื่นเพิ่มเติม บทความ เครื่องมือทดสอบ API ออนไลน์ฟรี รวบรวมเครื่องมือหลายประเภทไว้ให้เปรียบเทียบ
Insomnia ยังเป็นไคลเอนต์ที่แข็งแรงสำหรับนักพัฒนาเดี่ยวและทีมขนาดเล็กที่ต้องการอินเทอร์เฟซเรียบง่าย เริ่มใช้งานเร็ว และไม่ซับซ้อน การเลือกเครื่องมือที่เหมาะสมขึ้นอยู่กับ workflow ของทีม และคุณต้องการรวมวงจรชีวิต API ไว้ในเครื่องมือเดียวมากน้อยแค่ไหน
คำถามที่พบบ่อย
Insomnia ใช้งานฟรีหรือไม่?
Insomnia มีแพ็กเกจฟรีที่ครอบคลุมการใช้งานส่วนบุคคล เช่น การส่ง request และรัน test suite ในเครื่อง แผนแบบชำระเงินเพิ่มความสามารถด้าน collaboration และ cloud sync สำหรับทีม คุณยังสามารถใช้ไคลเอนต์หลักได้โดยไม่เสียค่าใช้จ่าย และเวอร์ชันล่าสุดมีตัวเลือกสำหรับทำงานแบบโลคอลหากไม่ต้องการ cloud sync
Insomnia รองรับโปรโตคอลใดบ้าง?
Insomnia รองรับ HTTP, REST, GraphQL, gRPC, SOAP และ WebSocket วิธีตั้งค่า request จะแตกต่างกันตามโปรโตคอล แต่การตรวจ response และการทดสอบ request ที่ใช้ HTTP สามารถทำได้ใน workflow เดียวกัน
เขียน assertion ใน Insomnia อย่างไร?
ใช้ Test Suite ใน collection แล้วเพิ่ม test case ที่ผูกกับ request จากนั้นเขียน JavaScript โดยเรียก:
const response = await insomnia.send();
แล้วใช้ expect แบบ Chai เพื่อตรวจ status, header หรือ body เช่น:
expect(response.status).to.equal(200);
Insomnia 8 เปลี่ยนอะไรบ้าง?
Insomnia 8 เปลี่ยนค่าเริ่มต้นไปทาง cloud-first มากขึ้น โดยกระตุ้นให้ผู้ใช้ลงชื่อเข้าใช้บัญชี Kong และ sync project ไปยังคลาวด์ ผู้ใช้บางส่วนไม่ชอบการเปลี่ยนจากแอปแบบโลคอลเป็นหลักไปสู่ flow ที่พึ่ง cloud มากขึ้น ภายหลังมีการเพิ่มตัวเลือกแบบโลคอลให้ชัดเจนขึ้น แต่การเปลี่ยนแปลงนี้ทำให้หลายทีมเริ่มประเมินทางเลือกอื่น
รัน Insomnia test ใน CI pipeline ได้หรือไม่?
ได้ ให้ใช้ Inso จาก command line หลังจาก export หรือ sync collection แล้วรัน:
inso run test "<ชื่อชุดทดสอบ>"
ถ้า test fail Inso จะคืนค่า exit code ที่ไม่เป็นศูนย์ ทำให้ CI สามารถ fail build ได้อัตโนมัติเมื่อ API test มีปัญหา
Top comments (0)