การรันเทสสิ่งหนึ่งที่ขาดไม่ได้เลยก็คือ Timeout ครับ เพราะสำหรับการเทสแล้ว เราจำเป็นต้องมีการกำหนด Timeout ในทุกๆ action เช่น กดปุ่ม กรอกข้อมูล ตรวจสอบข้อความบนหน้าจอ เพราะถ้าเราไม่มี Timeout ลองนึกภาพว่าถ้าเราสั่งให้ script กดปุ่ม login แล้ว Developer มีการปรับเปลี่ยน UI ใหม่ script เราก็จะค้างอยู่อย่างนั้นไม่สามารถทำงานต่อไปได้นั่นเอง
Timeout ประเภทต่างๆ
ใน Playwright เราแบ่ง Timeout ออกเป็นประเภทหลักๆได้ดังนี้
Timeout | Default | Description |
Test timeout | 30 วินาที | เป็น timeout ในการรันเทสแต่ละข้อ |
Expect timeout | 5 วินาที | เป็น timeout เวลาที่เราใช้ function expect ต่างๆ ในการตรวจสอบค่า |
Action timeout | ไม่มี timeout | Action ต่างๆเช่น การกดปุ่ม, การรอให้ element แสดง/ซ่อน |
Navigation timeout | ไม่มี timeout | การ Navigate ไปยังเพจต่างๆ |
Global timeout | ไม่มี timeout | เป็น timeout รวมสำหรับการรันเทสทั้งหมด |
Timeout ที่เหมาะสม
คำถามนี้ เชื่อว่าทุกคนที่อ่านมาถึงตรงนี้ น่าจะมีคำถามนี้ในใจกันแล้ว ผมอาจไม่ได้มีตัวเลขตรงๆไว้ให้ แต่แนะนำว่าเราใช้ ค่า default ของ Playwright ก่อน แต่ถ้ามีปัญหาลองปรับตามนี้ดูครับ
- Test timeout ให้เราดูค่าเฉลี่ย Test script แต่ละข้อของเราเป็นหลัก แล้วเพิ่มเวลาไว้อีกประมาณ 30 เปอร์เซนต์ เผื่อ server ตอนนั้นโหลดหนัก
กรณีที่เทสข้อไหนใช้เวลารันนานเป็นพิเศษ เราสามารถ override ที่ต้นเทสเคสได้โดยใช้คำสั่งtest.setTimeout(120000) // กำหนด timeout เป็น 120 วินาที
- Expect timeout ให้เราใช้ค่า default ที่ 5 วินาที แต่ถ้าบางครั้งจำเป็นต้องรอผลจากฝั่ง Server ก็ให้ใช้วิธีการ override เป็นครั้งๆไปครับ
expect(locator).toBeVisible({ timeout: 10000 }); // กำหนด timeout เป็น 10 วินาที
- Action timeout ผมแนะนำว่าให้ใช้ default no timeout
แต่ว่าต้องระวัง บางกรณีเช่น การใช้ try-catch มาครอบ function wait ต่างๆ ถ้าจะเขียนแนวนี้ แนะนำว่า function ใน try catch ควรใส่ timeout ไว้ด้วยครับ ไม่งั้นจะกลายเป็น timeout เท่ากับ Test timeout แล้วเทสจะรันผ่านบ้างไม่ผ่านบ้าง เพราะเวลารันเทสเกินลิมิตนั่นเองlocator.click({ timeout: 10000 }); // กำหนด timeout เป็น 10 วินาที
ในส่วน Timeout อื่นก็แนะนำว่าให้กำหนดเป็นกรณีไปครับ และอยากให้ระวังในเรื่องการกำหนด timeout หลายๆแบบพร้อมกัน อาจทำให้เทสของเรา Fail timeout ได้นะ
References
Playwright Web Automated Test
เรียนรู้การทดสอบ Web Application ด้วย
Playwright และ TypeScript