Sunday, November 30, 2014

รู้จักกับ New Media Art กันหน่อย

เมื่อวันเสาร์ที่ 1 พฤษจิกายน 2557 ที่ผ่านมา ได้มีโอกาสไปร่วมงาน Codemania มาครับ เป็นงานเกี่ยวกับแวดวงซอฟต์แวร์ที่รวบรวมคนมาได้หลายหลายมาก นับเป็นงานที่ดีงานหนึ่งเลยครับ จะติดตามต่อไป

ในงานมี Session หนึ่งที่สะกิดความสนใจผม ก็คือ When Programming Meets Art ซึ่งเปิดหูเปิดตามากครับ ไม่นึกว่าเมืองไทยจะมีงานแบบนี้อยู่ด้วย เลยอยากเอามาเล่าต่อครับ

ถ้าพูดถึงงานศิลปะกับซอฟต์แวร์ จะนึกถึงอะไรกันครับ หลักๆเลย ก็คงเป็นเว็บ แอพฯ หรือ เกม อะไรพวกนี้ใช่มั้ยครับ แต่ใน session นี้เขาพูดถึงอีกแขนงหนึ่งที่ไม่ค่อยเห็นคนทำกันเท่าไหร่ในบ้านเรา ก็คือ Software ทางด้าน Visual Effect ครับ พวกเอฟเฟกต์ต่างๆในหนัง แสงเงา ขนสัตว์ ฯลฯ อะไรงี้ ที่ยกตัวอย่างกันบ่อยๆ ก็เช่นพี่เสือใน Life of Pi ก็มีการเขียนซอฟต์แวร์เพื่อเรนเดอร์ขนของพี่เสือให้มันพริ้วๆอย่างที่เห็นในหนังแหละครับ

ทีนี้ อยู่ๆไปเหมือนกับว่างบประมาณทางด้าน Visual effect นี้จะค่อยๆลดลง จะด้วยเหตุผลอะไรก็ตามแต่
แต่เอาเป็นว่า คนที่ทำงานด้านนี้เริ่มจะอยู่ไม่ไหวกันแล้ว ก็เลยมีการนำเอางานทางด้านนี้ไปประยุกต์ใช้กับอย่างอื่นดูบ้าง ไปๆมาๆ ก็มาลงที่ New Media Arts นี่ล่ะครับ

Wikipedia เค้าว่างี้

New media art is a genre that encompasses artworks created with new media technologies, including digital artcomputer graphicscomputer animationvirtual artInternet artinteractive artvideo gamescomputer robotics, and art as biotechnology. The term differentiates itself by its resulting cultural objects and social events, which can be seen in opposition to those deriving from old visual arts (i.e. traditional painting, sculpture, etc.). 
ที่เหลือไปอ่านต่อเอาเองนะครับ

ต่อมาก็เอาตัวอย่างมาโชว์ให้เราดู สองสามอัน อย่างเช่นตัวนี้ค่อนข้างตั้งใจนำเสนอเลยทีเดียว ชื่อว่า Moment of truth ครับ คนที่เดินผ่านไปผ่านมาสามารถเล่นกับมันได้ด้วย โดยรูปแบบของการไหลนั้นมาจากลายหินอ่อนครับ (ถ้าจำไม่ผิดน่าจำทำให้ cotton)
https://www.youtube.com/watch?v=RXICUjebT8o
นอกจากนี้ยังมีอีกหลายอันครับ เข้าไปดูได้ในเว็บของเขาได้เลย
http://www.thebitstudio.com/

ที่ยอดเยี่ยมอีกอย่างนึงคือ เขามี Testing ด้วยนะครับ ตอนแรกนี่ไม่เห็นภาพเลยว่าของแบบนี้มันจะ Test ยังไง ผมก็ถามว่าเขาทำยังไง ก็ได้รับคำตอบประมาณว่าเขียนโปรแกรมขึ้นมาอีกตัวเพื่อทำการจำลองว่าคนจะเข้ามา interact ยังไง คือรู้สึกได้เลยว่าไม่ได้ทำกันชุ่ยๆแน่นอนครับ ผมเชื่อว่าแต่ละขั้นตอนมันต้องปราณีตมากๆ กว่าจะได้ Product ออกมาแบบนี้ นับถือเลยครับ

Thursday, September 25, 2014

เพิ่มความสนุกสนานในการทำงานด้วย Jenkins sound plugin


ในทีมที่ผมทำงานอยู่เราใช้ Jenkins กันครับ

