Photo on Robot Framework
當測試腳本過多且複雜時,為了避免進行重複性的手動測試。
這時候就可以考慮使用 Robot Framework 了
不僅提供 Web 的自動化測試,也包含了 API 的自動化測試。
而且在測試執行完後的 html 報告也是非常的容易閱讀。
在上一篇已經非常簡短的介紹 Robot Framework。
而這禮拜就要接續上一篇的內容開始實作囉。 ヽ(́◕◞౪◟◕‵)ノ
首先先來看看 Robot Framework 中,較常被使用到的定義。
在 Robot Framework 的自動化測試檔案中,其副檔名就叫做 .robot
。
而在這份 .robot
的檔案中較常看到的定義如下。
*** Settings ***
用來 Import 支援 Robot Framework 的 Library,甚至是其他資料或變數的文件。
也可以定義 Test suites 和 Test cases。
*** Variables ***
定義變數,該變數可以在測試文件中其他地方使用。
*** Test Cases ***
從可用的 Keywords 創建 Test case,這意味著測試腳本全部由 Keywords 組成。
*** Keywords ***
從現有的或是 Library 所提供的 Keyword,創建適合自己使用的 Keyword。
測試的過成中免不了使用到目錄的路徑。
Robot Framework 提供了三種絕對路徑的內建變數。
${CURDIR}
測試檔案所在目錄的絕對路徑。${TEMPDIR}
系統臨時目錄的絕對路徑。${EXECDIR}
測試執行開始的目錄的絕對路徑。小弟只有使用過第一個
${CURDIR}
,方便直覺又快速。
有時候必須帶 Boolean 或 None/null 變數做測試。
就可以直接使用內建提供的變數。${true}
${false}
${None}
${null}
當有些情況需要使遇到 "空格" 或是 "空字串" 的值。
就可以使用 ${SPACE}
或是 ${EMPTY}
。
當需要使用 "連續空格"。
可以寫成 ${SPACE * n}
, n 是看需要空幾格就帶多少。
在每一個測試腳本(Test Cases) 中都可而外設定一些東西像是[Documentation]
:對 Test Case 的描述文件,可以把它想成這測試的註解。[Tags]
:對 Test Case 的標記,有需要時可以只跑某一個 tag 的測試。[Setup]
:在 Test Case 執行前的前置作業(基本上為非主要的測試內容)。[Teardown]
:在 Test Case 執行後的還原作業(讓其他測試不會被受影響)。[Template]
:在 Test Case 中重複執行流程,其中只有變數不同。[Timeout]
:設定測試預期的時間,讓測試不會一直卡住。
那小弟就來寫一個簡單的測試
*** Settings ***
Documentation Robot Framework Example
Library Selenium2Library
Suite Setup Open Browser https://ithelp.ithome.com.tw/ chrome
Suite Teardown Close Browser
*** Variables ***
${articleName1} = 鼠年全馬鐵人挑戰 WEEK 01:四十週自動化測試 - 前言
${articleName2} = 鼠年全馬鐵人挑戰 WEEK 13:Robot Framework (上)
*** Test Cases ***
My Test
[Template] Search Article Template
${articleName1}
${articleName2}
*** Keywords ***
Click Article Checkbox
[Documentation] Click search type checkbox in search area
Wait Until Element Is Visible //label[@for="searchArticle"]
Click Element //label[@for="searchArticle"]
Click Search Button
[Documentation] Click search button in ithelp home page
Wait Until Element Is Visible //div[@id="searchDropdown"]
Click Element //div[@id="searchDropdown"]
Click Submit Button
[Documentation] Click search submit button in search area
Wait Until Element Is Visible //form/button[@type="submit"]
Click Element //form/button[@type="submit"]
Input Search Content
[Documentation] Input search content in search bar
[Arguments] ${article}
Wait Until Element Is Visible //input[@name="search"]
Input Text //input[@name="search"] ${article}
Search Article Template
[Documentation] Tempalte for search ithelp aritcle need give aritcle variable
[Arguments] ${article}
Click Search Button
Input Search Content ${article}
Click Article Checkbox
Click Submit Button
Verify Article Is Existing ${article}
Verify Article Is Existing
[Documentation] Verify search article is existing
[Arguments] ${article}
Wait Until Page Contains Element //h3[@class="qa-list__title"]/a
${getArticle} = Get Text //h3[@class="qa-list__title"]/a
Should Be Equal As Strings ${getArticle} ${article}
如果還沒有安裝 selenium2library 記得安裝一下
pip install robotframework-selenium2library
測試內容大致上告一個段落,那麼就可以開始執行測試了。 (゚3゚)~♪
而在上一篇的文章中,如果有成功執行 $ robot --version
那麼就可以直接到該層資料夾執行測試囉~
執行的指令為 $ robot <file_name>.robot
執行的結果大概長成這樣
在執行程式後,最下方會回傳三種報告檢查方式。
分別是
Output:
Log:
Report:
基本上小弟都是看 Log 的模式,因為報告的內容較為詳細。
以上是這週 Robot Framework 的實作內容
如果有疑問或是有錯誤,還請各位大哥大姐提點。
小弟將繼續往下週邁進。 ─=≡Σ((( つ•̀ω•́)つ
在 Variable block 設置的變數與使用 Set Suite Variable 設置的變數有什麼差別?
其實他們倆個的功用與目的是相同的
只是差別在於
Variable block 的 *** Variables ***
是 Robot Framework 所提供的內建功能
而 Set Suite Variable
則是由 BuiltIn library 所導入的 Keyword
不知道有沒有回答道你的問題~
所以他們宣告這個變數後, 這個變數可使用的範圍及用法都是一樣的嗎? Thanks.
另外, 道->到
*** Variables ***
的使用範圍為該份文件檔案中Set Suite Variable
的使用範圍為呼叫此關鍵字為主的測試文件
但是小弟不建議在某一個 Keywork 中塞了 Set Suite Variable
因為使用的人不知道他塞了一個變數在 Keyworkd 裡面
有可能一不小心就造成重複的 Variable 導致前面的 Variable 失效
如果需要在 Keyword 存一個變數 建議使用 return 的方式
便在測試的 robot 檔中使用 Set Suite Variable
有一個很大的不同是:*** Variables ***
只能設定常數Set Suite Variable
能設定變數
例如:
*** Variables ***
${a} Evaluate int(${1}) + int(${2})
*** Test Cases ***
Test Variables different
${b} = Evaluate int(${1}) + int(${2})
Log ${b}
Log ${a}
得到結果如下:
可以明顯地看出 Variables 區塊內的參數並沒有因為後面的動作而改變
小女子最近也在摸索Robot Framework, 大大的文章對我很有幫助, 感謝.
是的,沒有錯~
感謝大哥大姐們的踴躍討論*** Variables ***
確實只能帶字串符
但是可以使用 Robot Framework 的內建變數
難得看到有人討論 Robot Framework....期望還有後續..