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 เฉยๆ หรือใส่ตัวแปรไม่ครบมันจะเจ๊ง เพราะมันไม่รู้จักตัวแปรพวกนี้ถ้าไม่ได้ใส่เข้าไปครับ ต้องหาวิธีแก้ไขกันต่อไป