ปกติแล้วเราก็จะเอาจอมาเปิดหน้า Dashboard ทิ้งเอาไว้เพื่อคอยดูว่ามีอะไรพังบ้าง

ทีนี้บางทีเราก็ทำงานกันแบบหน้ามืดตามัว ไม่ได้สนใจมันเท่าไหร่หรอก มาดูอีกทีก็จบวันแล้ว อะไรแบบนั้น

เพื่อแก้ปัญหานั้น ก็เลยต้องมีเครื่องมือมาช่วยให้มัน เรียกร้องความสนใจซักหน่อย ซึ่งก็มีหลายวิธี แต่แบบถูกที่สุด และนิยมใช้กันก็คือ Sound plugin นั่นเอง

ซึ่งมันจะไปเพิ่มความสามารถให้ Jenkins สามารถส่งเสียงออกมาเวลาที่มันทำงานสำเร็จหรือล้มเหลวได้
ทีนี้ เวลาเรา Push code แล้วก้จะมีเสียงมาคอยบอกสถานะของเราตลอดเวลาแล้วครับ อย่าลืมเลือกเสียงที่ฟังแล้วรู้ได้เลยว่ามันสำเร็จหรือล้มเหลวด้วยนะครับ ซึ่งทำให้บรรยากาศในการทำงานสนุกขึ้นมากทีเดียว เรียกความสนใจจากคนในทีมและนอกทีมได้ดี เวลามีของพังก็รู้ได้เลย แล้วก็มาช่วยกันแก้ปัญหาครับ

รายละเอียดเข้าไปดูได้ที่นี่ครับ 
https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+Sounds+plugin

วิธีการติดตั้งก็ไม่ยาก ก็เป็น Jenkins plugin ธรรมดาๆนี่แหละ

เสร็จแล้วมันจะโผล่มาใน Post built action  ของเราครับ ชื่อว่า Jenkins sounds โดย 1 job มีได้แค่ 1 อัน เท่านั้น

พอเพิ่มเข้าไปแล้วมันจะมีหน้าตาแบบนี้ครับ ผมก็จัดการให้มันมีเสียงเมื่อเกิดเหตุการณ์สองอย่างคือ Success กับ fail

จากในรูป ผมได้ทำการเพิ่มเสียงเข้าไปเองอีก ไว้จะมาแนะนำในโอกาสหน้าครับ

Saturday, July 12, 2014

เกี่ยวกับ Environment variables ใน Robot framework


เมื่อเราใช้งาน Robot framework ไปสักพัก เรามักจะพบปัญหาว่า มีตัวแปรบางตัวที่ต้องเปลี่ยนไปมา ตาม environment ของระบบที่จะทดสอบ
ยกตัวอย่างให้เห็นจะจะเลยก็คือ การทดสอบบนเครื่องของเราเอง กับเครื่อง test server สองอย่างนี้ใช้ URL คนละที่กัน แล้วต่อๆไปก็จะมี UAT server, Production server ตามมาอีกล่ะ หรือ การใช้เลือก browser ที่จะทดสอบ เป็นต้น

การรันบนเครื่องเรานั้นทำได้ง่าย ก็แค่ไปแก้ไข Settings ของเราให้มันชี้ให้ถูกที่ซะก็จบ แต่ถ้าเป็นการรันบน Jenkins ล่ะจะทำยังไง

เท่าที่ไปคุ้ยๆมา ใน Robot framework ไม่ได้มีการทำไว้เป็นเรื่องเป็นราวแบบ Cucumber แต่สวรรค์ยังเมตตาเรายังสามารถกำหนดค่าตัวแปรผ่านทาง Command line ได้นะครับโดยหน้าตามันจะเป็นแบบนี้

pybot -v SERVER_URL:http://localhost:4567

ลองเขียน Robot test ขึ้นมาเพื่อทดสอบดูครับ

*** Settings ***
Library    Selenium2Library

*** Test cases ***
Just Open The Right Browser
Open Browser    ${SERVER_URL}

บันทึกเป็นชื่อว่า test_variable.txt ก็แล้วกัน ลองรันดู มันควรจะเปิด browser แล้วก็ไปที่ localhost ตามที่กำหนดนะครับ ส่วนเข้าได้หรือไม่ ไม่ต้องสนใจครับ

ทีนี้ ลองเปลี่ยน URL ที่จะทดสอบดู สมมติว่าเป็น www.google.com นะครับ เราไม่ต้องไปแก้ไฟล์อะไรครับ แค่เปลี่ยนที่ command line อย่างนี้

pybot -v SERVER_URL:http://www.google.com

