Contract Testing คืออะไร
Last updated
Was this helpful?
Last updated
Was this helpful?
คุณรู้หรือไมว่า API ของคุณมีใครเรียกใช้งานอยู่บาง
คุณรู้หรือไมว่า API ที่คุณเรียกใช้งานอยู่มีการ update บ่อยแค่ไหน แล้วทุกครั้งที่มีการเปลี่ยนแปลงได้แจ้งคุณทุกครั้งหรือเปล่า
เวลาที่ต้อง Intergrate หรือ End-to-End Test คุณมักเจอปัญหาและเสียเวลาเยอะหรือไม
ถ้าคุณเจอปัญหาเหล่านี้ ผมคิดว่า Contract Testing พอจะช่วยคุณได้
Contract Test นั้นไม่ใช่ End-to-End(E2E) Test นะ Contract Test เนี่ยจะกินแรงและเวลา น้อยกว่า E2E Test ในระยะยาวเอามากๆ
จากรูปจะเห็นว่า Contract test จะกินเวลาและกำลังคนแค่ช่วงแรกแต่หลังจากนั้นจะนั้นถึงแม้ว่า feature จะเพิ่มมากขึ้นก็จะไม่กินเวลาเพิ่มกว่าเดิมเท่าไหร่ กลับกันใน E2E test เริ่มแรกจะใช้เวลาและกำลังคนนิดเดียว แต่พอ feature มากขึ้นเรื่อยๆ แล้วก็จะกินทั้งเวลาและกำลังคนมากขึ้นกว่าเดิมมากๆ
หลักการของ contract test คือจะเป็นคนกลางที่ตรวจสอบการทำงานระหว่าง consumer และ provider แล้วบอกผลลัพธ์มาให้ว่าตรงตามสัญญา(contract) ที่ให้ไวหรือเปล่า
consumer ก็คือคนเรียกใช้งาน มองว่ามันเป็น Frontend อาจจะ web/mobile ที่ต้องใช้ API ก็ได้ครับ
provider ก็คือผู้ให้บริการ ให้มองว่ามันคือ Backend ที่ provide API ให้ Frontend เรียกนั้นละครับ
contract ก็คือ spec ของ API ที่ Backend ทำไวให้ Frontend เรียกนั้นเองครับ
แล้วเราจะรู้ได้ยังไงละว่าการเปลี่ยนแปลงนี้มันสงผลกระทบอะไรบาง เราก็ต้อง Intergrate หรือ E2E Test นั้นละ ไม่งั้นจะรู้ได้ไงว่ามันโดนอะไรบาง ถ้าระบบเล็กๆ ก็คงไม่เท่าเพราะ Business ยังไม่มาก Dependency ก็ยังไม่เยอะ แต่ถ้าระบบใหญ่ๆ ละจะให้มา E2E กันบ่อยๆ ก็เปลืองคนเปลืองเวลาน่าดู ทุกครั้งที่มีเปลี่ยนแปลงก็ต้องมา E2E กันใหม่
เพราะจริงๆ แล้ว Contract test มันก็คือการทำ system ขึ้นมาเพื่อทดสอบว่าการทำงานระหว่าง Frontend และ Backend ที่ integrate กันผ่าน API แต่ละตัวเนี่ย Response มาตรงตาม Spec ที่คุยกันไหวหรือเปล่า ถ้าไม่ตรงตาม Spec เราก็จะได้ error กลับมาเราก็จะรู้ได้ก่อน
รูปด้านล่างนี้อธิบายรายละเอียดของ Contract test ได้ดีมากครับ
link ต้นทางเป็น animation ด้วยนะครับ แนะนำครับ https://pactflow.io/how-pact-works/#slide-1
Contract test ควรใช้คู่กับ Unit test ของแต่ละ party นะครับ จะได้ผลลัพธ์ที่ดีที่สุด และแน่นอนว่า E2E test ก็ยังคงมีความจำเป็นอยู่นะครับ แต่บางครั้งเราสามารถใช้ Contract test เข้ามาช่วยเพื่อลดงานลงไม่ต้องถึงขั้นทำ E2E ทุกครั้งไปได้ครับ
ครั้งต่อไปจะลองทำ contract test ง่ายๆ แต่ให้เห็นภาพให้อ่านกันครับ
ขอบคุณครับ
Reference
ส่วนใหญ่ปัญหาระหว่าง Frontend กับ Backend มันก็คือเรื่อง Spec นี้ละ เพราะถ้า Frontend ทำไวแบบนี้แล้วเกิด Backend response กลับมาไม่ตรงตาม Spec หรือผิดแปลกไปจากเดิมก็ตูมครับ