判斷是否在 Robot Framework 的執行環境下

基本上我們不希望 test libraries 綁定 Robot Framework,但又希望在 Robot Framework 的執行環境下可以做更緊密的整合,這時候就必須要有方法可以做判斷。

雖然 robot.utils 目前 (2.8.4) 並沒有提供 is_in_context() 之類的方法,但 BuiltIn 提供了一些線索。

目前 execution contexts 都維護在 robot.running.context.EXECUTION_CONTEXTS 底下。

# This is ugly but currently needed e.g. by BuiltIn
EXECUTION_CONTEXTS = ExecutionContexts()

而 BuiltIn 就是透過它來抓取出目前的 execution context。

robot/libraries/BuiltIn.py

from robot.running.context import EXECUTION_CONTEXTS

class BuiltIn(_Verify, _Converter, _Variables, _RunKeyword, _Control, _Misc):

    @property
    def _context(self):
        if EXECUTION_CONTEXTS.current is None:
            raise RobotNotRunningError('Cannot access execution context')
        return EXECUTION_CONTEXTS.current

因此可以檢查 robot.running.context.EXECUTION_CONTEXTS.current,如果不是 None 就表示正處於 Robot Framework 的執行期。

def is_in_robot_context():
    try:
        from robot.running.context import EXECUTION_CONTEXTS as contexts
        return True if contexts.current else False
    except ImportError:
        return False

參考資料:

廣告

發表迴響

Please log in using one of these methods to post your comment:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s