พอ browser ถูกเปิดขึ้นมามันควรจะเข้าสู่หน้า Google นะครับ

พอเห็นภาพแล้วนะครับ แค่นี้เราก็มีวิธีการสลับ Profile แบบง่ายๆใช้แล้ว

ต่ออีกนิด เผื่ออยากจะสลับ Browser ด้วย ก็แค่เพิ่ม variable ไปอีกตัว

pybot -v SERVER_URL:http://localhost:4567 -v BROWSER:gc

ในไฟล์ test ของเรา ก็ไปเพิ่มแบบนี้

*** Settings ***
Library    Selenium2Library

*** Test cases ***
Just Open The Right Browser
Open Browser    ${SERVER_URL}    ${BROWSER}

เท่านี้การเปลี่ยน environment ก็จะทำได้ง่ายๆแล้วล่ะครับ

พอเห็นว่า command เริ่มยาวแล้ว ก็ทำไว้เป็น shell script หรือ batch file ก็ได้ครับ เพื่อจะได้เรียกใช้ได้สะดวกๆ อาจจะตั้งชื่อว่า localhost-gc, localhost-ff, dev-gc, dev-ff เป็นต้น

อย่างไรก็ตาม วิธีการนี้ยังมีข้อเสียอยู่นะครับ คือถ้าสั่ง pybot เฉยๆ หรือใส่ตัวแปรไม่ครบมันจะเจ๊ง เพราะมันไม่รู้จักตัวแปรพวกนี้ถ้าไม่ได้ใส่เข้าไปครับ ต้องหาวิธีแก้ไขกันต่อไป

Saturday, June 28, 2014

Jenkins ควร start เอง

สวัสดีครับ วันนี้ขอเขียนบล็อกสั้นๆ บันทึกความ fail ของผมเองครับ

เรื่องก็คือ ผมจะเอา script RobotFramework ที่ทำเอาไว้จากตอนก่อนๆไปรันบน Jenkins แต่ปรากฏว่ามันไม่สามารถเปิดโปรแกรมที่ผมต้องการจะทดสอบขึ้นมาได้ มันจะค้างจนกระทั่ง time out
ในตัวอย่างจะเห็นว่าผมมีการใช้ Wait For Active Window อยู่ ซึ่งเป็นการรอให้หน้าต่างโปรแกรมที่เราจะทดสอบถูกเปิดขึ้นมาก่อน

ผมก็หาอยู่นานสองนาน สามนาน หาไปหามาก็พบคำตอบหนึ่งน่าสนใจมาก จาก stackoverflow.com เจ้าเก่า (ขออภัย ผมหา link ไม่เจอแล้ว) ในกระทู้นั้นมีปัญหาคล้ายๆกันคือแกเปิด Desktop app จาก Jenkins job ไม่ได้ แล้วก็มีคนใจดีมาตอบให้

วิธีการนั้นคือ อย่าไปใช้ Jenkins ที่เป็น Windows serviceครับ ให้ไปโหลดตัว war มา แล้วเอามา start เอง

ในที่สุดก็เทสผ่านแล้ว! น้ำตาจะไหล ; _ ;

สรุปว่า Windows service ช่วยอำนวยความสำดวกให้ แต่ก็ไม่ได้ work ไปหมดทุกอย่างนะครับ (หรือ Jenkins มันไม่ใช่ผลิตภัณฑ์ของ Microsoft ก็ไม่รู้เนอะ อิอิ) ตัวเราเองก็ควรจะรู้ด้วยว่าเครื่องมือที่เราเอามาใช้นั้น จะสั่งให้มันทำงานได้อย่างไร อย่าเอาแต่ Double click แล้วก็กด next รัวๆเลยนะครับ :)

Monday, May 12, 2014

Robotframework+AutoItLibrary: ขจัดความซ้ำซ้อน

สวัสดีครับ ต่อจากตอนที่แล้ว เรามี Test case สำหรับปุ่มเลข 1 กับ 2 ละ ก็เหลือ 3 - 9 เนอะ

ทีนี้เราจะเพิ่ม Test case สำหรับ ปุ่มที่ 3 เราจะทำยังไงดี Copy มาเลยเหมือนตอนที่แล้วดีมั้ย มันก็ง่ายดีนะ

แต่ช้าก่อนสหาย ลองหยุดแล้วคิดสักหน่อยนะ ถ้าเรา Copy ได้ แปลว่ามันเหมือนกันน่ะสิ เปลี่ยนแค่ Parameter นิดหน่อยเอง ลองสังเกตดูใน Test ของเราให้ดีๆเถิด

