[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

為什麼會看到廣告
avatar-img
3會員
9內容數
Drunk Wis
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Wis Vocus 的其他內容
人生只有一次,在不斷的做選擇之中,不一定都是馬上可以得到解答,常常是一段時間或是幾年後,回過頭來審視自己才能知道答案。看看自己成長了多少?看看自己是不是又犯下後悔不已的事?看看自己是不是改變了? 人生是一台單程高鐵,不能回頭,但可回首。 學生時代的揮霍人生 - 盡情享樂吧 ! 還記得,當年我還是個愛
畢竟~我是一個懶人嘛... 估狗之後,大部分的做法就是手動的去下載當前瀏覽器對應版本的 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
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
從範例學python的目標讀者: 針對剛進入的初學者,想學習Python語言。 有基礎本數學邏輯基礎即可。 從小遊戲學python的目標讀者: 針對已經有經驗的C/C++, Python, 或其他有程式基礎的讀者。 想實作一些小專案,從實做中學習如何分析需求、元件分拆、到底層實作
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
Python擁有便攜性和通用性,適用於多種場景,同時具有全球通用性。Python在科技製造業、資料分析、人工智慧等領域有廣泛應用,對於理工科背景者而言有獨特的優勢。透過在線課程、自學書籍、實作專案,以及參與社群和開源專案,理工背景者可以達成從轉職進入Python程式領域的目標。
Thumbnail
什麼是Python python是電腦程式語言的一種,如同python官方網站上的介紹 "Python是一種程式語,可讓你更快速地工作並更有效的整合系統"。簡單地說,就是你可用python這個程式語言去告訴電腦你想要作什麼,讓電腦來幫你完成你要作的事情。
Thumbnail
Python的模組和庫是可重用的程式碼塊,可透過import語句引入。特定部分可以透過from和import引入,並可使用as指定別名。第三方模組可透過pip工具安裝並在程式碼中使用。此外,也可以創建自定義模組並在其他Python文件中引用。
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
初入IT產業的人士在學習Python語言後,IT證照如ITS Python認證是否值得考取?本文以ITS證照特點、實施建議和IT認證考試資訊為主,詳述證照的好處和準備時間。
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
在著手開發一套程式時,會讓人覺得煩躁的考量點,其中一個讓人頭痛的,應該就是 UI 的設計跟串接了吧,究竟有沒有一個套件,能讓開發者能夠以一套語言,就能打遍天下呢?
Thumbnail
先前我們談論到靜態方法就像是定義工具箱一樣,那麼抽象方法就像是共用表格的概念,例如註冊帳號時會填寫的一些基本資料,就有包含制式的表格,裡面有需填寫的欄位,例如姓名,性別等。
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
從範例學python的目標讀者: 針對剛進入的初學者,想學習Python語言。 有基礎本數學邏輯基礎即可。 從小遊戲學python的目標讀者: 針對已經有經驗的C/C++, Python, 或其他有程式基礎的讀者。 想實作一些小專案,從實做中學習如何分析需求、元件分拆、到底層實作
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
Python擁有便攜性和通用性,適用於多種場景,同時具有全球通用性。Python在科技製造業、資料分析、人工智慧等領域有廣泛應用,對於理工科背景者而言有獨特的優勢。透過在線課程、自學書籍、實作專案,以及參與社群和開源專案,理工背景者可以達成從轉職進入Python程式領域的目標。
Thumbnail
什麼是Python python是電腦程式語言的一種,如同python官方網站上的介紹 "Python是一種程式語,可讓你更快速地工作並更有效的整合系統"。簡單地說,就是你可用python這個程式語言去告訴電腦你想要作什麼,讓電腦來幫你完成你要作的事情。
Thumbnail
Python的模組和庫是可重用的程式碼塊,可透過import語句引入。特定部分可以透過from和import引入,並可使用as指定別名。第三方模組可透過pip工具安裝並在程式碼中使用。此外,也可以創建自定義模組並在其他Python文件中引用。
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
初入IT產業的人士在學習Python語言後,IT證照如ITS Python認證是否值得考取?本文以ITS證照特點、實施建議和IT認證考試資訊為主,詳述證照的好處和準備時間。
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
在著手開發一套程式時,會讓人覺得煩躁的考量點,其中一個讓人頭痛的,應該就是 UI 的設計跟串接了吧,究竟有沒有一個套件,能讓開發者能夠以一套語言,就能打遍天下呢?
Thumbnail
先前我們談論到靜態方法就像是定義工具箱一樣,那麼抽象方法就像是共用表格的概念,例如註冊帳號時會填寫的一些基本資料,就有包含制式的表格,裡面有需填寫的欄位,例如姓名,性別等。