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

Sleep คืออะไร

Sleep คือการใช้คำสั่งเพื่อให้เทสสคริปของเราหยุดการทำงานชั่วคราว ประมาณให้มันหลับไปซักตื่นแล้วค่อยมารัน test step ถัดไป ก็ประมาณนี้แหละครับ “Pauses the test executed for the given time.” จาก Robot Framework document
โดยปกติเวลาเราใช้คำสั่ง Sleep ก็จะต้องกำหนดเวลาด้วยว่าจะหยุดเป็นเวลากี่ วินาที หรือ กี่นาที ก่อนจะให้โปรแกรมรันเทสต่อไปนั่นเอง

จากตัวอย่างด้านบน มีการใช้งาน Sleep 10 วินาที ก่อนจะทำการตรวจสอบชื่อ account ที่ทำการแสดงบนหน้าจอครับ

แล้วอยู่ดีๆจะไปหยุดรันเทสทำแมวอะไร

ปกติเรามักจะใช้ Sleep เวลาที่หน้า Web Page ที่รันเทสอยู่มีการส่งข้อมูลไปหลังบ้าน(backend) แล้วทำให้บางครั้ง test step ถัดไปรันก่อนที่ผลลัพธ์จะถูกส่งกลับมาจาก server ทำให้เทส FAIL!!! ไปนั่นเอง

ตัวอย่างเช่น เราเขียนเทสเพิ่มสินค้าลงตะกร้า ลองนึกตะกร้าสินค้า Lazada ดูครับ พอกดเพิ่มสินค้า ก็จะมีการ call ไป server เพื่อเก็บสินค้าเข้าตะกร้า ระหว่างนั้นถ้าเรามี test step ที่จะไป เช็คจำนวนสินค้า ก็จะไม่เจอนั่นเอง เราเลยจะมีการเพิ่ม Sleep อาจจะซัก 5 วินาที ก่อนจะไปเช็คจำนวนสินค้าครับ

Sleep ไม่ดีตรงไหน

  1. มันทำให้เทสสคริปเรารันช้าลงอย่างเห็นได้ชัดครับ
    จากตัวอย่างที่แล้ว จะเห็นว่าไม่ว่า Server จะตอบกลับมาเร็ว หรือช้ายังไง test script เราก็จะหยุดการทำงานไป 5 วินาทีอยู่ดี ซึ่งจริงๆอาจใช้เวลาแค่ 1-2 วินาที เท่านั้นเอง
    แล้วเดี๋ยวนี้เว็บไซด์ก็จะมีการส่งข้อมูลไปมาระหว่างหน้าบ้าน และหลังบ้านมากขึ้น อาจทำให้ใน 1 เทสสคริปอาจต้องมีการใช้ Sleep มากถึง 4 – 5 ครั้งเลยทีเดียว นั่นก็คือ 10 วินาทีที่เพิ่มขึ้นมาเลยทีเดียว
  2. เทสสคริปเราจะไม่เสถียร เพราะบางครั้งเรารอน้อยไป
    เป็นผลพวงจากข้อที่ 1 ที่ตอนแรกเราอาจรันแล้วคิดว่า ถ้าปกติ 2 วินาที งั้นตั้งไว้ซัก 3 วินาที น่าจะพอ แต่บางครั้ง เน็ทเวิร์คอาจไม่เป็นใจ ทำให้ช้าลงไปแค่ วินาทีเดียว เทสสคริปเราก็ Fail อีกแล้ววววว

แล้วจะทำไงดีล่ะ

ถ้าเพื่อนๆใช้ Robot Framework กับ Selenium ก็จะมี keyword พวก Wait ….. อยู่ ซึ่งความยอดเยี่ยมของเจ้านี่อยู่ที่ มันจะเป็นการวนเช็คให้เราแทนที่จะเป็นหยุดจนครบกำหนดเวลาครับ เช่น เราอาจจะใช้ keyword Wait Until Page Contains Element สำหรับรอจนดกว่าจะมี Element ที่เราต้องการตรวจสอบแสดงขึ้นมาก่อนจะ ให้เทสสคริปรัน step ถัดไปครับ

Selenium ยังมี wait keyword อีกเพียบรอให้เราไปลองใช้งานกันอีกครับ ลองดูคร่าวๆจาก list ด้านล่างนี้ดูครับ

ปัญหาที่เทสรันนาน ก็จะหายไปในทันใด เพราะเทสจะหยุดรอจนพร้อมที่จะรัน step ถัดไปเท่านั้น
ปัญหาความไม่เสถียรจะลดลงอย่างเห็นได้ชัดเพราะเราจะสามารถใส่ safety value ได้มากขึ้นนั่นเอง

หวังว่าเพื่อนๆจะลองเอาไปปรับใช้กันดูนะครับ
อย่าปล่อยให้เทสเรารันนานจน เราเองต้อง Sleep แทนล่ะ

Previous articleจัดการ Test case ด้วย Visual Studio Team Services
Next articleสอนการใช้งาน Git เพื่อจัดเก็บ Test Script ให้ปลอดภัย