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

更新 發佈閱讀 10 分鐘

Robot Framework 在業界自動化測試的使用上算是名氣很響亮的開源框架,不僅 Github Page 有 4.6k 星星與 100 位以上的協作者,還有很多方便的 Plugins,像是 SSHLibrary, SeleniumLibrary…等等。同時也支援 BDD 的 Gherkin 語法可以使得 Test Case 就是一份可執行的 Spec.

raw-image

幾年前,偶然的在某社群聽見 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
raw-image

Terminal 上可以看到跑完的結果與 Report 存放的位置。每一次跑都會產生三個檔案。打開 report.html 可以看到 Test Suite 的統整測試報告:

raw-image

接著看 log.html:

raw-image

在精美的 Robot Framework Report 上看見剛剛所寫的測試案例呈現在報告上,每個細項都是可以展開看裡頭的結構一層一層擴展下去,如此一來不管是否為開發人員都可以看懂這份測試報告。

如果將測試步驟全部展開,會發現 Robot Keyword 所對應的 Python Function 也都被轉成可讀的英文字,顯示上報告上,所以只要將 Python Function 命名的可讀性提高,也可以直接呈現在 Robot Framework Report 上。實在是太方便拉!

raw-image

最後有個細節,藏在最後一個測試步驟裡,先前將頁面 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 猶如一種可以到達目的地的交通工具,有著各式的選擇,如何完成目標才是最重要的。

對了!最後推薦一本書,裡面提到許多在測試與開發的觀念滿受用的!

Specification by Example — 團隊如何交付正確的軟體

raw-image

Reference

要不要選用 Robot Framework 作自動化測試?
筆者公司很多的專案都採用 Robot Framework 進行自動化測試, 到底怎樣的專案適合採用 Robot Framework ,採用或是不採用的主要考量有哪些呢? 這篇文章我們針對 Robot Framework…www.qa-knowhow.com

Robot Framework
Generic open source automation framework for acceptance testing, acceptance test driven development (ATDD), and robotic…robotframework.org

留言
avatar-img
留言分享你的想法!
avatar-img
Wis Vocus
3會員
9內容數
Drunk Wis
Wis Vocus的其他內容
2021/12/11
2021 年底還是不免俗的幫自己來個回顧吧!自從 2018 年開始,我每年都會幫自己寫一篇今年的紀錄,紀錄著自己的成長、紀錄著自己做過的事情、紀錄遇見的朋友、紀錄很多發生的事情… 畢竟要記住的東西太多了~只好…寫下來才不會忘記,順便看看自己到底在幹嘛XD~長大之後再回來看看笑笑~ 工作 個人
Thumbnail
2021/12/11
2021 年底還是不免俗的幫自己來個回顧吧!自從 2018 年開始,我每年都會幫自己寫一篇今年的紀錄,紀錄著自己的成長、紀錄著自己做過的事情、紀錄遇見的朋友、紀錄很多發生的事情… 畢竟要記住的東西太多了~只好…寫下來才不會忘記,順便看看自己到底在幹嘛XD~長大之後再回來看看笑笑~ 工作 個人
Thumbnail
2020/07/19
Selenium WebDriver Page Object Model (POM) 設計模式,若是有開發過 UI 自動化測試或是寫網路爬蟲的多少都有聽過或是看過吧!  最近剛好有幸接觸到某外商的 SDET 面試考試,題目要求使用 POM 設計 UI 自動化測試,又再度幫自己複習一遍。 Why?
Thumbnail
2020/07/19
Selenium WebDriver Page Object Model (POM) 設計模式,若是有開發過 UI 自動化測試或是寫網路爬蟲的多少都有聽過或是看過吧!  最近剛好有幸接觸到某外商的 SDET 面試考試,題目要求使用 POM 設計 UI 自動化測試,又再度幫自己複習一遍。 Why?
Thumbnail
2020/04/24
人生只有一次,在不斷的做選擇之中,不一定都是馬上可以得到解答,常常是一段時間或是幾年後,回過頭來審視自己才能知道答案。看看自己成長了多少?看看自己是不是又犯下後悔不已的事?看看自己是不是改變了? 人生是一台單程高鐵,不能回頭,但可回首。 學生時代的揮霍人生 - 盡情享樂吧 ! 還記得,當年我還是個愛
Thumbnail
2020/04/24
人生只有一次,在不斷的做選擇之中,不一定都是馬上可以得到解答,常常是一段時間或是幾年後,回過頭來審視自己才能知道答案。看看自己成長了多少?看看自己是不是又犯下後悔不已的事?看看自己是不是改變了? 人生是一台單程高鐵,不能回頭,但可回首。 學生時代的揮霍人生 - 盡情享樂吧 ! 還記得,當年我還是個愛
Thumbnail
看更多
你可能也想看
Thumbnail
  最近開始真正學習Python這門語言,這邊就將我所學的筆記記錄在這邊,我起初用這們語言時覺得很雜很混亂都在胡亂使用,聽說python很多東西沒有筆記就會很雜很混亂腦容量要非常非常大,但我自知腦袋記憶體不足,所以現在有了比較完整的概念我就邊學邊筆記,有需要的也可以一起學習哦!我學習到哪就分享到哪裡
