Sikuli เพื่อทำ system test

Sikuli เพื่อทำ system test
13/02/19   |   2.5k
บทความนี้ไม่แนะนำสำหรับผู้ที่ไม่รู้จัก sikuli และไม่รู้จัก system test

เรามาเริ่มกันเลยดีกว่า

หากทุกท่านที่เข้ามาอ่าน ได้ลงโปรแกรมตัวนี้เรียบร้อยแล้ว ผมเชื่อว่าคุณจะพบกับหน้าจอนี้ทุกคน จะเห็นว่าด้านซ้ายจะมีเครื่องมือให้ใช้มากมาย แต่เท่าที่ได้ใช้จริง ผมใช้แค่ 3 ฟังก์ชั่นคือ

แถบเครื่องมือที่ใช้

document ของ sikuli

ฟังก์ชั่นที่ใช้นอกเหนือแถบเครื่องมือ

App.open()

เป็นฟังก์ชั่นที่ใช้เปิดโปรแกรม(ซึ่งผมใช้ mac) มันจะเปิด chrome โดย App.open(“/Applications/Google Chrome.app”)

ปล.ผมทำ system test เกี่ยวกับเว็บที่มีแต่การแสดงผลของ javascript

getParentPath()

ฟังก์ชั่นนี้เราจะได้ path ที่อยู่ของไฟล์ sikuli เรา เทียบง่ายๆมันก็คือ pwd ใน terminal นั้นแหละ

open()

ฟังก์ชั่นนี้ผมใช้ในการเก็บ log ของ test ในไฟล์ text

ประมาณนี้ซึ่งในฟังก์ชั่นนี้จะมีตัวที่เป็นพี่น้องร่วมสาบานที่ตามๆกัน คือ write เขียน text เข้าไปอยู่ในไฟล์ .txt ของเรา แล้วปิดไฟล์โดย .close

try และ except

ฟังก์ชั่นนี้ มันก็คือ try/catch นั้นแหละวิธีการใช้ไม่ยาก แต่ข้อควรระวังคือ ฟังก์ชั่นนี้ไม่สามารถนำมาดักฟังก์ชั่น find()

ดักไม่ได้ ยังไง

ถ้าหากเราใช้ find() แล้วไม่เจอสิ่งที่ต้องการ มันก็จะข้ามไปเฉยๆ แบบงงๆ ซึ่งตอนแรกที่ผมใช้นึกว่ามันจะ except หรือแสดง error อะไรมาให้

เอ้า แล้วเราจะใช้อะไรดีละ ?????

ผมมีทางออกที่ไม่ยากเลยให้กับคุณ

if exists()

พูดง่ายๆ ฟังก์ชั่นนี้ก็คือ if/else นั้นแหละ ในมุมมองผมมันคือ if ผสม find()

ตัวอย่าง:

การใช้ if exists จะเห็นได้ว่าใน วงเล็บ เราจะใส่รูปที่ต้องการเช็คว่า มีรูปนั้นในหน้าจอหรือไม่

ถ้ามีรูปนั้นก็เข้า if ไม่มีก็เข้า else

ปล.ตัวเลขบนรูปเป็นเรื่องของ matching preview ซึ่งมันคล้ายๆกับการให้คะแนนความเหมือนของรูปนั้น ซึ่งจะไม่ขอลงลึกในบทความนี้

 

sleep(),wait()

ฟังก์ชั่นนี้ผมใช้ในการรอบางอย่าง เพราะบางฟังก์ชั่นของโปรแกรมทำงานไวกว่า การเคลื่อนไหวบนหน้าเว็บของเรา แล้วอาจทำให้พลาดบางอย่างที่สำคัญไป ซึ่งผมได้ใช้ wait(“something”,FOREVER) ด้วย หากสงสัยก็ลองนำไปใช้ดูนะครับ แต่ระวังการใช้นิดนึงเพราะมัน forever จริง ซึ่งอาจทำให้โปรแกรมค้างได้


เพิ่มเติมหากคุณอยากจะใช้ sikuli ร่วมกันหลายไฟล์

ยกตัวอย่างให้เห็นภาพชัดขึ้น

ผมมีไฟล์อยู่ 2 ไฟล์คือ test.sikuli และ say.sikuli

say.sikuli

test.sikuli

ใน say.sikuli หากต้องการให้ฟังก์ชั่นทั้งหมด ใช้หากถูกเรียก

ถ้าได้ลองเขียนตามนี้ แล้วรันไฟล์ test.sikuli ก็จะมี popup แสดงขึ้นมา 2 อันตามที่ได้เรียกในฟังก์ชั่น

เพิ่มเติม2

หากคุณได้พบปัญหาเช่นเดียวกันกับผม

SyntaxError ( !!WHILE IMPORTING!! Non-ASCII character in file “ {path file}” but no encoding declared; see http://www.python.org/peps/pep-0263.html for details )

นี้เลยครับ

# -*- coding: utf-8 -*-

1 บรรทัดวิเศษที่จะช่วยคุณได้ นำไปไว้ในไฟล์ที่มีปัญหานะครับ

รีวิวภาพรวม

ความคิดเห็นสำหรับ จากที่ได้ลองศึกษาและใช้งานจริง กับเจ้า sikuli อยู่ 3 วันเต็ม ถ้าหากเทียบกับเทียบกับ system test ตัวอื่นมันก็มีข้อดี ข้อเสียต่างกัน

ข้อดี
  1. เหมาะกับ system test ที่เป็น javascript ซะส่วนใหญ่ ไม่มี tag ให้เช็ค
  2. เขียนง่ายทำ ความเข้าใจง่าย(ผมไม่เคยเขียน python มาก่อน)
ข้อเสีย
  1. ความไม่เสถียรของโปรแกรม ค้างได้ง่าย หากคุณเขียนโปรแกรมไม่ดี โปรแกรมค้างแน่นอน
  2. ไม่เหมาะกับงานที่ในหน้าโปรแกรม รูปในหน้าจอไม่แตกต่างกัน เพราะโปรแกรม จะแยกไม่ค่อยออก บางทีแค่คุณเปลี่ยนขนาดหน้าจอ ก็อาจทำให้โปรแกรมสับสนได้
  3. หากใช้ mac รันใน terminal จะเสถียรกว่านะครับ
และนี้ก็เป็นทั้งหมดของการได้ลองใช้ และใช้จริงกับเจ้า sikuli หวังว่าบทความนี้ จะมีประโยชน์กับคนที่ผ่านเข้ามาอ่าน แล้วติดปัญหากับมันอยู่ ไม่มากก็น้อย

tags : sikuli system test



ติดตามข่าวสารและเรื่องราวดีๆ ทาง Email