Robot Framework 101 มาลองใช้กัน

Robot Framework (รูปที่ 1) เป็นเครื่องมือที่น่าสนใจเครื่องมือหนึ่งสำหรับทำ acceptance test และ acceptance-test driven development (ATDD) ของบรรดา Tester ทั้งหลาย รวมไปถึง Developer ด้วย ที่ว่าน่าสนใจก็เป็นเพราะว่าเครื่องมือนี้ช่วยให้เราสามารถ automate งานทดสอบทั้งหลายของเราได้ ตามที่เขียนไว้บนเว็บของ Robot เองเลย! (ในบทความนี้ผมขอเรียกสั้นๆ ว่า Robot นะ)

Robot Framework

รูปที่ 1: Robot Framework

Automated Test สำคัญด้วย?

ลองดูรูปที่ 2 ด้านล่างนี้

Geeks and repetitive tasks

รูปที่ 2: Geeks and repetitive task (by Bruno Olivera)

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

ช่วงเริ่มโปรเจคใหม่แรกๆ อาจจะดูช้า เสียเวลาไปในการเขียนสคริป แต่ถ้าลองมาคิดในระยะยาวดูบ้าง การที่เรามีเครื่องมีที่ช่วยเราทำงานซ้ำๆ นั้นสามารถช่วยให้เราเอาเวลาไปทำอย่างอื่นที่มีประโยชน์กว่า เอาเวลาไปทดสอบอะไรยากๆ เอาเวลาไปคิดถึง business รวมไปถึงการเอาเวลาพัฒนาตัวเอง 🙂

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

แล้วถ้าเทียบกับ Cucumber?

จากที่เคยใช้ Cucumber มาก่อนหน้านี้ เรื่องหลักๆ คือ Cucumber นั้นจะค่อนข้าง flexible มากกว่าในการเขียน test case เวลาเขียนจะใช้ภาษา Gherkin ซึ่งจะอ่านง่ายมาก เนื่องจากเป็น human language แต่ตรงจุดนี้ทำให้เวลาที่พวกเรา maintain ประโยคต่างๆ ทำได้ลำบาก เพราะว่าต่างคนต่างเขียนคนละสไตล์ เราสามารถบรรเทาเรื่องพวกนี้ได้โดยการมากำหนดสไตล์ให้เหมือนกันทั้งทีม แต่ว่าก็ทำได้ยากอยู่ดี ซึ่งจะต่างจาก Robot ที่จะมี Keywords ต่างๆ เช่น "Page Should Contain" หรือ "Submit Form" ให้เราเลือกใช้ เราจะไปใช้ "Page Should Have" ก็ไม่ได้ล่ะ ซึ่งตรงนี้สามารถควบคุมการเขียน test case ของเราได้

ชอบการเขียนแบบ Gherkin มากกว่า? ใน Robot ก็สามารถเขียนสไตล์นั้นได้นะ ลองดูตัวอย่างนี้ gherkin.robot

ส่วนเรื่อง performance อันนี้ต้องยอมรับอยู่แล้วว่าการรัน acceptance test นั้นช้าเป็นปกติอยู่แล้ว เพราะต้องเปิด browser แล้วจำลองการใช้งานจริง ไม่ขอเอามาเปรียบเทียบดีกว่า แล้วแต่ความชอบ

เริ่มใช้ Robot Framework

หมายเหตุก่อนเริ่ม เนื้อหาในบทความนี้ทำบนเครื่อง Mac นะครับ ซึ่งขั้นตอนหลักๆ ไม่ต่างกับของ Linux หรือ Windows ครับ สามารถนำไปประยุกต์ใช้ได้

เนื่องด้วยตัว Robot เขียนด้วย Python ดังนั้นเราจะมาดูกันก่อนว่าเรามี Python ติดตั้งอยู่หรือเปล่า ให้เปิด Terminal หรือ iTerm ขึ้นมา แล้วสั่ง python

$ python
Python 2.7.13 (default, Dec 18 2016, 07:03:39)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

แนะนำให้ใช้ Python 2.7 นะครับ เพราะว่าบาง library เช่น Selenium2Library อาจจะยังใช้กับ Python 3 ไม่ได้ ณ ขณะที่เขียนบทความนี้

ทีนี้เราควรจะสร้าง virtualenv ไว้ เป็น practice ที่เราควรทำ เอาไว้แยก Python environment ของแต่ละโปรเจค มันจะได้ไม่มาตีกัน ถ้าไม่เคยสร้างมาก่อนขอให้ตามไปอ่านบทความ ติดตั้ง virtualenv สำหรับเขียน code Python ก่อนครับ

ต่อมาเราจะใช้ pip ในการติดตั้ง packages ที่จำเป็นในการรัน Robot ใหัสั่ง

pip install robotframework==3.0.2 robotframework-selenium2library==1.8.0 selenium==3.0.2

หลังจากติดตั้งเสร็จแล้วลองสั่ง robot

$ robot
[ ERROR ] Expected at least 1 argument, got 0.

Try --help for usage information.

