[Python] 如何用 Robot Framework 撰寫 Test Case ?

閱讀時間約 9 分鐘
Robot Framework 在業界自動化測試的使用上算是名氣很響亮的開源框架,不僅 Github Page 有 4.6k 星星與 100 位以上的協作者,還有很多方便的 Plugins,像是 SSHLibrary, SeleniumLibrary…等等。同時也支援 BDD 的 Gherkin 語法可以使得 Test Case 就是一份可執行的 Spec.
幾年前,偶然的在某社群聽見 Robot Framework 這套開源框架,起初抱持著好奇的心情簡單的玩了一下,不過當時完全不理解,用這種 Keyword 方式去撰寫自動化測試的好處在哪? ( 不過就是…我知識不足罷了XD ) 。
過了幾年之後,隨著知識的增加,軟體開發週期變短,測試的被理解與重視程度不斷的上升,Stakeholder 也需要知道測試項目中,到底做了哪些測試,涵蓋的程度有多少? 那麽…如何減少 Stakeholder 與開發人員對於測試報告理解的鴻溝?Robot Framework 與 Test Case design 就變得很重要了。

讓 Robot 動起來

# Requirements
pip install robotframework
# Folder Structure
|____robot_tests
|____robot_test_features.robot # test case
|____robot_test_keywords.robot # robot keyword mapping
|____robot_test_steps.py # python function
先設計一個 Test Case,目的是先有 User Story 之後,再一步一步的把測試步驟完成。
robot_test_features.robot 這個檔案用來存放 Test Case,把整個流程的測試步驟放在這個檔案裡。
### robot_test_features.robot ###
*** Settings ***
Resource robot_test_keywords.robot
*** Test Cases ***
Medium Page
Given User network connected
When User browse Medium page
Then User will see "Medium" keyword in page title
Test Case:
當使用者連上網路後,可以瀏覽 Medium 首頁,首頁的 Title 為 Medium。
那麼 *** Settings *** 的部分,是 Robot Framework 所提供的設定區塊,是用來 Import 需要的資源檔與相關設定,import Robot file 是使用 Resource *.robot ,若是想 Import Python 檔案的話可使用 Library *.py
順帶一提,每個關鍵字之間都是使用兩個空白鍵來做分隔,( 如果使用的是有Auto Formatted 的 Editor 會比較省事。Ex: VS Code, Pycharm )。
Test Case 的敘述方式,是使用 Gherkin Style 來撰寫 Test Case,以 Given, When, Then 這些陳述句當開頭,分別對應 Pre-conditions, Action Steps, Expected Results,這樣的好處是可以讓所有人都看得懂 Test Case ( 也就是英文敘述 ),Test Case 也是一份可以執行的 Spec.,在軟體驗收時與相關的 Stakeholder 也不會有對於產品規格理解上的隔閡。
### robot_test_keywords.robot ###
*** Settings ***
Library  robot_test_steps.py
*** Keywords ***
User network connected
verify_network_is_connected
User browse Medium page
open_browser_to_medium_page
User will see "${PageTitle}" keyword in page title
verify_browser_title ${PageTitle}
### robot_test_steps.py ###
import os
...
def verify_network_is_connected():
# do somethings to verify network has been connected.
pass
def open_browser_to_medium_page():
# open browser to Medium Page
pass
def verify_browser_title(title):
assert title == "Medium"
接著,陸續完成其他兩個檔案, 區塊1為 robot keyword 檔案,這層是用來對應 Keyword 與 Python Function,區塊2為單純的 Python 檔案,在此容我偷懶簡略的概述一下 Python Function 會執行的內容( 真的想知道~我再補上 )。
接下來,我就可以跑測試拉~!
# run test
robot robot_tests
Terminal 上可以看到跑完的結果與 Report 存放的位置。每一次跑都會產生三個檔案。打開 report.html 可以看到 Test Suite 的統整測試報告:
接著看 log.html:
在精美的 Robot Framework Report 上看見剛剛所寫的測試案例呈現在報告上,每個細項都是可以展開看裡頭的結構一層一層擴展下去,如此一來不管是否為開發人員都可以看懂這份測試報告。
如果將測試步驟全部展開,會發現 Robot Keyword 所對應的 Python Function 也都被轉成可讀的英文字,顯示上報告上,所以只要將 Python Function 命名的可讀性提高,也可以直接呈現在 Robot Framework Report 上。實在是太方便拉!
最後有個細節,藏在最後一個測試步驟裡,先前將頁面 Title 用雙引號括起來,表示雙引號裡的字是會被當作參數帶入 Keyword,在 Keyword 層用變數${PageTitle} 去對應帶入 Python Function,如此一來 Python Code 也可以接到從 feature file 來的參數。
以上這些架構是工作上與 Members 討論過後得到的理解,與自己開發一段時間後紀錄一下心得感想。若是把大部分複雜的邏輯都放在 Python 層級,可以輕易的做到物件的概念, funciton 也很容易的被 Re-use,當然也不用去背一堆 Robot Build-in Keywords。如果是要找尋新人加入工作團隊,也不用大費周章找一個用過 Robot Framework 的人,相對的學習曲線較低。如果是有更好的做法,也歡迎大家來討論 :D
目前 Test Framework 有很多可以運用,至於要不要使用 Robot Framework ,可能要先考慮一下團隊真正需要的是什麼? Test Framework 猶如一種可以到達目的地的交通工具,有著各式的選擇,如何完成目標才是最重要的。
對了!最後推薦一本書,裡面提到許多在測試與開發的觀念滿受用的!

