Robot Framework อธิบายการทำงาน EP3

Sharing is caring!

ต่อจากบทความ Robot Framework เริ่มต้น กำหนดโครงสร้างโปรเจค EP2 ที่แนะนำการกำหนดโครงสร้างของโปรเจค และวิธีการรัน testcases ที่สร้าง มาต่อกันที่บทความนี้จะขอธิบายรายละเอียดของ โฟลเดอร์ ไฟล์ และข้อมูลอื่น ๆ ที่จะช่วยสนับสนุนการพัฒนา Robot project ให้รวดเร็วและดูเป็นระบบ ยิ่งขึ้น

ทำความเข้าใจ รายละเอียด ต่าง ๆ ของโค๊ด Robot

บทความนี้จะข้อใช้ตัวอย่างโค๊ดจาก github นี้ ซึ่งทุกคนสามารถ clone ไปเพื่อประกอบกับการอ่านบทความนี้

  • poolsawat.com (ชื่อโปรเจค)
    • keywords (ไฟล์ keywords ต่าง ๆ )
      • api_keywords.robot
    • pythonlibs (function ต่าง ๆ สามารถเรียกใช้งานเหมือนกับ keywords ปกติ)
      • date_util.py
    • resources (ไฟล์ data, config, data test)
      • configs
        • dev
          • env.yaml
        • staging
          • env.yaml
      • testdata
        • dev
          • example_data.yaml
        • staging
          • example_data.yaml
      • commons.yaml
      • imports.robot
    • scripts
    • testcases (ไฟล์ testcases ต่าง ๆ)
      • module1_testcase.robot
    • venv
    • requirements.txt

/keywords/api_keywords.robot

*** Keywords *** (1)
Print Message from agruments (2)
    [Documentation]    Print Message from agruments  (3)
    [Arguments]    ${arg0}   (4)
    Log To Console    'Result from Print Message from agruments keywords ::=='${arg0}    (5)

Calculate value
    [Documentation]    Calculate value
    [Arguments]    ${a}     ${b}
    ${result}=      Evaluate     ${a}+${b}   (6)
    [Return]        ${result}     (7)

อธิบายแต่ละบรรทัดของโค๊ด ของไฟล์ api_keywords.robot

(1) *** Keywords *** เพื่อเริ่มต้นสร้าง keywords ใหม่
(2) กำหนดชื่อของ keyword สำหรับการทำงาน ปกติเราจะอ้างอิงการเรียกใช้งานด้วยชื่อ ยาว ๆ นี้ เช่น Print Message from agruments เป็นต้น
(3) คำอธิบายรายะเอียดของ keyword นี้ เป็น optional คือจะกำหนด หรือไม่มีก็ได้ สามารถพิ่มรายละเอียดได้
(4) กำหนด parameters ต่าง ๆ ตัวอย่างจะเป็น ${arg0} ตัวอย่างการเรียกใช้งาน Print Message from agruments arg0=’Hello world’
(5) กำหนด logical การทำงานต่าง ๆ ตัวอย่างจะ print message กับ parameter ชื่อ arg0 เพื่อแสดงใน log ด้วย keywords Log To Console
(6) keyword Evaluate จะช่วยประเมิน การประมวลผล เพื่อเก็บข้อมูลใส่ ${result}
(7) สามารถ return data คืนให้กับส่วนที่เรียก keyword นี้

pythinlibs/date_util.py

from datetime import datetime

def get_nowdate(): (1)
    return datetime.now()

อธิบายแต่ละบรรทัดของโค๊ด ของไฟล์ date_util.py

(1) สร้าง function (จะถูกเรียกใช้งานแบบเดียวกับ keyword) เช่น get_newdate

resources/configs/${ENV}/env.yaml

welcome_message: welcome from Dev environment

อธิบายการเรียกใช้งานไฟล์ตาม environment

${ENV} จะเป็นค่า variable ที่ถูกกำหนดตั้งแต่ตอนสั่งรันด้วย

robot -L TRACE --resource ENV:dev -t "CASE_000" "testcases/episode_1.robot"

จะเรียกใช้ resorce จาก dev เมื่อส่ง ENV:dev และเรียก staging เมื่อส่ง ENV:staging

resources/testdata/$ENV{}/example_data.yaml

${ENV} จะเป็นค่า variable ที่ถูกกำหนดตั้งแต่ตอนสั่งรัน แบบเดียวกับตัวอย่าง config ก่อนหน้า

resources/commons.yaml

app_name: poolsawat.com

คล้ายกับ config ที่แตกด้วย ENV แต่ resource common จะเป็น config แบบไม่ได้แยกตาม environment เป็นค้าคงที่ ที่ทุก environment ใช้แบบเดียวกัน

resources/imports.robot