เราจะพบว่า มันเหมือนกันมากๆ (ก็แหงล่ะ Copy กันมา) ต่างกันตรงที่ขีดเส้นไว้เท่านั้นแหละ

นี่เรียกว่าความซ้ำซ้อน(Duplicate)ครับ ถ้าปล่อยเอาไว้อย่างนี้ ก็ไม่มีปัญหาอะไรหรอก เราก็ยัง Test ได้ตามปกติ แต่มันจะมีปัญหาเมื่อเวลาผ่านไปเรื่อยๆครับ อย่างเช่นเราจะเพิ่มหรือลด Keyword ก็ต้องไล่ทำทีละอันๆ (อย่างเช่นในตัวอย่างนี้ มีตั้งแต่ 1 - 9 ) คนเราทำอะไรที่มันซ้ำๆ ไม่เก่งหรอกครับ ให้มันช่วยเราดีกว่า

เริ่มจากทำให้ Keyword รับ arguments ครับ แล้วก็เปลี่ยนตรงที่เรียกใช้ Keyword ให้เป็น Argument แทน

ลองรันเทสดู ถ้ายังผ่านก็ไปต่อได้ ขอไม่อนุญาตไม่แปะรูปนะครับ ไม่มีอะไรใหม่

แก้ Keyword อันต่อไปให้รับ Argument เหมือนกัน

เสร็จแล้วรันเทส ต้องยังผ่านอยู่นะครับ

ทีนี้ไปเปลี่ยน Test case อันที่สองให้เป็นแบบ Test case อันแรกดู ต้องเทสผ่านเหมือนเดิมนะ

เราจะเห็นว่า Keyword 'Click Button 2' และ 'Answer Should Be 2' นั้นไม่จำเป็นแล้ว ลบทิ้งไปได้เลย

เป็นไงฮะ ดูสะอาดขึ้นเยอะเลยใช่มั้ยครับ เหลือแค่ 30 บรรทัดเท่านั้นเอง อย่าลืมรันเทสอีกครั้ง เพื่อความมั่นใจ

ทีนี้กลับมาดูที่ Test case เราจะพบว่ามันมีความซ้ำซ้อนอยู่เช่นกัน

ลองดูดีๆเราจะพบว่า สามารถเขียนออกมาเป็นตารางได้

ฺฺNumberButton id
1Button44
2Button49

ซึ่งเราสามารถเอาไปใช้ใน Robot framework ได้เช่นกัน แต่ต้องปรับเปลี่ยนอะไรสักหน่อย

ก็คือเพิ่ม Keyword ที่เป็น Test rule เข้าไป แล้วก็เพิ่ม Clear Answer เพราะว่า ข้อมูลในตารางทั้งหมดถือเป็น Test case อันเดียวครับ (โปรแกรมจะไม่ถูกปิดจนกว่าจะจบแต่ละ Test case)
จะเห็นว่า Test case อันที่ 2 ไม่จำเป็นอีกแล้ว ลบทิ้งไปครับ
แล้วลองทำการทดสอบดูอีกครั้ง ยังผ่านเหมือนเดิม แต่จะเหลือแค่ Case เดียว

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


อย่าลืมแก้กลับให้ถูกต้องด้วยนะครับ

มาดูปุ่มที่เหลือกันต่อ สบายแล้วทีนี้ แค่เพิ่มข้อมูลเข้าไปเท่านั้นเอง ลองเอา Au3Info ไปจับกับปุ่มตัวเลขที่เหลือดูเลยครับ

ตอนหน้ามาลองเขียน Test ที่มันซับซ้อนมากขึ้นครับ อย่างเช่นการบวกเลข ลองไปนั่งนึกหรือลองเขียนดูเลยก็ได้ครับ

ก่อนไป ขอบอกไว้ก่อนว่า ทำไปก่อนจนมองเห็นความซ้ำซ้อน(หรือ Pattern)แล้วค่อยหาทางกำจัดนะครับ ถ้าพยายามป้องกันตั้งแต่แรก เราอาจจะเหนื่อยโดยไม่จำเป็น หรือหลงป่าเขารกเข้าพงไปเลยได้ นี่เตือนในฐานะเป็นผู้ประสบภัยมาก่อนนะครับ(ทุกวันนี้ก็ยังหลงเข้าไปอยู่เรื่อยๆ) อิอิ

Thursday, May 8, 2014

RobotFramework+AutoItLibrary: เปิดแล้วปิดด้วยสิ

สวัสดีครับ จากตอนที่แล้ว เราได้ Test case ง่ายๆมาแล้วหนึ่งอัน ตอนนี้เราจะมาทำปุ่มต่อไปกันครับ

