คำถามเกี่ยวการทดสอบจาก class Full Stack Testing ที่น่าสนใจ
เราจะทำการทดสอบ Serverless app บน AWS อย่างไรกันบ้าง ?
เพื่อช่วยเพิ่มคุณภาพและความเร็วในการพัฒนาและส่งมอบงาน (Quality and Speed)
ดังนี้เรามาดูกันว่า ทำอย่างไรได้บ้าง ?

จากคำถามที่ถามมานั้น

ผมก็มีประสบการณ์มาบ้างนิดหน่อย
โดยเริ่มต้นจากเอกสาร Testing serverless applications on AWS
ซึ่งจะมีแนวทางการทดสอบทั้ง

  • Unit test
  • Integration test
  • E2E test
  • การใช้งาน Emulator และ Mock เข้ามาช่วยในการทดสอบ

มาดูแนวทางที่ได้แนะนำไปได้เล็กน้อย
มีขั้นตอนดังนี้

ขั้นตอนที่ 1 ทำการสร้าง App ด้วย AWS Serverless Application Model (SAM) CLI

โดยสร้างเป็น Java project + Apache Maven ดังนี้

ขั้นตอนที่ 2 ทำการแก้ไข code ให้เป็นไปตามความต้องการ

สิ่งที่ต้องการคือ Serverless app หรือ Lambda function นั้น
จะทำการรับ message หรือ event จาก Amazon SQS (Simple Queue Service)
ทำการแก้ไข code ใน handler ของ function ได้ดังนี้

ขั้นตอนที่ 3 ทำการทดสอบในรูปแบบใดได้บ้าง ?

รูปแบบที่แนะนำประกอบไปด้วย 3 แบบดังนี้

แบบที่ 1 ทำการทดสอบผ่าน SAM CLI ไปเลย

โดยทำการสร้าง message หรือ event ในรูปแบบของไฟล์ JSON
จากนั้นทำการส่งผ่าน SAM CLI ได้เลย

แบบที่ 2 ทำการจำลองการส่ง message หรือ event ผ่าน Amazon SQS ไปเลย

แต่แทนที่จะใช้ queue บนระบบ Cloud
แต่ทำการเปลี่ยนมาใช้งานบน local ด้วย LocalStack

แต่เพิ่มความง่ายในการติดตั้งและใช้ในการทดสอบบน local
จึงใช้งานผ่าน Test Containers ซึ่งมี LocalStack module มาให้ด้วย
โดยในการใช้งานจะเปิด SQS service ขึ้นมาใช้งาน
การใช้งานจะเขียนใน test case ด้วย JUnit 5 ดังนี้

ขั้นตอนการทำงานคือ

  • สร้าง Queue ใน SQS
  • การการสร้าง message หรือ event และส่งเข้าไปยัง Queue
  • ทำการรับหรืออ่าน message หรือ event เข้า Queue
  • มีได้ message หรือ event มาแล้ว ทำการสร้างเข้าไปยัง handler function เพื่อทำงาน
  • ทำการตรวจสอบผลการทำงานของ function

เพียงเท่านี้ก็สามารถทดสอบแบบง่าย ๆ ได้แล้ว

แบบที่ 3 ทำการทดสอบ handler function ตรง ๆ ได้เลย ซึ่งทำงานร่วมกับ Mockito

ลองทดสอบกันดูครับ
เป็นแนวทางที่ทำให้เราเข้าใจการทำงานของระบบ
และทำการสร้าง environment ในการพัฒนาและทดสอบให้คล้ายกับของจริงมากที่สุด
ขอให้สนุกกับการทดสอบ