Reference

為什麼會看到廣告
3會員
9內容數
留言0
查看全部
發表第一個留言支持創作者!
Wis Chang的沙龍 的其他內容
人生只有一次,在不斷的做選擇之中,不一定都是馬上可以得到解答,常常是一段時間或是幾年後,回過頭來審視自己才能知道答案。看看自己成長了多少?看看自己是不是又犯下後悔不已的事?看看自己是不是改變了? 人生是一台單程高鐵,不能回頭,但可回首。 學生時代的揮霍人生 - 盡情享樂吧 ! 還記得,當年我還是個愛
畢竟~我是一個懶人嘛... 估狗之後,大部分的做法就是手動的去下載當前瀏覽器對應版本的 Driver,放到一個特定位置,將 Driver Binary 位置指向它。 在 Google Chrome About Page 你可以看到版本 接著去下載對應的 Chrome Driver ↓ 解決方案:
前言 隨著越來越多公司導入 DevOps 、Agile、Scrum 開發模式,作為基礎設施的 CI / CD Pipeline 也越來越被需要。但是導入的過程中, 總會遇到一些問題: CI / CD Pipeline 該怎麼建 !? Pipeline 工具該怎麼選擇 !? 老天 : 去看書 ! …
某天收到一封來自 Google TW - Test Engineer, Android 的面試邀請,於是開始請HR幫忙安排後續一切事情,首先要先感謝 HR Jenny 很用心、很細心的跟我說明接下來面試的流程,也提供我許多面試相關的參考文件,真的是萬般感謝,讓我感到備受尊重。當然! 面試不外乎還是要
什麼是Pytest? Pytest是一款強大的Python測試工具,支援平行化測試,使用上簡單方便,適合用在各種不同類型的軟體架構,也適用於RD、QA或獨立測試小組,也適合正要導入TDD的公司。 來寫測試吧! 先用pip安裝pytest: libs\module.py 參考資料:
Software QA Engineer 成長紀錄與面試經驗分享 個人背景 面試經驗 1. 一動數據 Quadas - Sr. Software Engineer (Automation Test) 結果: 感謝函 結果: 婉拒 3. 紅點子科技 Voice Tube - 自動化軟體測試工程師
人生只有一次,在不斷的做選擇之中,不一定都是馬上可以得到解答,常常是一段時間或是幾年後,回過頭來審視自己才能知道答案。看看自己成長了多少?看看自己是不是又犯下後悔不已的事?看看自己是不是改變了? 人生是一台單程高鐵,不能回頭,但可回首。 學生時代的揮霍人生 - 盡情享樂吧 ! 還記得,當年我還是個愛
畢竟~我是一個懶人嘛... 估狗之後,大部分的做法就是手動的去下載當前瀏覽器對應版本的 Driver,放到一個特定位置,將 Driver Binary 位置指向它。 在 Google Chrome About Page 你可以看到版本 接著去下載對應的 Chrome Driver ↓ 解決方案:
前言 隨著越來越多公司導入 DevOps 、Agile、Scrum 開發模式,作為基礎設施的 CI / CD Pipeline 也越來越被需要。但是導入的過程中, 總會遇到一些問題: CI / CD Pipeline 該怎麼建 !? Pipeline 工具該怎麼選擇 !? 老天 : 去看書 ! …
某天收到一封來自 Google TW - Test Engineer, Android 的面試邀請,於是開始請HR幫忙安排後續一切事情,首先要先感謝 HR Jenny 很用心、很細心的跟我說明接下來面試的流程,也提供我許多面試相關的參考文件,真的是萬般感謝,讓我感到備受尊重。當然! 面試不外乎還是要
什麼是Pytest? Pytest是一款強大的Python測試工具,支援平行化測試,使用上簡單方便,適合用在各種不同類型的軟體架構,也適用於RD、QA或獨立測試小組,也適合正要導入TDD的公司。 來寫測試吧! 先用pip安裝pytest: libs\module.py 參考資料:
Software QA Engineer 成長紀錄與面試經驗分享 個人背景 面試經驗 1. 一動數據 Quadas - Sr. Software Engineer (Automation Test) 結果: 感謝函 結果: 婉拒 3. 紅點子科技 Voice Tube - 自動化軟體測試工程師
你可能也想看
Google News 追蹤
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
全球公衛教授和公共教育家漢斯.羅斯林(Hans Rosling)在其著名的暢銷書「真確」中,提出了13個關於全球貧富、人口、出生/死亡率、教育、公衛等的「留意認知落差測驗」,回答的人不乏受過良好教育的專業人士,結果顯示,受測者在前12題平均只答對2題,遠不如隨機亂選的黑猩猩(如果黑猩猩會回答問題的話
Thumbnail
從Python 3.6開始,可以使用f-Strings這個新的方法來做字串的格式化。f-Strings 也稱為“格式化的字串文字”,是一種字串文字,其開頭是 f,後面是大括號,其中包含將被替換為其值的表示式。這些表示式在執行時被評估,然後使用 "format" 協議進行格式化 例如
示範如何用 python,找出台股星期幾最容易上漲,只要按分享的程式碼就能輕易計算, 另外,也可以把加權指數的收盤資料更換成其他個股的收盤資料, 就能算出該個股星期幾最容易上漲了,有機會再分享。  把漲跌次數換成累計報酬率之後,其實不管是星期幾都沒有明顯容易上漲或下跌, 跟單純只看機率的結果不一樣,
Thumbnail
3分鐘學會用python計算加權指數報酬率,並且用pandas 進行條件篩選 濾掉金融海嘯時期,並篩選出漲跌幅大於1%的日期 https://youtu.be/EMfclSESgBo
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
全球公衛教授和公共教育家漢斯.羅斯林(Hans Rosling)在其著名的暢銷書「真確」中,提出了13個關於全球貧富、人口、出生/死亡率、教育、公衛等的「留意認知落差測驗」,回答的人不乏受過良好教育的專業人士,結果顯示,受測者在前12題平均只答對2題,遠不如隨機亂選的黑猩猩(如果黑猩猩會回答問題的話
Thumbnail
從Python 3.6開始,可以使用f-Strings這個新的方法來做字串的格式化。f-Strings 也稱為“格式化的字串文字”,是一種字串文字,其開頭是 f,後面是大括號,其中包含將被替換為其值的表示式。這些表示式在執行時被評估,然後使用 "format" 協議進行格式化 例如
示範如何用 python,找出台股星期幾最容易上漲,只要按分享的程式碼就能輕易計算, 另外,也可以把加權指數的收盤資料更換成其他個股的收盤資料, 就能算出該個股星期幾最容易上漲了,有機會再分享。  把漲跌次數換成累計報酬率之後,其實不管是星期幾都沒有明顯容易上漲或下跌, 跟單純只看機率的結果不一樣,
Thumbnail
3分鐘學會用python計算加權指數報酬率,並且用pandas 進行條件篩選 濾掉金融海嘯時期,並篩選出漲跌幅大於1%的日期 https://youtu.be/EMfclSESgBo