2020-05-07|閱讀時間 ‧ 約 9 分鐘

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

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 的敘述方式,是使用 來撰寫 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

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.