Thumbnail
  最近開始真正學習Python這門語言,這邊就將我所學的筆記記錄在這邊,我起初用這們語言時覺得很雜很混亂都在胡亂使用,聽說python很多東西沒有筆記就會很雜很混亂腦容量要非常非常大,但我自知腦袋記憶體不足,所以現在有了比較完整的概念我就邊學邊筆記,有需要的也可以一起學習哦!我學習到哪就分享到哪裡
Thumbnail
相信有在開發Web應用的朋友應該對於Postman這套工具相當熟悉, 這套工具可以協助我們在產品尚未完成之前可以先進行一些基本的介接測試,甚至我們可以使用Postman去呼叫雲端的API,像是Google的語音辨識、文字翻譯、字典查詢…,這類大廠相信也都開放許多標準API(Application P
Thumbnail
相信有在開發Web應用的朋友應該對於Postman這套工具相當熟悉, 這套工具可以協助我們在產品尚未完成之前可以先進行一些基本的介接測試,甚至我們可以使用Postman去呼叫雲端的API,像是Google的語音辨識、文字翻譯、字典查詢…,這類大廠相信也都開放許多標準API(Application P
Thumbnail
其實要為專案建立操作介面的方式很多,除了網頁之外,還能另外寫個專門的手機 APP 連線,或是乾脆升級算法,讓我們能隨口喊一聲「嘿OO!」就搞定,不過⋯
Thumbnail
其實要為專案建立操作介面的方式很多,除了網頁之外,還能另外寫個專門的手機 APP 連線,或是乾脆升級算法,讓我們能隨口喊一聲「嘿OO!」就搞定,不過⋯
Thumbnail
第一個實戰,我們就先從如何連接自己的網站開始,當我們輸入「部落格」時,機器人就會輸出一個表格,只要點選「馬上觀看」,我們就可以直接連接到自己的部落格,此功能其實也可以運用在連接粉專或是其他想要觀看的網站唷!! Flex Message 實際製作教學 選擇模板 更改圖片 修改內容物 修改底部box
Thumbnail
第一個實戰,我們就先從如何連接自己的網站開始,當我們輸入「部落格」時,機器人就會輸出一個表格,只要點選「馬上觀看」,我們就可以直接連接到自己的部落格,此功能其實也可以運用在連接粉專或是其他想要觀看的網站唷!! Flex Message 實際製作教學 選擇模板 更改圖片 修改內容物 修改底部box
Thumbnail
在上一篇文章中,我們已經準備好製作LINE機器人的工具了,接下來我們就要來做一個最簡單的Python與LINE的串接練習,讓我們的機器人活起來,並且做出最基本的回話功能,如果還沒準備好串接所需的工具,記得先去看《【python】Python+LINE Bot 輕鬆打造股市機器人(二) : 所需準備的
Thumbnail
在上一篇文章中,我們已經準備好製作LINE機器人的工具了,接下來我們就要來做一個最簡單的Python與LINE的串接練習,讓我們的機器人活起來,並且做出最基本的回話功能,如果還沒準備好串接所需的工具,記得先去看《【python】Python+LINE Bot 輕鬆打造股市機器人(二) : 所需準備的
Thumbnail
在我們正式開始Python串接LINE Bot的教程之前,有必要先為大家準備好所需的工具。實際上,製作LINE Bot的工具有很多選擇,我將會介紹我在製作過程中所使用的具體工具有哪些,以及如何進行事前的準備工作。讓我們一起走進這個有趣的製作過程吧!
Thumbnail
在我們正式開始Python串接LINE Bot的教程之前,有必要先為大家準備好所需的工具。實際上,製作LINE Bot的工具有很多選擇,我將會介紹我在製作過程中所使用的具體工具有哪些,以及如何進行事前的準備工作。讓我們一起走進這個有趣的製作過程吧!
Thumbnail
大型程式的開發通常不會由一個人獨力完成,而是將程式依功能拆分成不同的函數或是類別,由不同人協力開發成各個模組,最後再將這些模組導入主程式,或是直接套用現有的模組。模組依來源可以分成三大類: Python內建的模組 外部模組,需從第三方的軟體儲存庫(如PyPI)並安裝使用 程式開發者自行開發的模組
Thumbnail
大型程式的開發通常不會由一個人獨力完成,而是將程式依功能拆分成不同的函數或是類別,由不同人協力開發成各個模組,最後再將這些模組導入主程式,或是直接套用現有的模組。模組依來源可以分成三大類: Python內建的模組 外部模組,需從第三方的軟體儲存庫(如PyPI)並安裝使用 程式開發者自行開發的模組
Thumbnail
該篇文章首要為 1.下載python與文字編輯器vs code (Visual Studio Code) 2.撰寫第一支python程式
Thumbnail
該篇文章首要為 1.下載python與文字編輯器vs code (Visual Studio Code) 2.撰寫第一支python程式
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News