ขั้นตอนปกติของการพัฒนาระบบงาน เช่น REST API
มักจะมีขั้นตอนการทำงานดังนี้

  • ทำการออกแบบ REST API ในรูปแบบของ Swagger หรือ OpenAPI spec
  • ทำการพัฒนาตาม spec
  • ทำการทดสอบ REST API ด้วย HTTP client tools ต่าง ๆ เช่น postman, REST assured และ Karate เป็นต้น
  • ทำการส่งมอบ

สิ่งที่น่าสนใจคือ เราออกแบบชุดการทดสอบได้ครอบคลุมหรือไม่
หรือเราสามารถป้องกันหรือหา bug ได้ตั้งแต่เนิ่น ๆ หรือไม่
เพื่อทำการแก้ไขได้อย่างรวดเร็ว ก่อนส่งมอบ

แนวทางในปัจจุบันนั้น
อาจจะต้องออกแบบให้ครอบคลุม
ทั้ง success case, failure case, edge case และอื่น ๆ
หรืออาจจะใช้ AI เข้ามาช่วยเหลือ ก็ว่ากันไป

หนึ่งในแนวทางที่น่าสนใจคือ Property-based testing จาก spec
ด้วย Schemathesis

โดย input ที่ใช้ในการทดสอบคือ

  • API spec ในรูปแบบของ Swagger/OpenAPI
  • ระบบที่ต้องการทดสอบ

จากนั้นทำการติดตั้ง และ run schemathesis
ได้ทั้งแบบ command line และเขียน code ด้วยภาษา Python ได้เลย

การทำงานหลัก ๆ ของ schemathesis คือ

  • ทำการอ่าน spec ของ API จากนั้นทำการ generate ชุดของ test case และ data test ในรูปแบบหลากหลายออกมาให้
  • ทำการส่ง request ไปยัง endpoint ของระบบที่จะทดสอบ
  • เมื่อได้ผลลัพธ์กลับมา จะทำการตรวจสอบผลผ่าน Scehema validation ว่าถูกต้องตาม spec หรือไม่

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

จะทำการ load spec มา
และทำการสร้าง test case และ test data ของทุก ๆ endpoint ให้
จากนั้นทำการทดสอบและแสดง report ออกมา
จะใช้เวลาในการทดสอบเยอะมาก ๆ !!

สิ่งที่น่าสนใจสำหรับเครื่องมือนี้ ไม่ใช่ทำการทดสอบแบบ request/response เท่านั้น
แต่ยังไม่การตรวจสอบ spec ให้ด้วยว่า ออกแบบได้ดีหรือไม่ เช่น
HTTP Header ของ endpoint ครบหรือไม่
HTTP status code ของ endpoint ครบหรือไม่

ลองใช้งานกันดูครับ
เป็นอีกแนวทางหนึ่งในการสร้างความเชื่อมั่นต่อระบบงานให้สูงขึ้น
น่าจะช่วยลด effort ของการทดสอบลงไปได้

Reference websites