У меня есть следующий пример ключевого слова в моей пользовательской библиотеке Robot Framework, которая использует встроенную библиотеку Robot Framework для вызова другого ключевого слова в последовательности тестирования с использованием параметров:
# MyLibrary.py
from robot.libraries.BuiltIn import BuiltIn
class MyLibrary(object):
def run_a_keyword(self, keywordName):
builtinLib = BuiltIn().get_library_instance("BuiltIn")
parameters = ['hi', 'second param']
# Runs the keyword with the given parameters
builtinLib.run_keyword(keywordName, *parameters)
Я бы запустил, например, следующую упрощеннуюtest, чтобы проверить, что ключевое слово работает со свойством, также проверяя ошибки:
*** Settings ***
Library MyLibrary.py
*** Test Cases ***
Test Case
Run A Keyword My Keyword
Run Keyword And Expect Error Keyword 'Another Keyword' expected 3 arguments, got 2. Run A Keyword Another Keyword
*** Keywords ***
My Keyword
[Arguments] ${arg1} ${arg2}
Log To Console Keyword Executed
Another Keyword
[Arguments] ${arg1} ${arg2} ${arg3}
Log To Console Keyword Executed
Я ожидаю, что этот контрольный пример пройдёт, но контрольный пример не пройдёт на втором шаге сRun Keyword and Expect Error
несмотря на то, что я заявил, что ошибка ожидалась?
Мой обходной путь для этого заключался в том, чтобы перехватить исключение, вызванное вызовом builtInLib внутри моего ключевого слова, и повторно выдать его, после этого последовательность тестирования с Run Keyword And Expect Error
работает правильно:
def run_a_keyword(self, keywordName):
builtinLib = BuiltIn().get_library_instance("BuiltIn")
parameters = ['hi', 'second param']
try:
builtinLib.run_keyword(keywordName, *parameters)
except Exception as err:
raise Exception(err.message)
Однако мне нужен слушатель для передачи ошибок в службу:
class MyListener(object):
ROBOT_LISTENER_API_VERSION = 2
ROBOT_LIBRARY_SCOPE = 'GLOBAL'
def __init__(self):
self.ROBOT_LIBRARY_LISTENER = self
def log_message(self, message):
level = message['level']
if level == 'FAIL':
send_the_error_to_somewhere(message['message'])
log_message
вызывается дважды (когда встроенная функцияпозвонил и когда подниму новое исключение).Это приводит к тому, что одна и та же ошибка будет обрабатываться и регистрироваться дважды, что не то, что я хочу.
Итак: Как я могу Run Keyword And Expect Error
с ключевым словом, которое вызывает встроенную функцию и до сих поробработать ошибку только один раз?