iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0

監聽器(Listeners)是 Robot Framework 提供的一種擴充機制,它允許我們在測試執行的不同階段攔截事件並執行自訂的 Python 程式碼。這些階段包括但不限於測試開始前、測試結束後、單個測試案例的開始和結束等,在這個章節我們就一起來認識一下 Robot Framework Listeners 吧!

什麼是 監聽器 (Listeners)?

我們可以把 Robot Framework 的監聽器當作是第三方庫的套件 ,其目的是在搜集測試過程的資料或是產出,並且不影響本身測試流程,是一個旁聽者在一旁監聽著,透過監聽器我們可以做到測試的過程中取得 test case 的測試結果,及時的更新到測試結果管理平台,下面我們一起來看一下該如何實作一個 Robot Framework 的監聽器。

使用監聽器

當我們今天要使用監聽器時是透過在 robot 觸發測試的指令中加入 --listener,後面接上監聽器的包及可,我們可以看看下面的範例:

# 指定監聽器的文件絕對路徑
robot --listener integration/TestReport.py test/

# 執行第三方的監聽器,監聽器也可以是由第三方提供,我們透過 pip install 下載後使用
robot --listener allure_robotframework test/

# 我們也可以同時運行多個監聽器
robot --listener allure_robotframework --listener integration/TestReport.py test/

# 當今天我們撰寫監聽器的 script 需要傳入參數時,也可以透過:的方式傳入
robot --listener TestReport.py:arg1:arg2 test/
robot --listener TestReport.py:chrome:en test/

監聽器版本

目前監聽器支援兩種版本,兩者可以調用的參數有些許的差異,我們可以針對實際需求選擇所需的版本,版本 2 從 Robot Framework 2.1 開始支援,版本 3 則是從 Robot Framework 3.0 開始支援,當我們今天使用時,需要透過 ROBOT_LISTENER_API_VERSION 指定我們現在要使用的是哪個版本,然而監聽器 2 和 3 之間最大的差異是在時,版本 3 可以在測試的過程中影響測試結果,也就是說原先如果 Robot Framework 在執行 Test Case 的結果是 pass,我們可以在監聽器終將其修改為 fail,監聽器提供許多可以調用的參數,由於篇幅的關係,我們在這邊就不額外多做說明,可以參考官方文件:

監聽器實際範例

新增 Listener 檔案

需要注意的是,這邊的 class name 需要跟檔案名稱相同才可以正確的使用到 Listener,以這個範例為例,我們需要將檔案名稱設定為 TestListener.py

from robot.libraries.BuiltIn import BuiltIn

class TestListener:
    ROBOT_LISTENER_API_VERSION = 2

    def start_suite(self, name, attrs):
        BuiltIn().log_to_console(f"開始測試套件: {name}")

    def end_suite(self, name, attrs):
        BuiltIn().log_to_console(f"結束測試套件: {name}, 狀態: {attrs['status']}")

    def start_test(self, name, attrs):
        BuiltIn().log_to_console(f"開始測試案例: {name}")

    def end_test(self, name, attrs):
        BuiltIn().log_to_console(f"結束測試案例: {name}, 狀態: {attrs['status']}")

在上面的程式碼中,我們透過 ROBOT_LISTENER_API_VERSION 是 2 的版本作為範例,並且分別在 suite 及 test 的 setup, teardown 在終端機中印出字串。

新增 robot 測試檔案

接著是創建一個 test.robot 的測試檔案:

*** Settings ***
Documentation    Test Listeners

*** Test Cases ***
Test Case 001
    Log    message=Print Test Case 001

Test Case 002
    Log    message=Print Test Case 002

觸發測試

透過上面介紹觸發 Listener 的方式觸發測試:

robot --listener TestListener.py  test.robot

最後我們可以在終端機上面看到我們剛剛指定 log_to_console 的資料:

==============================================================================
Test :: Test Tags                                                             
==============================================================================
start_suite name: Test
Test Case 001                                                         start_test name: Test Case 001
.end_test name: Test Case 001, status: PASS
Test Case 001                                                         | PASS |
------------------------------------------------------------------------------
Test Case 002                                                         start_test name: Test Case 002
.end_test name: Test Case 002, status: PASS
Test Case 002                                                         | PASS |
------------------------------------------------------------------------------
end_suite name: Test, status: PASS
Test :: Test Tags                                                     | PASS |
2 tests, 2 passed, 0 failed
==============================================================================

結語

Robot Framework 的監聽器是一個強大且靈活的工具,能夠幫助你更好地控制和監控自動化測試流程。通過理解並使用監聽器,你可以根據特定需求自訂測試執行過程,從而大幅提高測試效率和測試報告的價值。
希望這篇部落格能幫助你更好地理解和使用 Robot Framework 的監聽器功能。如果有任何疑問或需要更多範例,歡迎在下方留言一起交流。


在這個章節結束後,關於 Robot Framework 的基礎概念我們就先介紹到這裡啦!接下來開始,我們將進入到 結合 Playwright 進行 Web 自動化測試 實戰環節啦!關於 Robot Framework 的部分,其實還是有很多使用的方式沒有介紹到,但是等到大家真的要使用到時再查也不遲,先知道這些基礎的使用後,對於我們後續在 Web、App 自動化測試實際操作中會有很大的幫助,那麼感謝大家的支持,明天讓我們一起朝 Web 自動化測試邁進吧!


上一篇
[8] Robot Framework 自定義 keyword
下一篇
[10] Robot Framework 結合 Playwright 進行 Web 自動化測試 - 認識 Playwright
系列文
建立應用程式 UI 自動化測試 - 以 Robot Framework 為例30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言