Я пытаюсь вызвать функцию python из ключевого слова robotframework. Функция python была украшена для вызова с использованием run_keyword из встроенной библиотеки. Это связано с тем, что журналы роботов выглядят хорошо структурированными, если функции библиотеки вызываются через функцию run_keyword из встроенной библиотеки. а не вызываться напрямую. Однако это приводит к бесконечному циклу. Есть ли решение для изящного достижения цели?Вызов украшенной функции python из скрипта robotframework, приводящего к бесконечному рекурсированию
robotkeyword :
do something
#creates a user by calling a function from python based library
create user
python function
@wrap_with_run_keyword
def create_user():
pass
def wrap_with_run_keyword(func):
def func_wrapper(*args, **kwargs):
return run_keyword(func, *args, **kwargs)
return func_wrapper
Я не смог решить эту проблему с помощью частичного приложения.
Однако я выполняю рекурсивный цикл, устанавливая и отменяя атрибут, как показано ниже.
def wrap_with_run_keyword(func):
def func_wrapper(*args, **kwargs):
if not hasattr(func, 'second'):
setattr(func, "second", True)
return run_keyword(func, *args, **kwargs)
else:
delattr(func, "second")
return func(*args, **kwargs)
return func_wrapper
Однако у меня есть проблема. Я определил CREATE_USER следующим
def create_user(properties):
#some code
pass
На вызов этой функции в том, как ниже
create_user("name=abc")
Я получаю следующее сообщение об ошибке: получил аргумент «имя» неожиданное ключевое слово
Почему вы вызываете ключевое слово «создать пользователя» при вызове ключевого слова «создать пользователя»? Вы создали ключевое слово, которое вызывает себя. Вы собираетесь создать ключевое слово _new_, которое вызывает _an существующее_ ключевое слово из какой-либо другой библиотеки? И что вы подразумеваете под «хорошо структурированным»? Не должно быть разницы в журналах, если вы вызываете ключевое слово напрямую через «ключевое слово запуска», за исключением того, что в последнем случае у вас есть один дополнительный уровень вложенности. –
@BryanOakley существует разница в том, как формируются журналы. Если вы вызываете ключевое слово библиотеки из робота, оно выглядит красиво вложенным. Однако, если ваша библиотека дополнительно вызывает другую функцию/ключевое слово, она кажется плоской на том же уровне. Однако, если вы вызываете одну библиотечную функцию из другого с помощью ключевого слова запуска, вложенность также появляется в журналах в виде дерева, что делает его более читаемым. – decoder