Ich versuche, eine Python-Funktion aus dem Schlüsselwort robotframework aufzurufen. Die Python-Funktion wurde so eingerichtet, dass sie mit run_keyword aus der Builtin-Bibliothek aufgerufen werden kann. Dies liegt daran, dass Roboterprotokolle gut strukturiert aussehen, wenn Bibliotheksfunktionen über die Funktion run_keyword aus der integrierten Bibliothek aufgerufen werden. anstatt direkt aufgerufen zu werden. Dies führt jedoch zu einer Endlosschleife. Gibt es eine Lösung, um das Ziel zu erreichen?Aufruf einer verzierten Python-Funktion aus dem Skript robotframework, was zu einer unendlichen Rekursion führt
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
Ich konnte das Problem nicht mit Teilanwendung lösen.
Allerdings vermittle ich die rekursive Schleife durch Setzen und Deaktivieren eines Attributs wie unten angegeben.
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
Ich habe jedoch in ein anderes Problem gerannt. Ich create_user wie folgt definiert
def create_user(properties):
#some code
pass
Auf diese Funktion in der Art und Weise aufrufen unter
create_user("name=abc")
ich die folgende Fehlermeldung erhalten: bekam ein unerwartetes Stichwort Argument ‚name‘
Warum rufen Sie das Schlüsselwort "create user" auf, wenn Sie das Schlüsselwort "create user" aufrufen? Sie haben ein Keyword erstellt, das sich selbst aufruft. Möchten Sie ein _new_-Schlüsselwort erstellen, das ein existierendes Schlüsselwort aus einer anderen Bibliothek aufruft? Und was meinst du mit "gut strukturiert"? Es sollte keinen Unterschied in den Protokollen geben, wenn Sie das Schlüsselwort direkt über "run keyword" aufrufen, außer im letzteren Fall haben Sie eine zusätzliche Verschachtelungsstufe. –
@BryanOakley unterscheidet sich in der Art und Weise, wie Protokolle erstellt werden. Wenn Sie ein Bibliotheksschlüsselwort von robot aufrufen, erscheint es gut verschachtelt. Wenn Ihre Bibliothek jedoch eine andere Funktion/ein anderes Schlüsselwort aufruft, erscheint sie auf der gleichen Ebene. Wenn Sie jedoch eine Bibliotheksfunktion über ein anderes run-Schlüsselwort aufrufen, wird die Verschachtelung auch in den Protokollen in einer Baumstruktur angezeigt, die sie deutlich lesbarer macht. – decoder