*** Settings ***  (1)
Library    Collections   (2)
Library    String    (3)
Library    DateTime   (4)
Library    ../pythonlibs/date_util.py   (5)

Variables   ./commons.yaml    (6)
Variables    ../resources/configs/${ENV}/env.yaml     (7)

Resource    ../keywords/api_keywords.robot    (8)

เป็นไฟล์ control เรื่องการ import resource ต่าง ๆ เป็นการ refactor code แบบนึง เป็นการย้าย code การ import resource ทุก ๆ ไฟล์ testcase ให้มา control ที่ไฟล์ imports.robot นี้ไฟล์เดียว จะทำให้เราจัดการเรื่องการ control การ improt libs, resources, testdata, config ต่าง ๆ ได้ง่ายยิ่งขึ้น

อธิบายแต่ละบรรทัดของโค๊ด ของไฟล์ imports.robot

(1) กำหนดเริ่มต้นเมื่อมีการเรียกใช้การ import files, libs, resources ต่างๆ
(2),(3),(4) import libs ที่ชื่อว่า Collections, String, Datetime ซึ่งเป็น standard libs จะมากับ robot system อยู่แล้ว โดยจะกำหนดการ import เป็นแบบ Library
(5) import custom function ใช้การ import แบบ Library เช่นกัน
(6),(7) import variable data จะกำหนดต่างจาก Library keyword เพราะไฟล์เหล่านี้เป็นแค่ data file จะถูกทองเป็น Variables
(8) สุดท้าย keywords file จะถูก import แบบ Resource file

testcases/episode_1.robot

*** Settings ***  (1)
Resource    ../resources/imports.robot     (2)
Resource    ../keywords/api_keywords.robot     (3)
Variables    ../resources/testdata/${ENV}/example_data.yaml     (4)

*** Variables ***   (5)
${DIRECTORY_CSV}       ../resources/testdata/csv     (6)

*** Test Cases ***   (7)
CASE_00001 lesson 1 Log to console     (8)
    Log To Console    'Hello World 1'     (9)

CASE_00002 lesson 2 use external keywords with void
    Print Message from agruments  'Hello world 2'

CASE_00003 lesson 3 use external keywords with return
    ${result}=     Calculate value   5     10
    Log To Console    'Result from Calculate value keywords::=='${result}

CASE_00004 lesson 4 get data from yaml file
    Log To Console   'request ::='${test_data.CASE_00004.request}
    Log To Console   'expect_data ::=='${test_data.CASE_00004.expect_data}

CASE_00005 lesson 5 get env global file
    Log To Console   'app_name ::=='${app_name}

CASE_00006 lesson 6 use custom lib keywords
    ${now}=     get_nowdate
    Log To Console   'now ::=='${now}

CASE_00007 lesson 7 use variable with resource environnment
    Log To Console   'welcome_message from ${ENV}::=='${welcome_message}

อธิบายแต่ละบรรทัดของโค๊ด ของไฟล์ episode_1.robot

(1) *** Settings *** จะถูกกำหนดเมื่อมีการ import file, resource data ต่าง ๆ
(2) import file imports.robot ที่ได้ทำการ control lib ต่าง ๆ ไว้แล้ว
(3) import custom keywords เข้ามาใช้งาน เพื่อรอการเรียกใช้งาน keywords ภายในไฟล์ต่อไป
(4) import testdata file สังเกตุว่าจะมีการระบุการใช้งานโดยแยก environment ด้วย /${ENV}/ ทำให้เราสามารถแยก testdata ตาม environment ได้
(5) *** Variables *** เมื่อมีการ define new variable จำเป็นต้องประกาศ *** Variables *** ก่อนเสมอ
(6) สร้าง variable ที่ชื่อ ${DIRECTORY_CSV} พร้อม assign ค่าให้
(7) *** Test Cases *** จะเป็นการเริ่มการสร้าง testcase ของเราบรรทัดของโคํดที่อยู่ภายใต้นี้จะมองเป็น keywords testcase ทั้งหมด

Resource Folders, Files อื่น ๆ

  • venv จะเป็น folder เก็บ libs, resource ต่าง ๆ สำหรับการพัฒนาโปรเจคด้วย python จะนิยมใช้ virtual env
  • log.html จะเป็น summary report ของการรัน testcase ต่าง ๆ
  • requirements.txt ไฟล์ control libs version ต่าง ๆ ปกติจะ control libs กันด้วยไฟล์นี้

EP1 Robot Framework เตรียมพร้อมก่อนเริ่มโค๊ด Robot EP1
EP2 Robot Framework เริ่มต้น กำหนดโครงสร้างโปรเจค EP2
EP4 Robot Framework แนะนำ Pycharm IDE ช่วยให้เขียน Robot ง่ายยิ่งขึ้น EP4