selenium-testing
วันนี้มีโอกาสแลกเปลี่ยนแนวทางการทดสอบ Web application
โดยเครื่องมือที่ได้รับความนิยมอย่างมาก ก็คือ Selenium

เนื่องจากไม่เพียงแค่ฟรีเท่านั้น
แต่ยังมีความสามารถมากมายให้ใช้แบบครบครัน
รวมทั้งทดสอบผ่าน browser ชนิดต่าง ๆ ได้หมด
ไม่ว่าจะเป็น Firefox, Google Chrome และ Internet Explorer

ยังไม่พอนะ เรื่อง community ก็ใหญ่มาก
ถ้าไม่เชื่อลองไปค้นหาผ่าน Google ดูนะ !!
ดังนั้น ถ้ามีปัญหาก็หาวิธีการแก้ไขไม่ยากเลย (ใช้ keyword ให้ถูกนะ)

แต่สำหรับมือใหม่การใช้งาน Selenium
มันอาจจะไม่ใช่เรื่องที่ง่ายเลย
ดังนั้นจึงทำการสรุปคำแนะนำในการใช้งานที่ดีไว้นิดหน่อย

ปล.
ปัจจุบันแนะนำให้ใช้งาน Seleniun 2 หรือ Web Driver กันนะครับ
และที่สำคัญ framework และ library ต่าง ๆ ที่ทำการทดสอบระบบ web
ส่วนใหญ่ก็ใช้ Selenium กันทั้งนั้น

1. ผลการทดสอบต้อง Stable หรือมีความเสถียรที่สูง

ในการทดสอบระบบผ่าน User Interface นั้น
สิ่งที่สำคัญมาก ๆ คือ

  • การออกแบบชุดการทดสอบที่ดี
  • ความเสถียรของการทดสอบ

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

2. การทดสอบต้องเร็ว

เนื่องจากเป็นการทดสอบที่ User Interface เหมือนกับผู้ใช้งาน
บ่อยครั้งเราจะพบว่า การทดสอบทำงานช้ามาก ๆ
ทั้งจากระบบ network ที่แย่
ทั้งจากระบบที่ทำงานช้า

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

ดังนั้น จงทำการแก้ไขปัญหาที่ต้นเหตุ และ อย่าละเลยโดยเด็ดขาดนะครับ

3. เรียนรู้การใช้งาน Page Object เพื่อทำให้การทดสอบ Stable มากขึ้น

เนื่องจากเราต้องเขียนชุดการทดสอบขึ้นมา
ซึ่ง Selenium นั้นจะอ้างถึง id ของ element ต่าง ๆ บน browser
ดังนั้นให้ลองคิดดูว่า

ถ้าในหนึ่งหน้าจอมีจำนวน test case จำนวนมาก
การอ้างถึง id เหล่านั้นก็บ่อยมาก
บางครั้งเขียนซ้ำแล้วซ้ำเล่าไปตลอด
นั่นแสดงว่า เกิดการอ้างอิง id จากหลาย ๆ ที่

คำถามคือ ถ้าเกิดการเปลี่ยนในหน้านั้นขึ้นมาล่ะ จะเกิดอะไรขึ้น ?
คำตอบคือ
การทดสอบจำนวนมาก ๆ จะทำงานไม่ถูกต้อง
ดังนั้น จะต้องทำการแก้ไข แต่จำนวนที่ต้องแก้ไขมันอาจจะเยอะมาก ๆ !!!
นี่คือ ปัญหาของการดูแลรักษาชุดการทดสอบ
ดังนั้น หนึ่งในวิธีการคือ Page Object นั่นเอง

คำแนะนำสำหรับการนำไปใช้งาน

เนื่องจากเป็นการทดสอบผ่าน User Interface ของระบบงาน
ดังนั้นแน่นอนว่า การทดสอบในทุก ๆ test case
ต้องใช้เวลาสูงมากขึ้นเรื่อย ๆ
และต้องทำการทดสอบซ้ำ ๆ อย่างต่อเนื่อง
ดังนั้น สิ่งที่ขาดไม่ได้คือ ระบบ Continuous Integration
รวมทั้งการทดสอบต้องทำงานแบบขนานกันอีกด้วย (Parallel Testing)
เพื่อเพิ่มความเร็วในการทดสอบ

หรือบางครั้งเครื่องทดสอบไม่มีหน้าจอแสดงผล
ดังนั้นจึงต้องทำการทดสอบผ่าน Virtual screen แทน
ซึ่งเรามักจะเรียกว่า Headless

ทำให้การทดสอบเร็วขึ้นมาอีกด้วย
แต่ก็มีข้อเสียคือ ทีมพัฒนาไม่เห็นการทำงานนั่นเอง !!

ผลลัพธ์ที่ได้กลับมาก็คือ
ความเร็วของการทดสอบ
ซึ่งทำให้เรารู้ว่า ระบบทำงานถูก หรือ ผิดพลาดตรงไหนได้อย่างรวดเร็ว (Fast feedback)

ปิดท้ายด้วยคำเตือน

ในช่วงแรก ๆ ของการนำ Selenium มาใช้งานนั้น
มันอาจจะดูดีอย่างมาก
ทั้งในแง่ของความเร็ว
ทั้งในแง่ของประโยชน์จากการทดสอบ
เนื่องจากจำนวนการทดสอบยังน้อย
เนื่องจากขนาดของระบบยังไม่ใหญ่มาก

แต่เมื่อเวลาผ่านไปสัก 2-6 เดือน
มักจะพบเจอปัญหามากมายเกี่ยวกับการทดสอบ
ตัวอย่างเช่น
ผลการทดสอบที่ไม่ Stable เลย
บางครั้งทำงานได้อย่างถูกต้อง
บางครั้งทำงานผิดพลาด
รวมทั้งใช้เวลาในการทดสอบนานมาก ๆ
ส่งผลให้หลาย ๆ ทีมไม่อยากจะใช้งานมันอีกต่อไป !!

แต่เราลองกลับมาคิด วิเคราะห์ แยกแยะ กันหน่อยไหมว่า
ปัญหาเหล่านี้มันเกิดมาจากสาเหตุอะไรกันบ้าง ?

  • Architecture ของระบบมันห่วยหรือไม่ ?
  • ระบบงานมันซับซ้อนหรือไม่ ?
  • ระบบงานมันช้าหรือไม่ ?
  • จำนวน test case มันเยอะเกินความจำเป็นหรือไม่ ?
  • ความสามารถของทีมเป็นอย่างไร ?
  • และอื่น ๆ อีกมากมาย

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

อย่าบอกว่า เดี๋ยวก็มีคนมาแก้ไข โดยเด็ดขาด
อย่าคิดว่า มันไม่ใช่งานของเรา โดยเด็ดขาด

มิเช่นนั้น คุณกำลังจะเดินเข้าสู่ด้านมืดของการใช้งาน Selenium นะ !!
สุดท้ายก็จะเลิกใช้กันไป
หรือทำให้มันมีเท่านั้นเอง …