暑期實習7-2:控制、迴圈、關鍵字|Robot Framework筆記

這是一篇我在2022年於台北趨勢科技暑期實習的筆記,如果對趨勢科技暑期實習面試有興趣,可以看暑期實習1:趨勢科技面試過程|2022;如果你想要寫自動化測試,Robot Framework是一個開源、易讀、易學的框架,並且它可以連結Python。

原來Robot Framework 4.x才支援IF-ELSE,那舊版要怎麼使用IF?定義字串不用引號,但比對字串又要引號!邏輯操作子前後最多只能有1個空白!小寫and和or前後最多只能有1個空白,但大寫AND和OR前後最少要有2個空白,兩者什麼時候使用?For迴圈要怎麼使用?定義串列使用@,使用串列使用$,但在FOR的IN中,使用串列又要用@!怎麼查看和比較型態?

 一、If

  • 要使用IF、ELSE IF、ELSE、END這些關鍵字,都要大寫!
  • 有多個判斷式時,要使用and和or連接,都要小寫!且and或or前後要有1個空白。
  • 字串比對的時候,變數和字串都要有單/雙引號!
  • 更多用法可以參考Conditional IF / ELSE IF / ELSE execution in Robot Framework

# Correct
IF    "${cat}" == "cat" and "${dog}" == "dog"
    Log    This line IS executed.
END

# Error, 變數沒有引號
IF   ${cat} == "cat"
    Log    This line IS NOT executed.
END

# Correct
IF    1 == 1
    Log    This line IS executed.
END

如果使用If expression得到" if is a reserved keyword "錯誤資訊,則代表Robot Framework太舊,不支援If expression。

The documentation online states that the IF expression was added to the language in Robot 4.0. And it is therefore correct that my syntax highlighting for the IF statement does not agree with what I expect -- because Robot 3.x does not process conditional statements in that way. @Why am I getting "'If' is a reserved keyword" error?

如果Robot Framework版本太舊,取而代之可以使用Run Keyword If。If和Run Keyword If之間的轉換,可以參考Native support for IF/ELSE syntax #3074


二、For loop

(一)For + List

  • 要使用FOR、IN、END這些關鍵字,都要大寫!
  • FOR、IN前後至少要2個空白
  • List在For loop時,是使用@,而不是$!

FOR    ${robot}    IN    @{ROBOTS}
    Log    ${robot}
END

(二)For + List + Dictionary

  • 如果想要將key存進list中,並用list的值當dictionary的值,以下兩種寫法都會出錯,所以建議搭配For loop。

# Error
Log  ${dic}[${key[index]}]
Log  ${dic}[${key}[index]]

# Correct
FOR    ${key}    IN    @{keys_list}
    Log  ${dic}[${key}]
END

(三)For + Dictionary

  • 不能直接使用Dictionary,要將Dictionary轉成keys list

FOR    ${key}    IN    @{dic.keys()}
     Log  ${dic}[${key}]
END


三、Keyword

  • 傳list、dictionary時,是使用pass-by-refence!所以如果keyword涉及到新增、修改的動作,記得要用deep copy!
  • 參數之間至少要有2個空白,不然會被視為Keyword

(一)定義函數

  • 傳入或傳出variable、list、dictionary時,都要用$。

Keyword1
    [Arguments]    ${var1}    ${list}    ${dic}
    Log    ${var1}
    Log    ${list}
    Log    ${dic}
    [Return]    ${var1}    ${list}    ${dic}
    
# 1個回傳值
${result} = Keyword1
# 2個回傳值
${result1}    ${result2} =    Keyword2
# 2個回傳值也可以放在1個變數中,只不過使用時,要指定index
${result} =    Keyword2
Log ${result}[0] # == Log ${result1}
Log ${result}[1] # == Log ${result2}
    

(二)執行多個Keywords

  • 可用於[Setup]和[Teardown],要使用大寫的AND和OR連接!

[Setup]    Run Keywords    Setup1    AND
...                        Setup2    AND
...                        Setup3

(三)Keyword If

如果Robot Framework太舊不支援IF expression,則可以使用Run Keyword If。

  • 使用Run Keyword If時,邏輯判斷式的左值與右值都要使用單引號或雙引號包裹!
  • 邏輯操作子前後最多1個空格!

Run Keyword If    "${var}" == "string"    Log    ${var}
Run Keyword If    '${var}'=='True'    Log    ${var}

  • 如果要多個判斷式,請用小寫的and和or,前後空格最多1個! Ref
  • 如果要分配不同值,請記得要使用Set Variable,或是Keyword return,否則會出錯
  • Run Keyword If裡不能使用assign operator(=),要把=放在外面,或是使用Set Variable If

