2014-12-22 15 views
7

Si supponga Ho una classe in Python:Come importare e utilizzare classi definite dall'utente nel quadro robot con pitone

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

    def print_args(self): 
     print arg1, arg2 

voglio usare robotframework per implementare i miei scenari test. Voglio fare un'istanza dalla classe superiore e chiamare i suoi metodi. Come farlo? So come importare la lib; dovrebbe essere così:

Library TestClass 

Non so come inizializzare un oggetto da questa classe e chiamare i metodi di classe tramite questo oggetto. Se avessi voluto per la sua attuazione con Python, vorrei scrivere qualche pezzo di codice come questo:

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

Ora, voglio sapere come scrivere questo robotframework. Qualsiasi aiuto?

risposta

11

Per importare la libreria con argomenti, basta add them after the library name:

Library TestClass ARG1 ARG2 

Così il "importazione" e la creazione di istanze sono fatti in un solo colpo. Ora, la cosa che può essere difficile è capire l'ambito della tua istanza. Questo è spiegato nella sezione "Test Library Scope":

Una nuova istanza viene creata per ogni caso di test. [...] Questo è l'impostazione predefinita.

Si noti che se si desidera importare la stessa libreria più volte con argomenti diversi, e quindi hanno i casi di differenza delle classi, si dovrà assegnare loro un nome durante l'importazione:

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

E poi nel i test, si devono precedere le parole chiave:

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

Questo è spiegato in this section of the User Guide.

+0

Grazie per la risposta. Capisco davvero come usare la mia classe. Ma mentre leggo i documenti, scopro che posso avere solo un'istanza per ogni classe; perché il framework non salva alcun ID o nome per le istanze e chiamo solo metodi di classe senza fare riferimento a nulla, ho capito bene? –

+1

puoi avere istanze multiple in effetti. Ho modificato la mia risposta per affrontare questo punto. –

+0

Grazie per la tua risposta esaustiva. –

1

Sono stato in grado di creare istanze di classi python su richiesta (cioè non solo argomenti hardcoded come tramite la tecnica Library).

Ho usato un metodo di supporto per creare la classe. Sono stato in grado di ottenere lo script robot per chiamare direttamente il costruttore della classe, ma è in grado di chiamare le funzioni in Python, in modo che possiamo creare una classe o namedtuple fornendo una funzione di interfaccia basata su:

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)