[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

為什麼會看到廣告
1會員
9內容數
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
迎新活動「方格新手村」:新格友註冊加入方格子,知名日料吃到飽餐券送給你! 👉 還不是 vocus 的會員嗎?點此註冊,參與新手村活動 👈 近期站上也出現了不少新格友,為了歡迎各位的加入,「方格新手村」隨之登場! 即日起,只要是新註冊帳號於活動期間內發佈 3 則文章,就有機會抽獎獲得知名日料吃到飽餐券。原格友也可以一起同樂,我們準備了小任
Thumbnail
2024-06-21
閱讀心得:說話是一種展現自我的生活態度|成熟大人的說話課我們每天都在說話,但說出的話合適嗎? Sunny最近讀完一本有關溝通的書籍。 這是由世紀奧美公關的創辦人「丁菱娟」所寫的書,書的全名《丁菱娟的成熟大人說話課:如何說,才能得體又不傷人?反擊時,如何堅定又有力量?任何情境都可用的38個溝通之道》。 會找這本書來看,主要是因為Sunny 近期發
Thumbnail
2024-07-10
防曬產品係數測試報告彙整(2024年)從2014年起,自己對於市售防曬產品的效能產生了濃厚的興趣。因為當時候發現不少產品的防曬係數其實標示是有問題的,像是原本應該是人體測試的SPF與PA數值,實際上沒有做,只用機器測試的數據來充當,但這兩者卻有很大的差異。像是防曬係數其實有強度、廣度與平均度三個面向需要一起判斷,但多數廠商並沒有完整標示
Thumbnail
如何用Python建立新欄位(assign)?介紹如何用assign函數在Python中建立新欄位
Thumbnail
2024-06-03
如何用Python繪製堆疊直條圖(以2022年直轄市市長選舉政治獻金為例)如何用Python繪製堆疊直條圖(以2022年直轄市市長選舉政治獻金為例)
Thumbnail
2024-05-30
不間斷 Python 挑戰 Day 20 - 專題:我如何真確理解...類別?全球公衛教授和公共教育家漢斯.羅斯林(Hans Rosling)在其著名的暢銷書「真確」中,提出了13個關於全球貧富、人口、出生/死亡率、教育、公衛等的「留意認知落差測驗」,回答的人不乏受過良好教育的專業人士,結果顯示,受測者在前12題平均只答對2題,遠不如隨機亂選的黑猩猩(如果黑猩猩會回答問題的話
2022-01-09
[5 min python] 字串格式化使用 F strings從Python 3.6開始,可以使用f-Strings這個新的方法來做字串的格式化。f-Strings 也稱為“格式化的字串文字”,是一種字串文字,其開頭是 f,後面是大括號,其中包含將被替換為其值的表示式。這些表示式在執行時被評估,然後使用 "format" 協議進行格式化 例如
Thumbnail
2021-12-28
台股 星期幾漲跌機率探索|用 python 告訴你台股星期幾最容易上漲示範如何用 python,找出台股星期幾最容易上漲,只要按分享的程式碼就能輕易計算, 另外,也可以把加權指數的收盤資料更換成其他個股的收盤資料, 就能算出該個股星期幾最容易上漲了,有機會再分享。  把漲跌次數換成累計報酬率之後,其實不管是星期幾都沒有明顯容易上漲或下跌, 跟單純只看機率的結果不一樣,
3分鐘學會用python計算報酬率|加權指數|Python 財金系列|用pandas 進行3分鐘學會用python計算加權指數報酬率,並且用pandas 進行條件篩選 濾掉金融海嘯時期,並篩選出漲跌幅大於1%的日期 https://youtu.be/EMfclSESgBo
Thumbnail