DEV Community

Cover image for วิธีใช้ Insomnia ทดสอบ API
Thanawat Wongchai
Thanawat Wongchai

Posted on • Originally published at apidog.com

วิธีใช้ Insomnia ทดสอบ API

Insomnia คือไคลเอนต์ API จาก Kong สำหรับส่งคำขอ ตรวจสอบการตอบกลับ และทดสอบ API ในเครื่องมือเดียว รองรับ HTTP, REST, GraphQL, gRPC, SOAP และ WebSocket เหมาะกับนักพัฒนาที่ต้องการเครื่องมือเบากว่า IDE ขนาดใหญ่ แต่ยังทำงานทดสอบ API ได้จริง

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

บทความนี้สรุปขั้นตอนทดสอบ API ด้วย Insomnia แบบลงมือทำ: สร้างคอลเล็กชันคำขอ, ส่ง request, ตรวจ response, ตั้งค่า environment, ใช้ตัวแปรแทน URL และ token, เขียน assertion ด้วย test suite และรันผ่าน command line ด้วย Inso ตัวอย่างใช้ API สาธารณะเพื่อให้ทดลองตามได้ทันที

ติดตั้ง Insomnia และสร้างคำขอแรก

ดาวน์โหลด Insomnia จาก เว็บไซต์ทางการของ Kong แล้วติดตั้งตามระบบปฏิบัติการของคุณ เมื่อเปิดครั้งแรก Insomnia อาจถามให้ลงชื่อเข้าใช้ คุณสามารถเลือกทำงานแบบโลคอลได้หากไม่ต้องการซิงค์ข้อมูลขึ้นคลาวด์

Insomnia จัดงานหลักเป็น Collection และ Document สำหรับการทดสอบ API ให้เริ่มจาก Collection:

  1. เปิด Dashboard
  2. คลิก Create
  3. เลือก Request Collection
  4. ตั้งชื่อ เช่น User API Tests
  5. คลิกปุ่ม +
  6. เลือก HTTP Request

สร้างคำขอแรกด้วย API สาธารณะ JSONPlaceholder:

GET https://jsonplaceholder.typicode.com/users/1
Enter fullscreen mode Exit fullscreen mode

คลิก 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"
}
Enter fullscreen mode Exit fullscreen mode

เมื่อเลือก 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
Enter fullscreen mode Exit fullscreen mode

ตั้งค่า 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 }}
Enter fullscreen mode Exit fullscreen mode

หากต้องการทบทวนว่า REST API ควรตอบ status code แบบใด ดูคู่มือเรื่อง รหัสสถานะ HTTP ที่ REST API ควรใช้

ตั้งค่า Environment และตัวแปร

Environment ช่วยให้คุณไม่ต้องเขียนค่าเดิมซ้ำ เช่น base URL, token หรือค่า config ของแต่ละ environment

ตัวอย่าง use case:

  • local
  • staging
  • production

ใน Insomnia ให้ทำดังนี้:

  1. คลิก dropdown ของ environment ใกล้ด้านบนของ sidebar
  2. เลือก Manage Environments
  3. เพิ่มค่าใน Base Environment
  4. สร้าง sub-environment สำหรับแต่ละเป้าหมาย

ตัวอย่าง environment:

{
  "base_url": "https://jsonplaceholder.typicode.com",
  "auth_token": "your-token-here"
}
Enter fullscreen mode Exit fullscreen mode

จากนั้นแก้ URL ของ request ให้ใช้ตัวแปร:

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

เมื่อสลับ environment จาก dropdown ทุก request ที่อ้างอิงตัวแปรจะเปลี่ยนค่าตาม environment นั้นทันที

ใช้ Template Tag เพื่อเชื่อม request

Insomnia รองรับ template tags สำหรับสร้างหรือดึงค่าระหว่าง request เช่น:

  • timestamp
  • UUID
  • response body จาก request ก่อนหน้า
  • token จาก login response

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

  1. ส่ง request login
  2. ดึงค่า token จาก response ด้วย JSONPath เช่น $.token
  3. ใส่ token นั้นใน header Authorization ของ request ถัดไป

