การทดสอบ Visual Regression ด้วยการจับภาพหน้าจอ
ทีมพัฒนาใช้ Webshot เพื่อตรวจจับบั๊กที่ unit test มองไม่เห็น เช่น layout เพี้ยน, ฟอนต์แสดงผลผิดพลาด, ไอคอนหาย, หรือหน้าเว็บพังเมื่อแสดงผลบนอุปกรณ์ต่างๆ ถ่ายภาพหน้า staging, ถ่ายภาพหน้า production, แล้วเปรียบเทียบกัน นำภาพผลต่างไปใส่ในคอมเมนต์ของ PR เพื่อยืนยันว่าการเปลี่ยนแปลงของคุณปลอดภัย (หรือเพื่อพิสูจน์ว่ามีบั๊กใหม่เกิดขึ้น)
ทุกปุ่มจะเปิดฟอร์มถ่ายภาพพร้อมตั้งค่าล่วงหน้า คุณสามารถเปลี่ยนรูปแบบและขนาด viewport ได้เมื่อหน้าเว็บโหลดเสร็จ
ทำไมต้องใช้ Webshot สำหรับงานนี้
ถ่ายภาพแม่นยำระดับพิกเซล
โหมด PNG จะรักษาความคมชัดของข้อความและขอบภาพ เหมาะสำหรับเครื่องมือเปรียบเทียบระดับพิกเซล (เช่น `pixelmatch`, ImageMagick `compare`) ซึ่งการบีบอัดของ JPG อาจทำให้เกิดผลลวง (false positive)
Viewport ขนาดเดิมทุกครั้ง
Webshot ถ่ายภาพด้วยขนาด viewport, ตำแหน่งการเลื่อน, และเวลารอโหลดฟอนต์ที่เหมือนกันทุกครั้ง ทำให้ผลการเปรียบเทียบเชื่อถือได้
เป็นมิตรกับ API
เชื่อมต่อ Webshot API ฟรีเข้ากับ CI ของคุณ: ถ่ายภาพก่อนและหลัง deploy, เปรียบเทียบด้วย `pixelmatch`, และสั่งให้ build ล้มเหลวหากจำนวนพิกเซลที่เปลี่ยนไปเกินเกณฑ์ที่กำหนด
ไม่ต้องตั้งค่า headless-Chrome ที่ซับซ้อน
ข้ามขั้นตอนการตั้งค่า puppeteer, การติดตั้งฟอนต์, และ sandbox flags ไปได้เลย Webshot จัดการสิ่งเหล่านี้ให้ทั้งหมดบนโครงสร้างพื้นฐานของเรา CI ของคุณเพียงแค่เรียก HTTP เท่านั้น
วิธีถ่ายภาพเพื่อทดสอบ Visual Regression
- เลือกหน้าที่คุณต้องการตรวจสอบ เช่น หน้าแรก, แลนดิ้งเพจสำคัญ, ขั้นตอนการชำระเงิน หรือหน้าใดๆ ที่หากเกิดข้อผิดพลาดแล้วจะส่งผลกระทบ
- ถ่ายภาพแต่ละหน้าในรูปแบบ PNG + desktop_full + mobile_full เพื่อสร้างเป็นภาพพื้นฐาน (baseline) ของหน้า production ปัจจุบัน
- หลังจากการ deploy ครั้งถัดไป ให้ถ่ายภาพ URL เดิมอีกครั้ง เปรียบเทียบภาพเก่ากับใหม่ด้วย `pixelmatch` หรือ ImageMagick หากมีพิกเซลเปลี่ยนแปลงเกิน 1% ควรให้คนตรวจสอบ
- เชื่อมต่อเข้ากับ CI: ใช้ pre-deploy hook ถ่ายภาพหน้า staging, ใช้ post-deploy hook ถ่ายภาพหน้า production และสั่งให้ build ล้มเหลวหากผลต่างเกินเกณฑ์ที่คุณกำหนด
คำถามที่พบบ่อย
กรณีการใช้งานอื่นๆ: สกรีนช็อต Google Maps · สกรีนช็อต WordPress · ตรวจสอบคุณภาพแลนดิ้งเพจ · สกรีนช็อตเพื่อเป็นหลักฐานทางกฎหมาย · สกรีนช็อตโซเชียลมีเดีย · สกรีนช็อตสำหรับเวิร์กโฟลว์ของนักพัฒนา · ดูทั้งหมด →