Insomnia คือไคลเอนต์ API ที่สร้างโดย Kong สำหรับการส่งคำขอและตรวจสอบการตอบกลับ เป็นที่รู้จักจากอินเทอร์เฟซที่สะอาดตา ปราศจากสิ่งรบกวน และรองรับ HTTP, REST, GraphQL, gRPC, SOAP และ WebSocket ในที่เดียว นักพัฒนาเลือกใช้เมื่อต้องการเครื่องมือที่เบากว่าเครื่องมือสไตล์ IDE หนักๆ แต่ยังคงสามารถทำงานทดสอบจริงได้
คู่มือนี้แสดงวิธีการทดสอบ API ใน Insomnia ตั้งแต่ต้นจนจบ คุณจะสร้างคอลเล็กชันคำขอ, ส่งและตรวจสอบการตอบกลับ, ตั้งค่าสภาพแวดล้อมเพื่อให้คุณสามารถเปลี่ยน URL หลักและโทเค็นได้ และใช้คุณสมบัติชุดทดสอบเพื่อเขียนคำยืนยันที่ทำงานโดยอัตโนมัติ ตัวอย่างใช้ API สาธารณะเพื่อให้คุณสามารถทำตามได้ทันที
ติดตั้ง Insomnia และสร้างคำขอ
ดาวน์โหลด Insomnia จาก เว็บไซต์ทางการของ Kong และติดตั้งสำหรับแพลตฟอร์มของคุณ ในการเปิดตัวครั้งแรก Insomnia จะถามว่าคุณต้องการลงชื่อเข้าใช้หรือไม่ คุณสามารถเลือกที่จะทำงานภายในเครื่องได้โดยไม่ต้องมีบัญชีหากคุณต้องการ และ Insomnia จะเก็บข้อมูลของคุณไว้ในเครื่องของคุณ การซิงค์บนคลาวด์เป็นทางเลือกและเป็นสิ่งที่เปลี่ยนแปลงในเวอร์ชัน 8 ซึ่งเราจะกล่าวถึงด้านล่าง
Insomnia จัดการงานเป็น คอลเล็กชัน และ เอกสาร คลิก สร้าง (Create) ในแดชบอร์ดแล้วเลือก คอลเล็กชันคำขอ (Request Collection) ตั้งชื่อให้ชัดเจนเช่น “การทดสอบ User API” ภายในคอลเล็กชัน ให้คลิกปุ่ม + แล้วเลือก คำขอ HTTP (HTTP Request)
คำขอต้องการเมธอดและ URL เลือก GET และป้อนปลายทางจริง บริการ JSONPlaceholder ทำงานได้ดีสำหรับการฝึกฝน:
GET https://jsonplaceholder.typicode.com/users/1
คลิก ส่ง (Send) แผงด้านขวาจะแสดงเนื้อหาการตอบกลับ, รหัสสถานะ, เวลาตอบกลับ และขนาด Insomnia จัดรูปแบบ JSON โดยอัตโนมัติและให้คุณกรองเนื้อหาด้วย JSONPath หรือ XPath query ซึ่งสะดวกเมื่อการตอบกลับมีขนาดใหญ่
กำหนดค่าเมธอด, พารามิเตอร์ และการรับรองความถูกต้อง
สำหรับสิ่งใดที่นอกเหนือจากการอ่านง่ายๆ คุณจะตั้งค่าเพิ่มเติมในคำขอ Insomnia จัดกลุ่มสิ่งเหล่านี้ภายใต้แท็บใต้แถบ URL
แท็บ เนื้อหา (Body) จัดการเพย์โหลดคำขอ สำหรับ POST ให้เลือก JSON และป้อนข้อมูล:
{
"name": "Daniel Okafor",
"email": "daniel.okafor@example.com"
}
Insomnia ตั้งค่าส่วนหัว Content-Type ให้คุณเมื่อคุณเลือกประเภทเนื้อหา แท็บ คิวรี (Query) ให้คุณเพิ่มพารามิเตอร์สตริงคิวรีโดยไม่ต้องแก้ไข URL ด้วยตนเอง ซึ่งช่วยให้ URL ยาวอ่านง่ายและให้คุณเปิด/ปิดพารามิเตอร์แต่ละตัวได้ แท็บ ส่วนหัว (Headers) มีไว้สำหรับสิ่งอื่นใดที่ API คาดหวัง เช่น X-Request-Id ที่กำหนดเอง หรือส่วนหัว Accept เพื่อเจรจารูปแบบการตอบกลับ
แท็บ การรับรองความถูกต้อง (Auth) จัดการข้อมูลประจำตัว Insomnia รองรับรายการ Schema ที่ยาว: Bearer Token, Basic Auth, API Key, OAuth 1.0 และ 2.0, AWS IAM และอื่นๆ เลือก Schema ที่ API ของคุณใช้และกรอกข้อมูลในช่อง สำหรับ API ที่มีการป้องกันด้วยโทเค็น ให้เลือก Bearer Token และวางโทเค็น หรือที่ดีกว่าคืออ้างอิงตัวแปรสภาพแวดล้อมเพื่อไม่ให้โทเค็นถูกฮาร์ดโค้ด หากคุณไม่แน่ใจว่าควรรหัสสถานะใดกลับมา การอ้างอิงเกี่ยวกับ รหัสสถานะ HTTP ที่ REST API ควรใช้ เป็นคู่หูที่ดี
ตั้งค่าสภาพแวดล้อมและตัวแปร
สภาพแวดล้อมช่วยให้คุณหลีกเลี่ยงการทำซ้ำค่าและทำให้ง่ายต่อการสลับเป้าหมาย ใน Insomnia สภาพแวดล้อมคือออบเจกต์ JSON ของตัวแปรที่แนบมากับคอลเล็กชัน
คลิกดรอปดาวน์สภาพแวดล้อมใกล้กับด้านบนของแถบด้านข้างและเปิด จัดการสภาพแวดล้อม (Manage Environments) สภาพแวดล้อมพื้นฐาน (Base Environment) จะเก็บค่าที่ใช้ร่วมกัน เพิ่มสภาพแวดล้อมย่อยสำหรับแต่ละเป้าหมาย:
{
"base_url": "https://jsonplaceholder.typicode.com",
"auth_token": "your-token-here"
}
สร้างสภาพแวดล้อมย่อยที่สองสำหรับการผลิตด้วยค่าที่แตกต่างกัน อ้างอิงตัวแปรในคำขอใดๆ ด้วยไวยากรณ์เทมเพลต {{ _.base_url }} ดังนั้น URL จะกลายเป็น:
GET {{ _.base_url }}/users/1
สลับสภาพแวดล้อมที่ใช้งานอยู่จากดรอปดาวน์ และทุกคำขอที่ใช้ตัวแปรจะอัปเดต Insomnia ยังรองรับ แท็กเทมเพลต (template tags) ซึ่งเป็นฟังก์ชันขนาดเล็กที่คุณสามารถใส่ลงในช่องเพื่อสร้างการประทับเวลา, UUID หรือดึงค่าจากการตอบกลับก่อนหน้า ส่วนหลังช่วยให้คุณสามารถเชื่อมโยงคำขอได้ เช่น การจับโทเค็นจากการตอบกลับการเข้าสู่ระบบและนำไปใช้ในคำขอถัดไป
แท็กเทมเพลตการตอบกลับนั้นควรค่าแก่การพิจารณาให้ละเอียดยิ่งขึ้น เนื่องจากเป็นวิธีที่ Insomnia จัดการการพึ่งพาคำขอโดยไม่ต้องใช้สคริปต์ คุณเพิ่มแท็กที่ระบุว่า "ใช้เนื้อหาของคำขอเข้าสู่ระบบ ที่ JSONPath $.token" และใส่ลงในส่วนหัว Authorization ของทุกคำขอที่มีการป้องกัน เมื่อคุณเรียกใช้คำขอที่มีการป้องกัน Insomnia จะเรียกใช้คำขอเข้าสู่ระบบก่อนหากจำเป็น ดึงโทเค็นออกมา และแทนที่มัน ห่วงโซ่นี้ยังคงเป็นไปตามแบบประกาศ ดังนั้นจึงไม่มีโค้ดเชื่อมต่อให้ดูแล สำหรับแนวคิดที่กว้างขึ้นของการจัดกลุ่มการตรวจสอบที่เกี่ยวข้อง โปรดดูคำแนะนำในการ ตัวอย่างกรณีทดสอบ API
เขียนชุดทดสอบพร้อมกับคำยืนยัน
การส่งคำขอจะแสดงการตอบกลับให้คุณเห็น เพื่อตรวจสอบว่าการตอบกลับถูกต้องโดยอัตโนมัติ คุณจะใช้คุณสมบัติ ชุดทดสอบ (test suites) ของ Insomnia ซึ่งบางครั้งแสดงเป็นแท็บ การทดสอบหน่วย (Unit Tests) บนคอลเล็กชัน
เปิดคอลเล็กชันของคุณแล้วสลับไปที่มุมมอง การทดสอบ (Tests) สร้าง ชุดทดสอบ (test suite) จากนั้นเพิ่มการทดสอบแต่ละรายการลงไป การทดสอบแต่ละรายการเป็น JavaScript ขนาดเล็ก Insomnia ใช้ไลบรารีการยืนยัน Chai และให้ตัวช่วยในการส่งคำขอและดึงการตอบกลับ การทดสอบจะมีลักษณะดังนี้:
const response = await insomnia.send();
expect(response.status).to.equal(200);
คุณสามารถระบุได้แม่นยำยิ่งขึ้นโดยการแยกวิเคราะห์เนื้อหาและตรวจสอบฟิลด์:
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");
การทดสอบแต่ละรายการในชุดทดสอบจะกำหนดเป้าหมายคำขอจากคอลเล็กชันของคุณ ซึ่งเลือกจากดรอปดาวน์ ดังนั้นการทดสอบจึงทราบว่าจะต้องส่งอะไร คลิก เรียกใช้การทดสอบ (Run Tests) และ Insomnia จะเรียกใช้การทดสอบทุกรายการในชุดทดสอบ โดยแสดงว่าแต่ละรายการผ่านหรือไม่พร้อมเวลาที่ใช้ นี่คือการตรวจสอบการถดถอยของคุณ: เรียกใช้ชุดทดสอบหลังจากการเปลี่ยนแปลง และคุณจะเห็นทันทีว่า API ยังคงทำงานตามปกติหรือไม่
วิธีที่คุณจัดระเบียบชุดทดสอบมีความสำคัญเมื่อจำนวนเพิ่มขึ้น รูปแบบทั่วไปคือชุดทดสอบหนึ่งชุดต่อทรัพยากร ดังนั้นการทดสอบบทความทั้งหมดจะอยู่ด้วยกันและการทดสอบผู้ใช้ทั้งหมดจะอยู่ด้วยกัน ภายในชุดทดสอบ ให้การทดสอบแต่ละรายการเน้นไปที่พฤติกรรมเดียว: หนึ่งการทดสอบสำหรับกรณีปกติ (happy path), การทดสอบแยกต่างหากสำหรับกรณีไม่พบข้อมูล (not-found) และกรณีข้อผิดพลาดในการตรวจสอบ (validation-error) เมื่อการทดสอบล้มเหลว ชื่อและการจำกัดขอบเขตแคบๆ ของมันควรถามคุณว่าอะไรเสียโดยที่คุณไม่ต้องอ่านโค้ดการยืนยัน สำหรับการดูเชิงลึกเกี่ยวกับการเขียนการตรวจสอบที่ดี คู่มือเกี่ยวกับ การยืนยัน API อธิบายสิ่งที่ต้องยืนยันและสิ่งที่ต้องข้าม และบทความ ชุดทดสอบสำหรับการทำงานอัตโนมัติในการทดสอบ API ครอบคลุมการจัดโครงสร้างชุดทดสอบเมื่อมีการเติบโต
เรียกใช้จาก Command Line ด้วย Inso
GUI เหมาะสำหรับการพัฒนา แต่ระบบอัตโนมัติต้องการบางอย่างที่เป็นแบบ Headless Insomnia มาพร้อมกับโปรแกรมคู่หู Command Line ที่เรียกว่า Inso หลังจากส่งออกหรือซิงค์คอลเล็กชันของคุณ คุณสามารถเรียกใช้ชุดทดสอบของคุณจากเทอร์มินัลได้:
inso run test "User API tests"
Inso จะออกด้วยรหัสสถานะที่ไม่เป็นศูนย์หากการทดสอบใดๆ ล้มเหลว ซึ่งเป็นสิ่งที่ Pipeline ของ CI ต้องการอย่างแท้จริงเพื่อทำเครื่องหมายว่า Build เสียหาย คุณสามารถเชื่อมโยงสิ่งนี้เข้ากับ GitHub Actions หรือ Runner อื่นๆ เพื่อให้การทดสอบ Insomnia ของคุณทำงานทุกครั้งที่มีการ Push ทำให้สามารถตรวจจับ Endpoint ที่เสียได้ก่อนที่จะไปถึงเพื่อนร่วมทีมหรือ Production Inso ยังสามารถ Lint API Specification ของคุณและสร้างรายงานการทดสอบในรูปแบบมาตรฐาน ซึ่งทำให้มีประโยชน์นอกเหนือจากการเรียกใช้ชุดทดสอบ บทความเกี่ยวกับ การทำให้การทดสอบ API เป็นไปโดยอัตโนมัติใน CI/CD แสดงรูปแบบทั่วไป ซึ่งนำไปใช้กับ Inso ได้อย่างสะอาดหมดจด
การเปลี่ยนแปลงคลาวด์ในเวอร์ชัน 8 และทางเลือกอื่น
Insomnia 8 ได้เปลี่ยนไปใช้โมเดลที่เน้นคลาวด์เป็นอันดับแรก โดยค่าเริ่มต้นจะผลักดันให้ผู้ใช้สร้างบัญชี Kong และจัดเก็บโปรเจกต์ในคลาวด์ การตัดสินใจดังกล่าวทำให้บางส่วนของชุมชนรู้สึกผิดหวัง เนื่องจากเวอร์ชันก่อนหน้าเป็นแบบโลคอลและรองรับการใช้งานออฟไลน์ได้อย่างสมบูรณ์ เวอร์ชันต่อมาได้คืนค่าตัวเลือกแบบโลคอลเท่านั้นหรือ "Scratch Pad" ที่ชัดเจนยิ่งขึ้น แต่เหตุการณ์ดังกล่าวทำให้บางทีมมองหาทางเลือกอื่น โดยเฉพาะในสภาพแวดล้อมที่ข้อมูลไม่สามารถออกจากองค์กรได้
หากคุณอยู่ในกรณีดังกล่าว Apidog น่าสนใจ มันคือแพลตฟอร์ม API แบบ All-in-one ที่ครอบคลุมการออกแบบ, การดีบัก, การจำลอง, การทดสอบ และเอกสารประกอบ และมันสามารถนำเข้าไฟล์ Insomnia ที่ส่งออกได้โดยที่คุณไม่ต้องเริ่มต้นใหม่ Apidog ช่วยให้คุณสร้างคำยืนยันด้วยภาพโดยไม่ต้องเขียน JavaScript แต่ยังคงรองรับสคริปต์เมื่อคุณต้องการ เนื่องจากข้อกำหนด API, ข้อมูลทดสอบ และเซิร์ฟเวอร์จำลองใช้โปรเจกต์เดียวกัน การทดสอบของคุณจึงสอดคล้องกับสัญญาจริงแทนที่จะแตกต่างกัน คุณสามารถ ดาวน์โหลด Apidog และนำเข้าคอลเล็กชัน Insomnia เพื่อเปรียบเทียบเคียงข้างกัน สำหรับการสำรวจที่กว้างขึ้น รายการ เครื่องมือทดสอบ API ออนไลน์ฟรี ครอบคลุมตัวเลือกหลายอย่าง
Insomnia ยังคงเป็นไคลเอนต์ที่แข็งแกร่งและเน้นการใช้งานโดยเฉพาะสำหรับนักพัฒนาเดี่ยวและทีมขนาดเล็กที่ให้ความสำคัญกับอินเทอร์เฟซที่เรียบง่าย ปราศจากสิ่งรบกวน และเริ่มต้นใช้งานได้อย่างรวดเร็ว การเลือกที่เหมาะสมขึ้นอยู่กับวิธีการทำงานของทีมคุณ และคุณต้องการจัดการวงจรชีวิต API มากน้อยเพียงใดในที่เดียว แทนที่จะกระจายไปทั่วเครื่องมือต่างๆ
คำถามที่พบบ่อย
Insomnia ใช้งานฟรีหรือไม่?
Insomnia มีแพ็กเกจฟรีที่ครอบคลุมการใช้งานส่วนบุคคล รวมถึงการส่งคำขอและการเรียกใช้ชุดทดสอบในเครื่อง แผนแบบชำระเงินจะเพิ่มการทำงานร่วมกันเป็นทีมและขีดจำกัดการซิงค์บนคลาวด์ที่มากขึ้น คุณสามารถใช้ไคลเอนต์หลักได้โดยไม่ต้องเสียค่าใช้จ่าย และเวอร์ชันล่าสุดให้คุณทำงานแบบโลคอลได้อย่างสมบูรณ์หากคุณไม่ต้องการใช้การซิงค์บนคลาวด์
Insomnia รองรับโปรโตคอลใดบ้าง?
Insomnia จัดการ HTTP, REST, GraphQL, gRPC, SOAP และ WebSocket การตั้งค่าคำขอจะแตกต่างกันไปตามโปรโตคอล แต่การตรวจสอบการตอบกลับ และสำหรับคำขอที่ใช้ HTTP การยืนยันชุดทดสอบจะทำงานอย่างสอดคล้องกันในทุกโปรโตคอล
ฉันจะเขียนคำยืนยันใน Insomnia ได้อย่างไร?
ใช้คุณสมบัติชุดทดสอบ เปิดมุมมองการทดสอบ (Tests view) ในคอลเล็กชัน สร้างชุดทดสอบ (suite) และเพิ่มการทดสอบ (tests) การทดสอบแต่ละรายการเป็น JavaScript ที่เรียกใช้ insomnia.send() เพื่อรันคำขอ จากนั้นใช้การยืนยัน expect สไตล์ Chai กับสถานะ, ส่วนหัว หรือเนื้อหาที่แยกวิเคราะห์ เรียกใช้ชุดทดสอบทั้งหมดด้วยปุ่ม Run Tests
มีอะไรเปลี่ยนแปลงใน Insomnia 8 บ้าง?
Insomnia 8 เปลี่ยนไปใช้ค่าเริ่มต้นที่เน้นคลาวด์เป็นอันดับแรก โดยกระตุ้นให้ผู้ใช้ลงชื่อเข้าใช้บัญชี Kong และซิงค์โปรเจกต์ไปยังคลาวด์ ผู้ใช้บางคนไม่ชอบขั้นตอนการลงชื่อเข้าใช้ที่บังคับและการย้ายออกจากแอปแบบโลคอลล้วนๆ การอัปเดตในภายหลังได้เพิ่มตัวเลือกแบบโลคอลเท่านั้นที่ชัดเจนขึ้น แต่การเปลี่ยนแปลงดังกล่าวทำให้บางทีมต้องประเมินทางเลือกอื่น
ฉันสามารถเรียกใช้การทดสอบ Insomnia ใน CI Pipeline ได้หรือไม่?
ได้ ใช้ Inso ซึ่งเป็นโปรแกรมคู่หู Command Line ส่งออกหรือซิงค์คอลเล็กชันของคุณ จากนั้นรัน inso run test "<ชื่อชุดทดสอบ>" ใน Pipeline ของคุณ Inso จะคืนค่า exit code ที่ไม่เป็นศูนย์เมื่อล้มเหลว ดังนั้น CI สามารถทำให้ Build ล้มเหลวโดยอัตโนมัติเมื่อการทดสอบ API มีปัญหา
