เมื่อ Test Engineer อย่างฉัน… อยากยกระดับการใช้ Robot Framework
ก่อนอื่นเรามาพูดถึงชื่อบทความกันก่อนค่ะ อันดับแรกเลย…
Test Engineer คืออะไร
Test Engineer แปลตรงตัวได้ว่า “วิศวกรทดสอบ” ค่ะ แต่ถ้าเจาะลึกลงไปอีกนิด Test Engineer ที่เรากำลังพูดถึงคือคนที่ทดสอบระบบหรือแอปพลิเคชันด้วยเทคนิคต่าง ๆ ไม่ว่าจะเป็นแบบ Manual หรือ Test Automation เพื่อยืนยันว่าระบบที่ทำการทดสอบเนี่ยสามารถใช้งานได้จริง ทำงานได้ถูกต้อง และมีคุณภาพ
แล้วอะไรคือ Robot Framework
Robot Framework ก็คือ Framework นึงที่นิยมนำมาใช้ในการทำ Test Automation สำหรับใครที่อยากเข้าใจรายละเอียดและการทำงานเบื้องต้นของ Robot Framework เราขอนำเสนอบทความ Robot Framework ฉบับความรู้เริ่มต้น 0% ให้ทุกคนได้ทำความรู้จักกันก่อนค่ะ
รู้จักกับ Robot Framework กันไปคร่าว ๆ แล้ว ไม่ยากเกินความสามารถใช่มั้ยคะ ตอนนี้มาเข้าสู่เนื้อหาของเรากันเลยค่ะ 3 2 1 Go!!
Command Line ใช้ได้ ใช้ดี ใช้แบบมีระดับ
เมื่อเราทำการเขียน Test Automate Script ด้วย Robot Framework เสร็จแล้ว เราจะรู้ได้ยังไงว่าสคริปที่เราเขียนทำงานได้ถูกต้อง นำไปใช้ได้จริง… ใช่ค่ะ ต้องทำการ Execute นั่นเอง
การ Execute มีหลายแบบด้วยกัน จะเขียนด้วย RIDE แค่กด Run แล้วรอดูผลสวย ๆ ก็ได้ แต่ในเมื่อเกริ่นไว้ตอนต้นแล้วว่าเราจะใช้แบบมีระดับ จะกด Run รอดูผลเฉย ๆ ก็คงไม่รู้สึกสวยมีระดับมากพอ เราขอยกระดับการ Execute ขึ้นไปอีกด้วยการใช้คำสั่งผ่าน Command Line ค่ะ ทีนี้ก็จะได้รู้กันว่ารันออกมาแล้วจะปังหรือพัง
เรามาเริ่มกันที่การ Execute แบบบ้าน ๆ ที่สุดกันก่อน รันแบบง่าย ๆ ที่ระบุชื่อไฟล์ไปตรง ๆ ตามนี้เลยค่ะ
robot example.robot
หรือถ้าจะให้พิสดารกว่าเดิมสักนิดด้วยการ Execute ไฟล์ที่อยู่ในโฟลเดอร์อื่น ๆ เราสามารถใช้คำสั่งในรูปแบบนี้ได้เลย
robot D:\project\folder\example.robot
เพียงเท่านี้เราก็จะสามารถรันไฟล์ .robot ของเราได้เรียบร้อย
แต่!! แค่การ Execute แบบที่ว่ามาก็ยังไม่รู้สึกสวย ๆ สักเท่าไหร่ เพราะฉะนั้น… เราจะยกระดับการ Execute ขึ้นไปอีกค่ะ
Execute ไฟล์เดียวได้ แต่ถ้ามีหลายไฟล์ จะรันพร้อมกันได้มั้ยนะ
Robot Framework ถูกนำมาใช้เพื่อช่วยผ่อนแรงในการทดสอบระบบ หรือถ้าอธิบายแบบชัด ๆ จะแปลได้ว่าเรามีหลากหลาย Test Cases ที่อยากจะลอง แต่ถ้ามาลองเองทั้งหมดก็จะเปลืองทั้งเวลาและพลังงาน เราจึงดึงตัวน้อง Robot Framework มาทำให้ชีวิตเราง่ายขึ้น
คำสั่งก่อนหน้านี้คือการ Execute Test Cases ทั้งหมดในไฟล์เดียวไปเลย แต่ถ้ามีหลาย Test Cases แล้วยังมีหลายไฟล์อีกล่ะ เราต้องรันทีละไฟล์เองเหรอ?
ลองดูจากรูปด้านบน จะเห็นว่ามีไฟล์ .robot อยู่ตั้ง 5 ไฟล์ แล้วยังแยกเก็บเป็น 2 โฟลเดอร์อีกต่างหาก งานจริงบอกเลยว่าจะมีเยอะกว่านี้อีกค่ะ แค่คิดว่าต้องมาไล่รันด้วยตัวเองทีละไฟล์จนครบก็เหนื่อยแล้ว งั้นเราขอช่วยผ่อนแรงทุกคนด้วยคำสั่งนี้ค่ะ
robot folder
แต่ ๆ ๆ อย่าเพิ่งรีบเอา Robot Folder ไปใช้ตรง ๆ เชียวนะ เพราะนี่เป็นแค่รูปแบบของคำสั่งที่นำมาให้เห็นภาพเฉย ๆ ตอนเอาไปใช้งานจริงจะต้องระบุโฟลเดอร์ที่เราอยาก Execute เข้าไปด้วยค่ะ เช่น
robot D:\Robot\test\1_searchrobot D:\Robot\test\2_loginrobot D:\Robot\test
3 คำสั่งด้านบนจะเป็นการรันไฟล์ .robot ทั้งหมดที่อยู่ในโฟลเดอร์ name 1_search (3 ไฟล์), โฟลเดอร์ name 2_login (2 ไฟล์) และโฟลเดอร์ name test (5 ไฟล์) ตามลำดับ
มาถึงตรงนี้อาจจะมีคนรู้สึกว่า เอ๊ะ? แล้วถ้าเราอยากรันหลายไฟล์ แต่ไม่ใช่ทุกไฟล์ในโฟลเดอร์จะทำยังไง ไม่ต้องห่วงเลยค่ะ เรามีรูปแบบคำสั่งสำหรับเลือกรันจากชื่อไฟล์มาให้เหมือนกัน
robot example1.robot example2.robot
ถ้าเกิดว่าเราไม่แน่ใจตำแหน่งของไฟล์ว่าอยู่ที่ไหนกันแน่ หรืออยากรันไฟล์ที่อยู่ในโฟลเดอร์ต่างกัน ตัวคำสั่งสามารถใส่เป็น Path ไปได้เลย ถ้าอ้างอิงจากรูปด้านบน ชุดคำสั่งก็จะเป็นได้ตามนี้ค่ะ
robot search_ex_1.robot search_ex_3.robotrobot D:\Robot\test\1_search\search_ex_1.robot D:\Robot\test\2_login\login_ex_1.robot
นอกจากการรันแบบระบุไฟล์หรือระบุโฟลเดอร์ คราวนี้ลองดูอีกแบบกันค่ะ
ไม่อยากรันทุก Test Cases อยากจะรันแค่บาง Test Cases
เรามีการรันแบบกลุ่มใหญ่ทั้งที่เป็นไฟล์กับโฟลเดอร์กันไปแล้ว คราวนี้เราไม่อยากรันทั้งกลุ่มแล้ว อยากรันแค่ส่วนเล็ก ๆ ข้างในแทน จะทำยังไงดีนะ
ไม่ยากเลยค่ะ เริ่มจากเลือกชื่อ Test Cases ที่ต้องการรันและใช้รูปแบบคำสั่งที่ยกระดับขึ้นอีกนิด ด้วยการใส่ -t แล้วตามด้วยชื่อ Test Cases เข้าไปตามนี้เลย
robot -t Testcase_name_1 -t Testcase_name_2 example.robotrobot -t Testcase_name_1 -t Testcase_name_2 folder
ถ้าอ้างอิงจากรูปด้านบนจะได้ตัวอย่างตามนี้ค่ะ
robot -t SEARCH_001 D:\Robot\test\1_search\search_ex_1.robotrobot -t SEARCH_001 -t SEARCH_003 D:\Robot\test\1_search
จาก 2 คำสั่งด้านบน คำสั่งแรกจะรันเฉพาะ Test Cases ชื่อ SEARCH_001 ส่วนคำสั่งที่ 2 จะรัน Test Cases ชื่อ SEARCH_001 และ SEARCH_003 เพียงเท่านี้เราก็สามารถเจาะจงชื่อ Test Cases ที่เราอยากรันได้แล้ว
เพิ่ม Tags เข้าไปให้การรันมีสีสัน
Tags คืออะไร? เอามาใช้ในการ Execute ด้วยเหรอ? จริง ๆ แล้วถ้าย้อนกลับไปดูด้านบน ก็จะเห็นว่า Tags อยู่กับเรามาตั้งแต่ตอนนั้นแล้วค่ะ
Tags อยู่ตรงที่ลูกศรชี้อยู่นั่นเองค่ะ โดยเราจะเป็นคนกำหนด Tags ให้แต่ละ Test Cases เอง เหมือนกับที่เราตั้งชื่อให้ Test Cases ค่ะ ในเมื่อเราเป็นคนกำหนดชื่อ Test Case กับ Tag ขึ้นเองได้ แล้ว Tags จะต่างกับ Test Cases ยังไง?
เปรียบเทียบง่าย ๆ ชื่อ Test Cases ก็เหมือนชื่อคนค่ะ สามารถมีได้แค่ชื่อเดียว แล้วถ้าเราตั้งชื่อซ้ำกันก็จะทำให้สับสนได้ เหมือนมีเพื่อนชื่อซ้ำกัน 3 คน พอเราเรียกชื่อ เค้าก็หันมาทั้ง 3 คนเลย ส่วน Tags จะเหมือนกับลักษณะของคนค่ะ คนเราสามารถมีลักษณะหลายอย่าง ต่อให้ชื่อเดียวกันก็มีลักษณะต่างกันได้ คนนึงอาจผมสั้น คนนึงผมยาว คนนึงใส่แว่น คนนึงไม่ใส่แว่น การบอกลักษณะพวกนี้ก็จะช่วยจิ้มได้ว่าเราหมายถึงคนไหน ดังนั้นในตัว Test Cases สามารถมีได้หลาย Tags เพื่อช่วยบอกว่าเรากำลังเรียก Test Cases ไหนอยู่
พอจะเห็นภาพกันแล้ว ทีนี้เรามายกระดับด้วยการใช้ Tags และรูปแบบคำสั่งกันค่ะ เริ่มด้วยการใส่ -i แล้วตามด้วย Tags ที่ต้องการเข้าไปในคำสั่งตามนี้เลย
robot -i tag example.robot
ถ้าอ้างอิงจากภาพด้านบนก็จะได้ตัวอย่างตามนี้
robot -i food D:\Robot\test\1_search \search_ex_1.robotrobot -i food -i image D:\Robot\test\1_search
มีคำสั่งเลือกเฉพาะ Test Cases ที่มี Tags ที่ต้องการแล้ว… ยัง ๆๆ ยังไม่หมดค่ะ คราวนี้เรามายกระดับด้วยวิธีรันทั้งหมด ยกเว้น Test Cases ที่มี Tags ที่ระบุไว้ ด้วยการใส่ -e แล้วตามด้วย Tags ที่ไม่อยากรันแบบนี้ค่ะ
robot -e tag example.robot
จะได้เป็นคำสั่งประมาณนี้
robot -e animal D:\Robot\test\1_search
เท่านี้เราก็สามารถนำการใช้ Tags มาช่วยในการ Execute ได้แล้วค่ะ
ใช้ Command Line มาช่วยดูผล
อ่านมาจนถึงตรงนี้ เรามีวิธีช่วยในการ Execute เพิ่มขึ้นมาหลายวิธี แน่นอนค่ะว่า Execute ออกมาแล้วก็ต้องดูผลสิเนอะ เจ้า Robot Framework จะทำการ Generate ไฟล์มาให้ 2 ไฟล์ที่เราสามารถเข้าไปดูผลลัพธ์ได้ คือ report.html และ log.html
ดูจากภาพด้านบน จะเห็นว่าไฟล์ที่ได้มาถูกเก็บไว้ไม่เป็นที่เป็นทางเอาเสียเลย เพราะงั้นเราจะเริ่มกันด้วยการใส่ -d แล้วตามด้วยชื่อโฟลเดอร์ที่ต้องการเก็บผลการ Execute ตามนี้ค่ะ
robot -d folder_result example.robot
คำสั่งนี้จะเก็บไฟล์ผลลัพธ์ลงในโฟลเดอร์ที่ระบุไว้ หรือถ้าเรายังไม่ได้สร้างโฟลเดอร์ขึ้นมา คำสั่งนี้ก็จะทำการสร้าง โฟลเดอร์ชื่อเดียวกับที่เราเขียนไว้ให้เรียบร้อยเลยค่ะ ยกตัวอย่างเช่น…
robot -d result D:\Robot\test\1_search\search_ex_1.robot
ตอนนี้ไฟล์ที่ได้จากการ Execute จะถูกเก็บไว้ในโฟลเดอร์ที่เราใส่ไว้ในคำสั่งเรียบร้อยสวยงาม
แต่… เอ๊ะ?
ลอง รันอีกที… อีกที… และอีกที
สังเกตมั้ยคะว่าถ้าใช้คำสั่งให้เก็บไฟล์ผลการ Execute ไว้ที่เดียวกัน ต่อให้รันอีกกี่ครั้งก็ไม่มีไฟล์เพิ่มขึ้นมา คำตอบคือพอรันใหม่ ไฟล์ผลลัพธ์ใหม่ก็จะไปทับไฟล์เก่านั่นเอง แต่บางครั้งเราก็อยากเก็บผลการรันของครั้งก่อนหน้าไว้เปรียบเทียบกับที่แก้แล้วใช่มั้ยล่ะคะ ไม่ต้องห่วงค่ะ เราสามารถใส่ -T เข้าไปด้วย เพื่อทำการใส่ Timestamp ไว้ในชื่อไฟล์ที่ได้จากการ Execute เท่านี้พอทำการรันครั้งต่อไป ไฟล์ที่ได้ก็จะมีชื่อไม่ซ้ำกันและไม่ถูกเขียนทับอีกด้วยค่ะ
robot -T example.robot
ได้ไฟล์ผลการ Execute หลายอันไว้ดูเปรียบเทียบกันก็ดีอยู่หรอก ถ้าลองรันไม่กี่ครั้งก็ใช้สะดวกดี แต่ดูจากภาพด้านบนแล้วเห็นชื่อไฟล์เป็นอย่างนี้ ดูไม่ออกเลยว่าแต่ละอันต่างกันยังไง ลืมไปแล้วว่าทำไมตอนนั้นเราถึงต้องรันใหม่
เพราะฉะนั้นเราจะทำการใช้คำสั่งเพื่อตั้งชื่อ Log ใหม่ตามที่เราต้องการ โดยใส่ -l แล้วตามด้วยชื่อ Log ที่ตั้งขึ้น กับอีกคำสั่งสำหรับตั้งชื่อ Report ใหม่ตามที่ต้องการ โดยใส่ -r แล้วตามด้วยชื่อ Report ที่ตั้งขึ้นมา ดังนี้
robot -l log_name example.robotrobot -r report_name example.robot
เท่านี้เราก็สามารถตั้งชื่อไฟล์ log.html กับ report.html ขึ้นมาใหม่สำหรับการรันในครั้งนั้นได้แล้ว ยกตัวอย่างก็จะเป็นประมาณนี้
robot -l newlog -r newreport D:\Robot\test\1_search\ search_ex_1.robot
เปลี่ยนชื่อไฟล์ที่ได้จากการ Execute เรียบร้อย ทีนี้ลองแกล้ง ๆ เปิดดูไฟล์สักนิดซิ
เอ๊ะ! Title ของ Log กับ Report ยังใช้ชื่อตามไฟล์หรือโฟลเดอร์ที่รันอยู่เลยนี่ อย่างภาพด้านบนก็มาจากการรันไฟล์ search_ex_1.robot พอเปิด report.html ได้ Title เป็น Search Ex 1 Report หรือพอเปิด log.html ได้ Title เป็น Search Ex 1 Log ถึงจะตั้งชื่อไฟล์ต่างกันแล้ว แต่ถ้าเปิดพร้อมกันหลาย ๆ ไฟล์ก็ตาลายหมดน่ะสิว่าอันไหนเป็นอันไหน
ดังนั้นเรามาทำการยกระดับคำสั่ง ด้วยการใส่ — reporttitle ตามด้วย Title ใหม่ เพื่อเปลี่ยน Title ของ Report และใส่ — logtitle ตามด้วย Title ใหม่ เพื่อเปลี่ยน Title ของ Log ค่ะ
robot --reporttitle new_title example.robotrobot --logtitle new_title example.robot
ทีนี้ Report กับ Log ของเราก็จะมี Title ใหม่ตามที่เราเขียนไว้เลยค่ะ คำสั่งกับผลลัพธ์จะมีหน้าตาประมาณนี้
robot --reporttitle This_is_new_report --logtitle “This is new log” D:\Robot\test\1_search\ search_ex_1.robot
Note: จากคำสั่งด้านบน สังเกตมั้ยคะว่าตอนใช้คำสั่งเปลี่ยน Log Title เราได้ใช้ฟันหนู (“”) ตรง Title ใหม่ของ Log เป็น “This is new log” จริง ๆ แล้วเราสามารถใช้ฟันหนูได้ทั้งชื่อ Test Cases ชื่อไฟล์ ชื่อโฟลเดอร์ Path และชื่ออื่น ๆ ที่มีเว้นวรรคค่ะ ยกตัวอย่างเช่น
robot -d “result folder” -r “new report file” “D:\Robot\test\new folder\example.robot”
อ่านมาถึงตรงนี้แล้ว หวังว่าสิ่งที่ Test Engineer ตัวน้อย ๆ คนนี้เขียน จะช่วยยกระดับการใช้ Robot Framework ให้ทุกคนที่กำลังสนใจหรือกำลังใช้งานน้อง Robot Framework ได้นะคะ ไว้พบกันใหม่ในบทความถัดไปค่ะ
สำหรับชาวเทคคนไหนที่สนใจเรื่องราวดีๆแบบนี้ หรืออยากเรียนรู้เกี่ยวกับ Product ใหม่ๆ ของ KBTG สามารถติดตามรายละเอียดกันได้ที่เว็บไซต์ www.kbtg.tech