ตอนนี้เราสนใจเฉพาะปุ่มตัวเลขไปก่อนแล้วกันเนอะ เพราะฉะนั้นเรายังเหลืออีก 8 ปุ่มที่จะเอามาทดสอบ ก็คือเลข 2 - 9

ลองไล่ไปตามลำดับก็แล้วกัน เริ่มจากเลข 2 ก็ทำเหมือนเดิมครับ เอา Finder ไปจับดูว่า Classname ของปุ่มเลข 2 คืออะไร แล้วก็ copy มาเลย

ถ้ารู้สึกตะหงิดๆก็เก็บไว้ในใจก่อนนะครับ ตอนนี้ save แล้วก็ run ดูก่อนครับ

จะเห็นว่าเทสมันก็ผ่านนะครับ แต่มีโปรแกรมมันเครื่องคิดเลขถูกเปิดขึ้นมาสองตัว ลองคิดดูถ้าเราเทสปุ่มตัวเลข 9 ปุ่ม ก็จะมีโปรแกรมเปิดขึ้นมา 9 ตัว แล้วถ้ามี Test case อื่นๆอีกนี่ ไม่ไหวแน่
เพราะงั้น เราควรจะให้มันปิดตัวเองหลังจากที่มันทำการทดสอบแต่ละ case เสร็จ ด้วย Keyword 'Win Close'

จะเห็น โปรแกรมเครื่องคิดเลข ถูกเปิดขึ้นมาเทสแล้วก็ปิดลงไป ซึ่งเทสของเรายังผ่านเหมือนเดิม
การเปิด และปิดโปรแกรม เราควรย้ายไปไว้ที่ Test setup (สิ่งที่ต้องทำก่อนเริ่มTest)และ Test teardown(สิ่งที่ต้องทำหลังTest) มากกว่า ถ้าเป็นงานจริงๆ คุณอาจจะต้อง Clean หรือ Backup Database นะครับ ก็เอาไว้ใน Setup นี่แหละ

ย้ายโลด

ลองรันดู ยังได้ผลเหมือนเดิม
อืมม แต่ตรง Teardown ยังไม่ค่อยสวยเนอะ เราสร้าง Stop Calculator มาไว้คู่กันดีกว่า

รันอีกทีต้องยังผ่านอยู่นะ ^^





Wednesday, May 7, 2014

Robotframework+AutoItLibrary:หัดใช้Controls

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

เริ่มจาก Click Button 1 ก่อนนะครับ อันนี้คือเราต้องการให้มันคลิกที่ปุ่มเลข 1 ในโปรแกรมเครื่องคิดเลข เราก็ไปดูที่ Document ของ AutoItLibrary เหมือนตอนที่แล้วนะครับ แต่คราวนี้มาดูจะกดปุ่มเนี่ย ต้องใช้คำสั่งอะไร
หาๆไปก็เจอ Control Click ที่มากับ Parameter อีกนิดหน่อย

ก็ดูไม่มีอะไรซับซ้อนนะ แต่ไอ้ Parameter พวกนี้จะเอามาจากไหนล่ะ

AutoItLibrary มีเครื่องมือมาให้แล้วครับ มีชื่อว่า Au3Info.exe มันนอนรอเราอยู่ที่
>C:\RobotFramework\Extensions\AutoItLibrary

เปิดขึ้นมาก็จะเจอหน้าตาแบบนี้

วิธีใช้งานนะครับ ก็ต้องเปิดโปรแกรมที่เราจะทำการทดสอบขึ้นมาก่อน แล้วก็ลากสัญลักษณ์กลมๆในช่อง Finder tool ไปที่ที่เราต้องการจะทราบข้อมูลของมัน ในตัวอย่างนี้ก็คือ ปุ่ม 1 ในโปรแกรมเครื่องคิดเลข ลองดูครับ

พอลากไปแล้ว สังเกตว่าจะมีข้อมูลปรากฏขึ้น ตรงที่ผมตีกรอบไว้นั่นคือ Parameter ตัวแรกของเราครับ ซึ่งมันก็คือข้อความใน Title bar ของโปรแกรมนั่นแหละ
Parameter ตัวที่2(strText)นั้นไม่จำเป็น เราสามารถข้ามไปตัวที่3(strControl)ได้เลย
โดยการคลิกที่แท็บ Control

ตัวที่ตีกรอบไว้นั่นแหละครับ คือข้อมูลที่เราจะเอามาใส่เป็น parameter ตัวที่สาม

เอามาใส่ใน Test ของเราครับ

