2014-12-22 9 views
7

Angenommen, ich habe eine Klasse in Python zu verwenden:Wie importieren und benutzerdefinierte Klassen in Roboter-Framework mit Python

class TestClass(object): 
    def __init__(self, arg1, arg2): 
     self.arg1 = arg1 
     self.arg2 = arg2 

    def print_args(self): 
     print arg1, arg2 

Ich mag robotframework verwenden, um meine Tests Szenarien umzusetzen. Ich möchte eine Instanz von oben Klasse machen und seine Methoden aufrufen. Wie geht das? Ich weiß, wie man die lib importiert; es sollte so aussehen:

Library TestClass 

Ich weiß nicht, wie ein Objekt aus dieser Klasse initialisieren und über diese Objektklasse Methoden aufrufen. Wenn ich es mit Python implementieren wollte, würde ich einige Stück Code wie folgt schreiben:

import TestClass 
test = TestClass('ARG1', 'ARG2') 
test.print_args() 

Nun möchte ich wissen, wie diese in robotframework zu schreiben. Irgendeine Hilfe?

Antwort

11

die Bibliothek mit Argumenten zu importieren, nur add them after the library name:

Library TestClass ARG1 ARG2 

So ist der "Import" und die Instanziierung in einem Schuss fertig sind. Nun kann es schwierig sein, den Umfang Ihrer Instanz zu verstehen. Dies wird ausführlich im Abschnitt "Test Library Scope" des Benutzerhandbuchs erläutert:

Für jeden Testfall wird eine neue Instanz erstellt. [...] Dies ist die Standardeinstellung.

Beachten Sie, dass, wenn Sie die gleiche Bibliothek mehrmals mit verschiedenen Argumenten zu importieren, und daher Unterschied Instanzen von Klassen haben, werden Sie sie auf Import nennen müssen:

Library TestClass ARG1 ARG2 WITH NAME First_lib 
Library TestClass ARG3 ARG4 WITH NAME Second_lib 

Und dann in Ihre Tests, müssen Sie die Schlüsselwörter Präfix:

*** Test Cases *** 
MyTest 
    First_lib.mykeyword foo bar 
    Second_lib.mykeyword john doe 

Das in this section of the User Guide erklärt.

+0

Vielen Dank für die Antwort. Ich verstehe wirklich, wie man meine Klasse benutzt. Aber während ich die Dokumente lese, finde ich heraus, dass ich nur eine Instanz von jeder Klasse haben kann; weil das Framework keine ID oder Namen für Instanzen speichert, und ich nur Methoden der Klasse aufrufen, ohne auf etwas Bezug zu nehmen. Habe ich es richtig verstanden? –

+1

können Sie mehrere Instanzen tatsächlich haben. Ich habe meine Antwort bearbeitet, um diesen Punkt anzusprechen. –

+0

Danke für Ihre umfassende Antwort. –

1

Ich konnte Python-Klassen bei Bedarf instanziieren (d. H. Nicht nur hart codierte Argumente wie über die Bibliothekstechnik).

Ich habe eine Hilfsmethode verwendet, um die Klasse zu erstellen. Ich konnte das Robot-Skript erhalten direkt die Klasse Konstruktor aufzurufen, aber es in der Lage ist, Funktionen in Python zu nennen, so dass wir eine Klasse oder namedtuple erstellen, indem Sie eine funktionsbasierte Schnittstelle zur Verfügung stellt:

File: resource_MakeMyClass.robot 

*** Settings *** 
Library    myClass 

*** Keywords *** 
_MakeMyClass 
    [Arguments] ${arg1} ${arg2} 
    ${result} = makeMyClass ${arg1} ${arg2} 
    [Return]  ${result} 

----------------------------------------------------- 

File: myClass.py 

class MyClass(object): 
    def __init__(self, arg1, arg2): 
     self.arg1 = arg1 
     self.arg2 = arg2 

def makeMyClass(arg1, arg2): 
    return MyClass(arg1, arg2) 
Verwandte Themen