2016-06-21 5 views
0

Ich habe eine Elternklasse wie unten.Robot Framework Klassenvererbung

class ABC (object): 

    def __init__: 
     //Do something 

    def __del__(): 
    //Cleanup what you did 

Testsuiten sind Unterklassen von ABC.

Class A(ABC): 
    def __init__(): 

Class B(ABC): 
    def __init__(): 

Allerdings, wenn ich pybot -i A.robot B.robot ausführen. ABC wird erschaffen und zerstört und dann wieder erschaffen und zerstört. Wie kann ich den ABC-Konstruktor vor jedem Testfall und ABC-Destruktor am Ende aufrufen lassen?

Ich möchte nicht init .robot verwenden, weil ich nicht mit dem Framework gebunden werden will. Eine der Anforderungen besteht darin, den Code aus RBF stecken zu können und ihn dennoch zu verwenden.

Kann ich ABC zu einem Singleton machen?

+0

Ihre Frage scheint keinen Sinn zu ergeben. Normalerweise schreiben Sie keine Testsuiten in Python, und die Option -i bezieht sich auf Tags, nicht auf Testfälle oder Roboterdateien. Selbst wenn Sie Testfälle in Python schreiben, würden Sie die Dateien nicht mit dem Suffix .robot benennen. Fragen Sie nach _suites_, oder fragen Sie eigentlich nach Roboter-Keyword _libraries_? –

Antwort

0

Ich bin mir nicht sicher, ich verstehe, was Sie tun möchten, es sieht so aus, als ob Sie Dinge mehr als nur ein Singleton überschreiben möchten.

Wenn Sie 2 Objekte instanziieren, werden Sie 2 Eltern initiieren.

a = A() # ABC 1 
b = B() # ABC 2 

Aber vielleicht, was Sie wollen, ist so etwas wie dieses:

abc = ABC() 
a = A() 
a.ABC = abc 
b = B() 
b.ABC = abc 

oder Änderung Ihrer __init__() zu __init__(abc)

abc = ABC() 
a = A(abc) 
b = B(abc) 
0

Wie geschrieben Sie nicht in Frage stellen viel Sinn, da Sie kann keine Testsuiten in Python schreiben. Ich vermute, dass Sie nach Keyword-Bibliotheken fragen.

Wenn Sie möchten, dass eine Schlüsselwortbibliothek einmal instanziiert wird, wenn eine Suite ausgeführt wird, und nachdem alle Tests ausgeführt wurden, müssen Sie den Bibliotheksbereich festlegen. Von dem Bedienungsanleitung Abschnitt library scope:

Testbibliotheken steuern können, wenn neue Bibliotheken mit einem Klasse Attribute ROBOT_LIBRARY_SCOPE erstellt werden. Dieses Attribut muss eine Zeichenfolge sein und kann die folgenden drei Werte haben:

TESTFALL Für jeden Testfall wird eine neue Instanz erstellt. Eine mögliche Suite-Einrichtung und Suite Teardown teilen sich eine weitere Instanz. Dies ist die Standardeinstellung.

TEST SUITE Für jede Testsuite wird eine neue Instanz erstellt. Die Testsuiten der untersten Ebene, die aus Testfalldateien erstellt wurden und Testfälle enthalten, verfügen über eigene Instanzen und übergeordnete Suites alle erhalten eigene Instanzen für ihre möglichen Setups und Teardowns.

GLOBAL Während der gesamten Testausführung wird nur eine Instanz erstellt, die von allen Testfällen und Testsuiten gemeinsam genutzt wird. Bibliotheken, die aus Modulen erstellt werden, sind immer global.

Hier ist ein Beispiel mit einer klassenbasierten Stichwort Bibliothek:

class ExampleLibrary: 

    ROBOT_LIBRARY_SCOPE = 'TEST SUITE' 

    def __init__(self): 
     // do something 

    def __del__(self): 
     // do something 

Wichtiger: python garantiert nicht, dass die __del__ Verfahren laufen. Wenn die Beispielbibliothek unmittelbar vor dem Beenden des Interpreters zerstört wird, kann das Objekt zerstört werden, ohne __del__ aufzurufen (was meiner Meinung nach bei Roboterbibliotheken der Fall sein könnte).

+0

Ja Ich habe ABC als GLOBAL und andere Testfälle als TES_SUITE erstellt. Ich würde erwarten, Reihenfolge der exec zu sein: ABC__init __() -> A__init() __ -> A__del __() -> B__init __() -> B__del() -> __ ABC__del() __. Aber passiert ist ABC__init __() -> ABC__del __() -> ABC__init() -> __ A__init __() -> A() __ del __--> ABC__del __(). Nicht sicher, warum ABC__del __() direkt nach dem __init __() aufgerufen wird. – kgunjikar

+0

@kgunjikar: Diese sehen nicht wie Roboter-Testfälle aus. Sind Sie sicher, dass Sie über das Akzeptanztest-Framework von robotframework.org sprechen? Es würde helfen, wenn Sie aufhören würden, in abstrakten Begriffen und geordneten tatsächlichen ausführbaren Codes zu sprechen. –