${EMPTY} หมายถึงค่าว่างครับ เหมือนกับ Null หรือ None ใน Python คือถ้าเราไม่ต้องการใส่ Parameter ตัวไหน หรือต้องการปล่อยให้มันว่างๆไว้ ก็ใช้ตัวนี้ครับ 

อย่าลืมเคาะ Space bar 2ทีระหว่าง parameter นะครับ เสร็จแล้วลองรันดู

ก็ดูเหมือนจะโอเคแล้วนะ แต่ไม่เห็นมันจะกดปุ่มเลยอ่ะ

จริงๆแล้วไม่ใช่มันไม่กดครับ แต่มันกดไม่ทัน เพราะตัว Script มันจะทำงานเร็วมาก เราต้องบอกให้มันรอให้ Window ของโปรแกรมที่เราจะทดสอบเปิดขึ้นมาก่อนครับ
ผมจะเติมเข้าไปที่ Start Calculator นะครับ

แล้วลองรันดูอีกที เลข 1 ถูกกดแล้ว

เหลือ Keyword อันสุดท้าย ก็ทำเหมือนเดิมครับ ไปหาดูว่าจะเอาข้อมูลจาก Control เค้าทำยังไง

Control Get Text นี่น่าจะใช่แฮะ ลองเอามาใช้ดู

ซึ่งใน Keyword อันนี้เราจะนำค่าที่ได้มาทำการเปรียบเทียบ ก็ต้องมีตัวแปรมาเก็บไว้ ทำแบบนี้ครับ

เสร็จแล้วเอามาเทียบกันโดยการใช้ Keyword 'Should Be Equal' (เป็น Built in keyword ของ Robotframework)
เอาไว้เปรียบเทียบค่าต่างๆสองตัว ถ้าไม่เท่ากันก็ Fail รับ Parameter 4 ตัว แต่เราสนใจแค่ 2 ตัวแรกก็พอ 
ตัวแรกคือข้อความจากในช่อง Answer ของโปรแกรม
ส่วนตัวที่สองก็คือ ${ANSWER_TEXT} ที่เราเก็บไว้นั่นเอง

แล้วลองรันดู ยังไม่ผ่านแฮะ

ตรงนี้ต้องใช้เวลากับความพยายามสักหน่อยนะครับ ในการหาสาเหตุและแก้ปัญหาของมัน
ผมบอกเลยละกันครับ มันเป็นเพราะว่า ใน ${ANSWER_TEXT} ที่ได้มา มันมี space ต่อท้ายมาด้วยครับ ซึ่งเราแก้ปัญหาได้หลายแบบ วันนี้ขอแนะนำแบบง่ายๆ ก็คือใช้ฟังก์ชั่น strip() เพื่อกำจัด space ออกไปครับ

ลองดูอีกที ผ่านแล้ว!


ไม่นึกว่าเขียนไปเขียนมามันจะยาวขนาดนี้นะเนี่ย ตอนนี้ไปฉลองความสำเร็จให้กับ Test case เล็กๆกันก่อนครับ ตอนหน้ามาลองทดสอบปุ่มอื่นๆกัน

แถม Link ไปดูว่ามี Builtin keyword อะไรบ้าง
http://robotframework.googlecode.com/hg/doc/libraries/BuiltIn.html?r=2.8.4

Tuesday, May 6, 2014

ลองเขียน Robot framework + AutoItLibrary เปิดโปรแกรม

สวัสดีครับ ต่อจากตอนที่แล้ว ตอนนี้เรามีเครื่องมือพร้อมแล้ว ก็มาหัดเขียนกัน

ลองเปิดเข้าไปดูไฟล์ตัวอย่างนะครับที่
C:\RobotFramework\Extensions\AutoItLibrary\tests\Calculator_Test_Cases.html
จะพบว่า อะไรวะเนี่ย ยาวพรืดไปหมด ไม่รู้เรื่องเลยเฟร้ย!! เหมือนผมที่เริ่มหัดเขียนครั้งแรกนั่นแหละ ไม่เป็นไรครับ ค่อยๆทำไปด้วยกัน

Robot framework เขียนได้หลายแบบ ในตัวอย่างเป็นแบบ HTML เพื่อให้สามารถอ่านได้ง่าย ดูเป็นระเบียบมากยิ่งขึ้น แต่ในบทความนี้ผมจะเขียนเป็น Text file ธรรมดาๆครับ สำหรับการเริ่มต้น (HTML ผมเองก็ยังไม่เคยเขียนเหมือนกัน บอกเลย 555)

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

