จากการแบ่งปันเรื่องของการทดสอบแบบอัตโนมัตินั้น
มีคำถามที่น่าสนใจคือ
เราจะทำการจัดการและแสดงผลการทดสอบอย่างไรดี
เพื่อให้ทุกคนที่เกี่ยวข้อเข้าถึงได้ง่าย
และเมื่อมีปัญหาทุก ๆ คนที่สนใจ สามารถเห็น หรือ ได้รับข้อมูลทันที
ดังนั้นลองมาทำกันดูหน่อย

ถ้าเป็นการทำงานปกติทั่วไป มักจะเป็นดังนี้

  • ทำการทดสอบใน pipeline ของ CI/CD จะเห็นผลการทดสอบ และ รายละเอียดทันที
  • ทำการ import เข้า SonarQube ก็เห็นข้อมูลทั้งหมดเช่นกัน

แต่สิ่งที่อยากได้นั้น แตกต่างกันไป
โดยสิ่งที่ผมต้องการคือ

  • เมื่อใคร ๆ ก็ตามทดสอบแล้ว ให้ส่งผลการทดสอบมาตรงกลาง โดยอ่านผลการทดสอบจากไฟล์รูปแบบต่าง ๆ เช่น junit และ json เป็นต้น
  • ทำการแสดงผลการทดสอบบน Grafana แบบสวย ๆ
  • สามารถทำการ alert ได้เมื่อเจอผลการทำงานที่สนใจ เช่น Prometheus alert manager เป็นต้น

เมื่อได้ requirement ที่ชัดเจนแล้ว ก็มีลองสร้างแบบง่าย ๆ ขึ้นมากัน

ขั้นตอนที่ 1 ทำการอ่านข้อมูลผลการทดสอบจากไฟล์ xml ซึ่งเป็น junit format

ตรงนี้สบายหน่อย มี library ของแต่ละภาษาให้ใช้งานเลย
หรือเขียนเองแบบง่าย ๆ
เพราะว่าเป็นไฟล์ XML ที่เป็นมาตรฐาน
แต่ชอบ json มากกว่า

ขั้นตอนที่ 2 จะจัดเก็บข้อมูลอย่างไร รูปแบบไหนดี ?

ในขั้นตอนนี้จะเป็นส่วนสำคัญมาก ๆ
ซึ่งมีหลายวิธี แต่หนึ่งในวิธีการที่เลือกใช้เป็นดังนี้

  • จะใช้งาน OpenTelemetry สำหรับรูปแบบของข้อมูล metric
  • ทำการส่งข้อมูลไปยัง Otel Collector
  • เก็บข้อมูลใน Prometheus ​โดยให้ไปดึงข้อมูลมากจาก Otel Collector
  • แสดงผลข้อมูลจาก Prometheus ใน Grafana dashboard

แสดงการทำงานดังรูป

โครงสร้างการทำงานของ Otel Collector เป็นดังรูป

ขั้นตอนที่สาม มาลองเขียน code แบบง่าย ๆ กันด้วย

เลือกใช้ภาษา Go ในการพัฒนา เพื่อสร้าง metric และส่งข้อมูลไปยัง Otel Collector
มาดูตัวอย่างของการสร้าง metric แบบง่าย ๆ

ในส่วนของ Otel Collector นั้นก็ทำการ config ง่าย ๆ
เพื่อให้ export ออกไปในรูปแบบของ prometheus ได้เลย (Prometheus exporter)

ขั้นตอนสุดท้าย ทำการสร้าง Prometheus และ Garana

จะได้ข้อมูลดังนี้

ค้นหา metric ใน Prometheus

ทำการสร้าง Grafana dashboard เพื่อแสดงผลการทดสอบแบบง่าย ๆ

เพียงแค่นี้ก็เก็บข้อมูล และ แสดงผลข้อมูลการทดสอบ แบบง่าย ๆ ได้แล้ว
ขอให้สนุกกับกับการ coding ครับ