ระบบการทำงานที่ต้องติดต่อสื่อสารกันผ่านระบบ network
ไม่ว่าจะเป็น HTTP/HTTPs, Messaging protocol ต่าง ๆ
มีคำถามที่น่าสนใจคือ
เราจะตรวจสอบการทำงานได้อย่างไร
ว่าทำงานได้อย่างถูกต้องตามที่เราต้องการ
จากคำถามข้างต้น ก็มีวิธีการมากมาย เช่น
- Test-Driven Development
- มีการทดสอบใน Level ต่าง ๆ เช่น API testing เป็นต้น
ในการพัฒนาและทดสอบ ถ้ามี 3 service เช่น A ->B ->C
สิ่งที่อาจจะต้องทำคือ
- แต่ละ service ต้องทดสอบตัวเองก่อน หรือ เรียกว่า component testing ซึ่งจะต้องจำลอง service ที่ต้องไปเรียกเสมอ เช่น ทดสอบ A ก็ต้องจำลอง B เป็นต้น
- เมื่อแต่ละ service ทำงานได้ตามที่ต้องการ ก็ทำการทดสอบแบบ End-to-end ต่อไป
ในการทดสอบแบบ End-to-end นั้น ถ้ามีปัญหาขึ้นมา?
จะรู้ได้อย่างไรว่า มีปัญหาตรงส่วนไหนของระบบ
ต้องมานั่ง debug ไหม
ต้องมาดู log ไหม
ต้องไปดูระบบ alert ไหม
ต้องไปดู dashboard ไหม
ต้องมาดู tracing ไหม
หนึ่งในวิธีใหม่ ๆ ที่น่าสนใจคือ การใช้งาน Tracing มาช่วยทดสอบ
โดยเราต้องใส่ tracing ด้วย OpenTelemetry ใน code ก่อน
จะนั้นก็กำหนด exporter เพื่อนำข้อมูล tracing ไปเก็บ
จากนั้นสิ่งที่มีเพิ่มเติมคือ ทำการ query ข้อมูลของ traceing ที่เก็บ
มาตรวจสอบว่า ทำงานหรือมีพฤติกรรมตามที่เราสนใจหรือไม่
นั่นคือเครื่องมือที่ชื่อว่า TraceTest
โดยที่ TraceTest จะเป็นที่จัดเก็บ tracing หรือ tracing server ให้
กำหนด url ของ server ได้ใน exporter เลย
จากนั้นจะมี User Interface ให้เราดู
และมีการ query ของมูลของ tracing ผ่านภาษา TractTest Selector Language
เพื่อทำการทดสอบว่ามีข้อมูลตามที่เราสนใจหรือไม่
แน่นอนว่า เราสามารถเขียน assertion ได้เลย
ตรงนี้แจ่มมาก ๆ ทำให้เราตรวจสอบพฤติกรรมการทำงานได้ง่ายมาก ๆ
ยังไม่หมด เราสามารถ export ข้อมูลออกมาเป็นไฟล์ YAML ได้อีก
เพื่อนำมาจัดเก็บไว้ใน version control
จากนั้นก็ run file YAML ผ่าน TraceTest CLI ได้อีกด้วย
นั่นหมายความว่า เราสามารถนำไปใส่ใน pipeline ของ CI/CD ได้แบบชิว ๆ อีกด้วย
ดังนั้นจากที่ลอง review ก็คร่าว ๆ
แนวทางของ Observability-Driven Development เป็นอีกทางเลือกที่น่าสนใจ
สำหรับการทดสอบ service-to-service ของระบบงาน
Reference Websites