ถ้าเห็น error ด้านบน แปลว่าติดตั้งเสร็จเรียบร้อยแล้วครับ

ขั้นตอนต่อไปคือเราจำเป็นต้องมี WebDriver เพื่อให้ตัว Robot นั้นสามารถเรียกเปิด Web browser ของเราขึ้นมา automate ชุดทดสอบให้เราได้ ทีนี้ WebDriver ที่แนะนำมีอยู่ 2 ตัวครับ

เลือกตัวใดตัวหนึ่งพอนะครับ หรือจะโหลดมาทั้ง 2 ตัวเลยก็ได้ เราจะกำหนดว่าเราจะรัน Chrome หรือ Firefox ไว้ที่สคริป Robot ของเรา

พอดาวน์โหลดมาเสร็จแล้ว ให้ดูด้วยว่าเราเอา driver พวกนี้ไปวางไว้ที่โฟลเดอร์ไหนในเครื่องของเรา เช่น ผมเอาไปวางไว้ที่ /Users/zkan/ หรือที่ Home ของผมเอง (อย่าก๊อบไปนะครับโฟลเดอร์นี้มีแต่บนเครื่องผมเอง :D) แล้วให้สั่งคำสั่ง

export PATH=$PATH:/Users/zkan/

เพื่อเซตตัว environement variable ที่ชื่อ PATH ให้มี folder ที่วางตัว driver เข้าไปด้วย คำสั่งด้านบนสามารถนำไปใส่ไว้ที่ไฟล์ .bash_profile หรือ .zshrc (สำหรับคนที่ใช้ zsh) แล้วก็ปิด/เปิด Terminal ใหม่ก็เป็นอันเสร็จ

วิธีทดสอบว่าเราเซตถูกต้องหรือไม่ให้สั่ง chromedriver หรือ geckodriver ใน Terminal ของเราเลย ถ้าขึ้นมาประมาณนี้

$ chromedriver
Starting ChromeDriver 2.27.440174 (e97a722caafc2d3a8b807ee115bfb307f7d2cfd9) on port 9515
Only local connections are allowed.

แปลว่าถูกต้องครับ

ขั้นตอนสุดท้ายก่อนที่เราจะสามารถรัน Robot ได้คือ.. เขียนสคริป Robot ขึ้นมาครับ ลองสคริปตามนี้ได้เลย ผมขอตั้งชื่อไฟล์ว่า google.robot

*** Settings ***
Library    Selenium2Library

*** Test Cases ***
Google for robot framework
    Open Browser    https://www.google.com    chrome
    Input Text    q    robot framework
    Submit Form

ตรงคำว่า "Open Browser" จะมีคำว่า chrome อยู่ ซึ่งตรงนี้เราสามารถเปลี่ยนเป็นคำว่า firefox ได้ ถ้าเราเลือกใช้ geckodriver นะครับ

ข้อควรระวัง ใน Robot เวลาเขียน Keyword กับค่าที่เราใส่เข้าไป ให้เว้นอย่างน้อย 4 spaces 2 spaces นะครับ (ขอบคุณพี่ปุ๋ย somkiat.cc ที่มาช่วยแก้ให้ครับผม) ตัว Robot มันจะได้แยกแยะ Keyword ได้ถูก เช่น ระหว่างคำว่า "Open Browser" กับ "https://www.google.com" และระหว่าง "https://www.google.com" กับ "chrome" ก็ให้เว้นอย่างน้อย 2 spaces

ลองรัน Robot ดูได้เลย สั่ง robot google.robot จะเห็นว่ามี Web browser เราเปิดขึ้นเอง สุดท้ายก็น่าจะได้ผลตามนี้กัน

$ robot google.robot
==============================================================================
Google
==============================================================================
Google for robot framework | PASS |
------------------------------------------------------------------------------
Google | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
Output: /Users/zkan/output.xml
Log: /Users/zkan/log.html
Report: /Users/zkan/report.html

ลองสังเกตดูจะมีไฟล์ report.html กับ log.html เกิดขึ้นมา ถ้าเปิดมาดูจะเห็นตามรูป 3 กับ 4 ตามลำดับครับ

Robot Report in HTML

รูปที่ 3: Robot Report in HTML

Robot Log in HTML

รูปที่ 4: Robot Log in HTML

ดีงามเนอะ เราสามารถแชร์ไฟล์นี้ให้กับทีมได้ด้วย 🙂

บทความ 101 ก็น่าจะประมาณนี้ เบื้องต้นอยากจะให้ทุกคนที่แวะมาอ่านได้ติดตั้ง Robot เป็นแล้วก็สามารถรันเองได้ ถ้ามีคำถามอะไรก็เขียนคอมเมนต์ไว้ด้านล่างได้เลย~


Kan Ouivirach

Kan Ouivirach

Lead Software Architect

Being interested in Agile software development, I joined an Agile team at Pronto Tools as a Research & Development Architect (as Lead Software Architect now). I am an enthusiastic architect who not only has a scientific mindset, but also a practical approach to software solutions.