Quantcast
Viewing all articles
Browse latest Browse all 2067

ลองใช้งาน Spring Cloud Contract (HTTP) กันหน่อย สำหรับ Contract testing

Image may be NSFW.
Clik here to view.

Image may be NSFW.
Clik here to view.

ในการทดสอบระบบงานพวก RESTful API นั้น ๆ
เราสามารถทดสอบได้หลายวิธี ไม่ว่าจะเป็น

  • API testing tools เช่น Postman
  • Unit, Integration, Component และ End-to-End testing

แต่อีกตัวที่น่าสนใจคือ Contract Testing
สำหรับการทดสอบการทำงานร่วมกันระหว่าง services ต่าง ๆ

พอดีมี project ต้องใช้งาน
จึงลองสรุป Contract testing ด้วย Spring Cloud Contract ไว้
โดยสามารถดูเพิ่มเติมใน Spring Cloud Contract Reference
จะสนับสนุนทั้ง HTTP และ messaging
มาเขียนกันเลย

ขั้นตอนที่ 1 เริ่มจากการออกแบบการทำงานของผู้ใช้งาน(Consumer)และผู้ให้บริการ (Provider)

โดยติดต่อกับผ่าน HTTP protocol ปกติด้วย REST + JSON
ซึ่งทั้ง consumer และ provider จะต้องมาสรุปรูปแบบของการติดต่อสื่อสาร
ว่าจะต้องมีรูปแบบอย่างไร
มันคือ API specification นั่นเอง
จะเรียกว่า Contract หรือสัญญาระหว่างกัน
ดังนั้นถ้ามีการเปลี่ยนสัญญาจะรู้ได้ทันที

ขั้นตอนที่ 2 ทำการสร้าง Contract ขึ้นมา ซึ่งสามารถ execute ได้ ไม่ใช่เป็นเพียงไฟล์เอกสารที่โยนไปมา

โดยสามารถสร้าง contract ได้หลายรูปแบบ
จะเรียกว่า Contract DSL ประกอบไปด้วย

  • Java
  • Groovy
  • Kotlin
  • YAML

ตัวอย่างของ Contract ที่เขียนด้วยภาษา Groovy

[gist id="579a527696a6ec0e86f08cd90dffd3d5" file="first-contract.groovy"]

ขั้นตอนที่ 3 ในฝั่ง provider ทำการเขียน test โดยนำข้อมูลจาก Contract ที่สร้างไว้มาใช้

จะเรียกว่าการสร้าง Contract test
ในส่วนนี้เราจะเขียนเพียง Based-test class เท่านั้น
เพื่อระบุว่าเป็น class หลักของการทดสอบด้วย Contract ดังนี้

[gist id="579a527696a6ec0e86f08cd90dffd3d5" file="BaseTests.java"]

จากนั้นทำการ run test ผ่าน gradle ได้คำสั่ง

[code]$gradlew contractTest[/code]

โดยคำสั่งนี้จะทำการ generate test case class จาก contract
ที่อยู่ใน folder contract ให้แบบอัตโนมัติ
และทำการทดสอบให้อีกด้วย

ขั้นตอนที่ 4 เมื่อฝั่ง provider ทำการทดสอบผ่านแล้ว ทำการสร้าง stub server และ upload ไปยังตรงกลาง

การสร้าง stub server จาก Contract นั่นเอง
เพื่อให้ทางฝั่ง consumer หรือผู้ใช้งานนำไปใช้
เพื่อใช้ในการทดสอบ หรือ มันคือ Mock API server นั่นเอง
ถูกสร้างมาให้ทุกครั้งเมื่อมีการเปลี่ยนแปลง

ขั้นตอนที่ 5 ในฝั่ง consumer ก็ทำการเขียน test case เพื่อใช้งาน Contract test + Stub server

ทำการใช้งาน stub server ที่สร้างจาก provider
และถูกจัดเก็บไว้ใน Apache Maven Repository แบบ local
เขียนได้ดังนี้

[gist id="579a527696a6ec0e86f08cd90dffd3d5" file="CustomerGatewayTest.java"]

จากนั้นก็ทดสอบแบบปกติ
เพียงเท่านี้เราก็สามารถเริ่มต้นทำ Contract testing
ด้วย Spring Cloud Contract ได้แล้ว
เป็นอีกแนวทางในการทดสอบและการทำงานร่วมกันที่น่าสนใจ
ส่วนเครื่องมืออื่น ๆ ก็เช่น Pact เป็นต้น

ขอให้สนุกกับการ coding ครับ

ดูตัวอย่าง code แบบเต็ม ๆ ได้ที่ GitHub:Up1


Viewing all articles
Browse latest Browse all 2067

Trending Articles