Robot Framework Workshop #1 by น้องแชมป์
2024-10-13
หลังจากที่มีน้องแชมป์มาสอนในทีมเกี่ยวกับ Test Automation ด้วย Robot Framework ไปแล้ว ก็เลยอยากจะมาเขียน Workshop ตัวนึงสำหรับพื้นฐานเกี่ยวกับ Robot Framework กัน
Workshop นี้จะเน้นเรื่องอะไรบ้าง
- การเขียน Test Automation ด้วย Robot Framework
Let’s Start
Install Python
- Download Python from Python.org
- Install Python
- Check python version
python3 --version
สร้าง Virtual Environment
สร้าง Virtual Environment สำหรับการทำงานของ Robot Framework
python3 -m venv venv
Activate Virtual Environment
source venv/bin/activate
Setup Robot Framework
ติดตั้ง Robot Framework ผ่าน pip3
pip3 install robotframework
pip3 install robotframework-seleniumlibrary
ก่อนที่จะใช้งานควรติดติดตั้ง Browser Driver ก่อน
- Chrome Driver: Download
[MACOS]
หลังจากดาวน์โหลด chromedriver เรียบร้อยแล้วจากนั้นให้ย้ายไปไว้ใน
/usr/local/bin
mv ~/Downloads/chromedriver /usr/local/bin
[MACOS] ตั้งค่า Permission สำหรับ chromedriver
sudo xattr -cr 'chromedriver'
chmod +x /usr/local/bin/chromedriver
# test chromedriver
chromedriver --version
Workshop
Website: demo-website
โจทย์
1. เขียน 2 Test Case ให้ทำการ Login ที่ https://www.saucedemo.com/
1.1. Test Case 001 - Login ด้วย Username: standard_user และ Password: secret_sauce
1.2. Test Case 002 - Login ด้วย Username: problem_user และ Password: secret_sauce
2. เมื่อรันทั้ง 2 Test Case ต้องเปิดและปิด Browser แค่ครั้งเดียว
3. username และ password ต้องรับค่ามาจาก yaml (ทำ data driven)
4. Verify Product Page หลังจาก Login สำเร็จ **ทำให้รู้ว่า Login ผ่านแล้ว**
5. Logut หลังจาก Verify Product Page สำเร็จ
เริ่มสร้างไฟล์ workshop.robot และ data.yaml
data.yaml
Test_01:
input_data:
username: standard_user
password: secret_sauce
Test_02:
input_data:
username: problem_user
password: secret_sauce
workshop.robot ทดสอบสร้าง Keyword สำหรับเปิด Browser และ เรียกใช้งาน
*** Settings ***
Library SeleniumLibrary
Variables data.yaml
*** Keywords ***
Open Browser with Chrome
${chromedriver_path} Set Variable /usr/bin/chromedriver
Open Browser https://www.saucedemo.com/ GC executable_path=${chromedriver_path}
*** Test Cases ***
Test_01
Open Browser with Chrome
Sleep 2s
ทดสอบรัน workshop.robot
robot workshop.robot
ทำการเก็บ XPATH ของ Element ต่าง ๆ
โดยเราได้รวบรวม XPATH สำหรับ saucedemo ไว้เรียบร้อยแล้วดังนี้
- Text Input Username:
//*[@data-test="username"] - Text Input Password:
//*[@data-test="password"] - Login Button:
//*[@data-test="login-button"] - Menu Bar:
//*[@id="react-burger-menu-btn"] - Logout Button:
//a[@id='logout_sidebar_link']
หลังจากนั้นให้แก้ไข workshop.robot เพื่อเก็บ XPATH ของ Element ต่างๆ ใน Veriables
*** Variables ***
${Test_Data}
# Login Page
${username} //*[@data-test="username"]
${password} //*[@data-test="password"]
${login_button} //*[@data-test="login-button"]
# Product Page
${menu} //*[@id="react-burger-menu-btn"]
${logout} //a[@id='logout_sidebar_link']
จากนั้นเขียน Settings สำหรับ Workshop.robot
เนื่องจาก requirement บอกว่าต้องการให้ Open Close Browser แค่ครั้งเดียว เราเลยตั้งค่า Suite Setp, Suite Teardown เพื่อ Open Close Browser ดังนี้
*** Settings ***
Library SeleniumLibrary
Variables data.yaml
Suite Setup Open Browser with Chrome
Suite Teardown Close All Browsers
เขียนดึง Data จาก data.yaml
โดยหลักการที่เราต้องเขียนคือเราจะดึงค่า value จาก [key]: value โดยใช้ key เป็น Test Case Name ตัวอย่าง data.yaml
Test_01:
input_data:
username: standard_user
password: secret_sauce
Test_02:
input_data:
username: problem_user
password: secret_sauce
เราสามารถดึง username จาก data.yaml ได้ดังนี้ ${Test_Data['input_data']['username']}
เขียน Keywords เพิ่มในการ Prepare Data
อัพเดท Keyword Prepare Data เพื่อทำการดึัง data จาก yaml
*** Variables ***
${Test_Data}
*** Keywords ***
Prepare Data
Set Test Variable ${Test_Data} ${${TEST_NAME}}
DONE
workshop.robot
*** Test Cases ***
*** Settings ***
Library SeleniumLibrary
Variables data.yaml
Suite Setup Open Browser with Chrome
Suite Teardown Close All Browsers
Test Setup Prepare Data
Test Teardown Logout Browser
*** Variables ***
${Test_Data}
# Login Page
${username} //*[@data-test="username"]
${password} //*[@data-test="password"]
${login_button} //*[@data-test="login-button"]
# Product Page
${menu} //*[@id="react-burger-menu-btn"]
${logout} //a[@id='logout_sidebar_link']
*** Keywords ***
Prepare Data
Set Test Variable ${Test_Data} ${${TEST_NAME}}
Open Browser with Chrome
${chromedriver_path} Set Variable /usr/bin/chromedriver
Open Browser https://www.saucedemo.com/ GC executable_path=${chromedriver_path}
Logout Browser
Sleep 2s
Click Element ${logout}
Sleep 5s
# Login Page
# ---- Insert Login Page Keyword Below ----
# Product Page
# ---- Insert Product Page Keyword Below ----
*** Test Cases ***
Test_01
Input Text ${username} ${Test_Data['input_data']['username']}
Input Text ${password} ${Test_Data['input_data']['password']}
Click Element ${login_button}
Wait Until Element Is Visible ${menu}
Click Element ${menu}
Wait Until Element Is Visible ${logout}
Test_02
Input Text ${username} ${Test_Data['input_data']['username']}
Input Text ${password} ${Test_Data['input_data']['password']}
Click Element ${login_button}
Wait Until Element Is Visible ${menu}
Click Element ${menu}
Wait Until Element Is Visible ${logout}