# Correct
Run Keyword If    "${var}" == "string" and '${var}'=='True'    Log    ${var}

# Error, =不能放在If裏、裡面
Run Keyword If    "${var}" == "string"    ${var} =    Set Variable    I am string

# Correct
${var} =    Run Keyword If    "${var}" == "string"    Set Variable    I am string
${var} =    Set Variable If    "${var}" == "string"    Set Variable    I am string

# Error, ELSE沒有Keyword
${var} =    Run Keyword If       "${str}"=="a"    aaaaa
...    ELSE    bbbbbb

#Correct
${var} =    Run Keyword If       "${str}"=="a"    Set Variable    aaaaa
...    ELSE   keyword    bbbbbb

如果Run Keyword If想要執行多行,要搭配Run Keywords!

Run Keyword If    "${var}" == "string"    Run Keywords
...                                       keyword1    ${var1}    AND
...                                       keyword2    ${var2}    AND
...                                       keyword3    ${var3}

除了If,還要更多判斷式,記得一開的If是一個大寫一個小寫,後面的ELSE IF和ELSE都是大寫! 

Run Keyword If    "${var1}" == "string1"    keyword1    ${var1}
...         ELSE IF    "${var2}" == "string2"    keyword2    ${var2}
...         ELSE IF   "${var3}" == "string3"    keyword3    ${var3}
...         ELSE   "${var4}" == "string4"    keyword4    ${var4}


四、Type

(一)查看Type

  • 可以使用Evaluate  + type() + __name__

${type} =    Evaluate  type($list).__name__
Log    ${type} #list

${type} =    Evaluate  type($dic).__name__
Log    ${type} #DotDoct

${type} =    Evaluate  type($str).__name__
Log    ${type} #unicode

(二)比較Type

  • 可以使用Evaluate  + isinstance()  Ref

${is_str} =    Evaluate  isinstance ($str, str) 


五、Python

從Robot Framework傳給Python的數字是unicode,所以在Python 中,要轉成int(),比較才會正確!


相關文章

  1. 暑期實習0:背景、面試、結果|趨勢、默克、時刻
  2. 暑期實習1:趨勢科技面試過程|2022
  3. 暑期實習2:默克集團一面過程|2022
  4. 暑期實習3:默克集團二面過程|2022
  5. 暑期實習4:時刻科技面試過程|2022
  6. 暑期實習5:租屋、銀行帳戶、托運機車、健身房|前置作業
  7. 暑期實習6-1:寧夏夜市、給力健身、傳品牛排、趨勢報到|實習日記
  8. 暑期實習6-2:AI機器人、遼寧夜市、饒河夜市|實習日記
  9. 暑期實習6-3:金魚腦、暖心借錢、不要加班、code review|實習日記
  10. 暑期實習6-4:DISC有禮貌、人資會議、薪資微調|實習日記
  11. 暑期實習6-5:內推、旭集、瓦城、畢業典禮|實習日記
  12. 暑期實習7-1:變數|Robot Framework筆記
  13. 暑期實習7-2:控制、迴圈、關鍵字|Robot Framework筆記
  14. 暑期實習7-3:Git筆記
  15. 暑期實習8-0:美食地圖|總目錄
  16. 暑期實習8-1:美食地圖|大安區
  17. 暑期實習8-2:美食地圖|大安區
  18. 暑期實習8-3:美食地圖|中山區
  19. 暑期實習8-4:美食地圖|中山區
  20. 暑期實習8-5:美食地圖|中正區
  21. 暑期實習8-6:美食地圖|松山區
  22. 暑期實習∞|工作、薪資福利、心得|2022趨勢科技


參考資料

  1. Robocorp (2022) Conditional IF / ELSE IF / ELSE execution in Robot Framework [Accessed by Aug 2022]
  2. John Ladasky (2021) Why am I getting "'If' is a reserved keyword" error?. stack overflow [Accessed by Aug 2022]
  3. pekkaklarck (2019) Native support for IF/ELSE syntax #3074. GitHub [Accessed by Aug 2022]
  4. 狼绅士-狼秦。2013。RobotFrameWork(五)控制流之if语句——Run Keyword If。CSDN [Accessed by Aug 2022]
  5. Jacob (2019) How to check datatype of variable in Robot framework. [Accessed by Aug 2022]

留言