หมดเวลาครับ ผมจะเริ่มที่เคสพื้นๆก่อน อย่างเช่น กดปุ่ม 1 ต้องเห็นเลข 1 ในช่องคำตอบนะครับ
เอาไปเขียนเป็น Robot framework test case จะได้หน้าตาประมาณนี้

เสร็จแล้ว save (ผมตั้งชื่อไฟล์ว่า testcase.txt) แล้วลองรันดูเลยครับ เปิด command prompt แล้วไปยังที่ๆทำการ save เอาไว้ แล้วรันด้วยคำสั่ง
>pybot testcase.txt

จะพบกับ Error อีกแล้ว อย่าไปกลัวมันครับ เค้าก็แค่อยากจะบอกว่า มันยังทำงานไม่ได้นะ ดูสิว่าเราทำอะไรพลาดไป

มันบอกว่า ไม่รู้จัก Keyword ที่ชื่อ  Start Calculator ครับ เราก็ไปสร้าง Keyword นี้ขึ้นมา

แล้วลองรันดู ก็ยัง Error เหมือนเดิม แต่เปลี่ยนเป็นเพราะข้างใน Start Calculator มันยังไม่มีอะไรเลยน่ะสิ

โอเค มาทำให้มันผ่านกัน ตอนนี้เราต้องการให้มันเปิดโปรแกรมเครื่องคิดเลขขึ้นมาก่อน ก็ไปดูใน document ของ AutoItLibrary กันครับ ที่นี่ http://robotframework-autoitlibrary.googlecode.com/svn/tags/robotframework-AutoItLibrary-1.1/doc/AutoItLibrary.html มองหาคำสั่งที่เอาไว้เปิดโปรแกรม ก็คือคำสั่ง Run ตามด้วยชื่อไฟล์

อธิบายเล็กน้อย คำสั่ง Run นั้น ต้องการ arguments ก็คือชื่อไฟล์ calculator.exe ซึ่งวิธีการใส่ Arguments ใน Robotframework นั้นต้องเคาะ spacebar 2ครั้ง ระหว่างชื่อ keyword กับ arguments เคาะ sapcebar เท่านั้นนะครับ ห้ามใช้ tab เด็ดขาด!
เสร็จแล้วลองรันดูก็ยังไม่ผ่านอีก Keyword 'Run' คือไร ไม่รู้จัก

นั่นเพราะว่าเรายังไม่ได้บอกให้มันรับรู้ว่า เราต้องการใช้ Keyword จาก Auto Library นะ เราก็ต้องไปเพิ่ม settings ของ test เราครับ
อ้อ แก้ชื่อไฟล์ตรงบรรทัดสุดท้ายจาก calculator.exe เป็น calc.exe ด้วยครับ ผมจำผิด แหะๆ

เสร็จแล้วลองรันดูครับ โปรแกรมเครื่องคิดเลขจะเปิดขึ้นมาเองเลย

แต่ก็ยังไม่ผ่านนะครับ เพราะเรายังทำไม่ครบเลยนี่ แค่เปิดโปรแกรมก้ใช้พลังงานไปมหาศาลแล้วใช่มั้ยล่ะ ไว้ตอนหน้ามาต่อกัน กับการใช้งาน control ต่างๆ

ขออธิบายเพิ่มเติมหน่อย ที่มาของ calc.exe ก็คือมันเป็นโปรแกรมที่อยู่ใน path ของ windows อยู่แล้วนะครับ เลยใช้ได้เลย ถ้าเป็นโปรแกรมของเราเองหรือโปรแกรมอื่นๆที่ไม่ได้อยู่ใน System path ต้องระบุให้ถูกต้องนะครับ

Monday, May 5, 2014

ติดตั้ง Robot Framework + AutoItLibrary สำหรับ Automated testing กับ Windows application


ภาพจาก http://www.odedgov.com/index.php?/projectsbezalel/automata/


