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