แนวทางนี้ช่วยให้ chain request ได้โดยไม่ต้องเขียน script เชื่อมเอง เหมาะกับกรณีที่ API ต้อง login ก่อนเรียก endpoint ที่มีการป้องกัน

สำหรับการจัดกลุ่มกรณีทดสอบเพิ่มเติม ดูตัวอย่าง กรณีทดสอบ API

เขียน Test Suite และ Assertion

การกด Send ช่วยให้ดู response ได้ทันที แต่ถ้าต้องการตรวจสอบซ้ำแบบอัตโนมัติ ให้ใช้ Test Suite หรือบางเวอร์ชันอาจแสดงเป็น Unit Tests

ขั้นตอนพื้นฐาน:

  1. เปิด collection
  2. ไปที่มุมมอง Tests
  3. สร้าง Test Suite
  4. เพิ่ม test case
  5. เลือก request ที่ test case นั้นต้องรัน
  6. เขียน JavaScript assertion
  7. คลิก Run Tests

Insomnia ใช้ Chai assertion และมี helper สำหรับส่ง request

ตัวอย่างตรวจ status code:

const response = await insomnia.send();

expect(response.status).to.equal(200);
Enter fullscreen mode Exit fullscreen mode

ตัวอย่างตรวจ 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");
Enter fullscreen mode Exit fullscreen mode

หาก 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);
Enter fullscreen mode Exit fullscreen mode

หรือถ้าต้องการตรวจ header:

const response = await insomnia.send();

expect(response.headers["content-type"]).to.include("application/json");
Enter fullscreen mode Exit fullscreen mode

จัดโครงสร้าง Test Suite ให้ดูแลง่าย

เมื่อ test เพิ่มขึ้น ให้แบ่ง suite ตาม resource หรือ feature เช่น:

  • User API Tests
  • Post API Tests
  • Auth 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
Enter fullscreen mode Exit fullscreen mode

หลักสำคัญคือเมื่อ 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"
Enter fullscreen mode Exit fullscreen mode

ถ้ามี test ใดล้มเหลว Inso จะคืนค่า exit code ที่ไม่เป็นศูนย์ ซึ่งเหมาะกับ CI pipeline เพราะระบบสามารถ mark build ว่าล้มเหลวได้ทันที

ตัวอย่างการใช้งานใน pipeline:

inso run test "User API tests"
Enter fullscreen mode Exit fullscreen mode

แนวทางนี้ช่วยให้ตรวจจับ 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();
Enter fullscreen mode Exit fullscreen mode

แล้วใช้ expect แบบ Chai เพื่อตรวจ status, header หรือ body เช่น:

expect(response.status).to.equal(200);
Enter fullscreen mode Exit fullscreen mode

Insomnia 8 เปลี่ยนอะไรบ้าง?

Insomnia 8 เปลี่ยนค่าเริ่มต้นไปทาง cloud-first มากขึ้น โดยกระตุ้นให้ผู้ใช้ลงชื่อเข้าใช้บัญชี Kong และ sync project ไปยังคลาวด์ ผู้ใช้บางส่วนไม่ชอบการเปลี่ยนจากแอปแบบโลคอลเป็นหลักไปสู่ flow ที่พึ่ง cloud มากขึ้น ภายหลังมีการเพิ่มตัวเลือกแบบโลคอลให้ชัดเจนขึ้น แต่การเปลี่ยนแปลงนี้ทำให้หลายทีมเริ่มประเมินทางเลือกอื่น

รัน Insomnia test ใน CI pipeline ได้หรือไม่?

ได้ ให้ใช้ Inso จาก command line หลังจาก export หรือ sync collection แล้วรัน:

inso run test "<ชื่อชุดทดสอบ>"
Enter fullscreen mode Exit fullscreen mode

ถ้า test fail Inso จะคืนค่า exit code ที่ไม่เป็นศูนย์ ทำให้ CI สามารถ fail build ได้อัตโนมัติเมื่อ API test มีปัญหา

Top comments (0)