ไม่รู้จะเริ่มยังไง เอาเป็นว่า บทความนี้เป็นการแนะนำการติดตั้งเครื่องมือสำหรับการทำ Automated test ที่มีชื่อว่า Robot framework นะครับ ส่วนใหญ่เขาทำกับ Web application คราวนี้มาลอง Windows application กันดูบ้าง โดยผ่าน library ที่มีชื่อว่า AutoItLibrary ครับ เป็น library ที่เขียนครอบ AutoIt อีกที ซึ่งเจ้า AutoIt มันก็คือเครื่องมือที่เอาไว้รัน Automate script บน Windows อยู่แล้ว อยากรู้มากกว่านี้ลองเข้าไปอ่านที่ http://www.autoitscript.com/site/autoit/
อ้อ ก่อนอื่นผมแนะนำให้ไป download Virtualbox มาแล้วทำการติดตั้ง Windows แล้วลองติดตั้งเล่นใน virtual machine ดูก่อนนะครับ เผื่อว่าทำอะไรผิดพลาดไปจะได้ลบทิ้งแล้วเริ่มใหม่ได้ง่ายๆ Windows รุ่นที่แนะนำคือ XP ครับ ISO ก็คงหากันเองได้ไม่ยากหรอก(มั้ง)  ใหม่กว่านี้จะติดพวก UAC ต้องไปหาทาง disable เอา ไหนจะเรื่อง 32/64 bit อีก วุ่นวายตามประสา Windows

เริ่มกันเลย 
1.ติดตั้ง Python โดยไป Download ได้จาก https://www.python.org/download/ โดย version ที่แนะนำให้ใช้คือ 2.7 ขึ้นไป (3 ยังไม่เคยลองครับ) และควรใช้แค่ 32 บิต ก็พอ
2.ไปเพิ่ม path
C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\;
ที่ environment settings ของ Windows ตามนี้

ลองเปิด command prompt แล้วพิมพ์คำสั่ง python ดูครับ ควรจะได้หน้าตาประมาณนี้

3.ติดตั้ง pip โดยไปที่เพจนี้ https://pip.pypa.io/en/latest/installing.html ที่หัวข้อ Install pip จะเจอลิงค์ get-pip.py นะครับ คลิกขวาแล้ว save as มาไว้ในเครื่อง

เสร็จแล้วไปยังตำแหน่งที่เราเก็บไฟล์ get-pip.py เอาไว้(ผมเอาไว้ใน My documents\downloads) แล้วพิมพ์คำสั่ง
>python get-pip.py
รอสักพักจนมันติดตั้งเสร็จเรียบร้อย

แล้วลองพิมพ์คำสั่ง
>pip install
จะเจอ Error ประมาณนี้ แปลว่าคำสั่ง pip ใช้งานได้ครับ

4.ติดตั้ง Robot framework โดยพิมพ์
>pip install robotframework
เสร็จแล้วลองพิมพ์คำสั่ง
>pybot
จะเห็น Error อีกเช่นกัน แต่เป็นเพราะว่าเรายังไม่มีไฟล์ script ที่ใช้ในการเทส ไม่เป็นไร เดี๋ยวมีแน่

5.เสร็จแล้วไป Download AutoItLibrary มาครับ
แตก zip แล้วติดตั้งด้วย คำสั่ง
>python setup.py install
เราจะพบว่า ยังติดตั้งไม่ได้ ต้องลง pywin32 ก่อน

ก็ไปโหลดมาครับ ที่นี่ http://sourceforge.net/projects/pywin32/files/pywin32/ เลือกเอา build ล่าสุดสำหรับ Python 2.7 และ win32 นะครับ ดูดีๆ โหลดมา เป็นไฟล์ exe อยู่แล้วทำการติดตั้งได้เลยครับ

กลับไป install AutoItLibrary อีกที ผ่านแล้ว

6.ลองทดสอบดู โดยไปที่ C:\RobotFramework\Extensions\AutoItLibrary\tests เขาจะมีตัวอย่างไว้ให้แล้ว ลองทดสอบดูโดยการ run ไฟล์ที่ชื่อ Runtests.bat

โปรแกรม Calculator จะถูกเปิดขึ้นมา แล้วก็กดปุ่มต่างๆเองตาม script ในตัวอย่าง พร้อมแสดงผลของ Test case แต่ละอัน


รันจบแล้ว แต่มันยังไม่จบครับ จะโดนเตือนอีกว่า ยังไม่ได้ลง PIL(Python image library)  นะ ถ้าอยากจะให้ capture ภาพเอาไว้ช่วยลงให้ด้วย

โอเค เราก็ไปโหลดมา http://www.pythonware.com/products/pil/ (ไปโหลดมาเลยครับ อย่าไปหวังพึ่งพาอะไรกับ pip ใน Windows อิอิ) ติดตั้งเสร็จแล้วก็ ลองรัน test ดูใหม่ มันจะไม่เตือนเราแล้ว ทีนี้เข้าไปดูในโฟลเดอร์ results นะครับ เราจะเห็นภาพที่มัน capture เอาไว้ให้เรา


ตอนหน้ามาลองเขียน Test ง่ายๆเพื่อทำความรู้จักกับเจ้า AutoItLibrary กันครับ