
ขั้นตอนปกติของการพัฒนาระบบงาน เช่น 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