簡體   English   中英

Robot Framework自定義關鍵字僅在測試設置中

[英]Robot Framework custom keyword only in Test Setup

Robot Framework是否有可能只允許在“測試設置”部分(或“測試拆解”)中執行自定義關鍵字 假設我有一個名為“ My Setup的關鍵字。 如果在正常步驟(即不在“測試設置”中)執行“ My Setup ,則測試應失敗。 關於用戶關鍵字和瀏覽StackOverflow的RF文檔並沒有給我任何有意義的結果。

例如, Run keyword if all tests passed ,則Robot Framework內置函數Run keyword if all tests passed的文檔指出“嘗試在其他任何地方使用它會導致錯誤”,因此我想知道應該采用某種方式將此方法應用於自定義關鍵字。

我試圖通過在開始執行測試之前分析測試文件並檢查是否出現“測試設置”中未出現的“ My Setup來解決此問題。 但是,這感覺很麻煩,因此我正在尋找如下內容:

def MySetup(self, some_arg):
    if MAGIC.not_inside_test_setup():
        raise AssertionError('"My Setup" can be executed only in Test Setup')

我在同事的幫助下設法解決了這個問題。 解決方案如下:

假設在名為My Library定義了My Setup關鍵字。

  1. 使用偵聽器檢查何時通過名為start_keyword的偵聽器方法執行自定義關鍵字“ My Setup 該方法包含有關該關鍵字是作為常規關鍵字還是作為Test Setup / Teardown關鍵字執行的信息。
  2. 如果“ My Setup以not-test-setup關鍵字運行,則應在偵聽器中通過“ My Library實例設置“ My Library內部的全局錯誤標志。
  3. 在執行“ My Setup ”開始時,檢查“ My Library的全局錯誤標志是否已設置; 如果設置,則會引發錯誤。

MyLibrary.py

SETUP_ERROR = None

class MyLibrary(object):

    def MySetup(self, some_arg):
        global SETUP_ERROR

        if SETUP_ERROR:
            raise AssertionError(SETUP_ERROR)

        # Otherwise continue with the setup

    def _SetError(self, error):
        global SETUP_ERROR
        SETUP_ERROR = error

Listener.py

from MyLibrary import MyLibrary

class MyListener(object):
    # ...
    def start_keyword(self, name, attributes):
        if name == 'MyLibrary.My Setup' and attributes['type'] != 'Setup':
            MyLibrary()._SetError('"My Setup" can be executed only in Test Setup')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM