2013-11-15 13 views
5

In un caso di test della struttura del robot, imposto una variabile e quindi eseguo un processo.Come posso dire al framework del robot di non registrare una parola chiave?

Poiché l'impostazione della variabile non è un bit interessante di informazioni, non voglio includerla nel mio rapporto.

| Verifying STUFF | 
| | ${endpoint}= | set variable | STUFF 
| | Verify 

La mia relazione contiene questo:

KEYWORD: ${endpoint} = BuiltIn.Set Variable STUFF 

Ma non sarebbe meglio avere lì. Come posso dire a Robot Framework di non registrare questa linea?

------ ------ modificare

Sembra che questo dovrebbe farlo:

pybot --removekeywords NAME:SetVariable testcase.txt 

Ma le parole chiave Imposta variabile sono ancora lì.

(E sì, ho aggiornato il mio quadro robot di 2.8.3 per sfruttare questa funzione.)

+0

Cosa intendete esattamente per "le parole chiave Set Variable sono ancora presenti"? Vuoi dire che sono ancora registrati, o vuoi dire che esistono ancora nel tuo test? Inoltre, stai usando la versione di Robot Framework basata su Java o Python? –

risposta

2

Il meglio che puoi fare è usare

Set Log Level NONE 

ma sarà ancora registrare tutti la parola chiave chiama, solo non qualcosa dentro quelle.

Oppure se si chiama una funzione python che chiama un'altra funzione, la chiamata alla seconda funzione non viene registrata.

Ti piace questa:

*** Settings *** 
Library   lib.py 

*** Test Cases *** 
demo 
    Set Log Level NONE 
    ${a} foo 
    xyzzy 

*** Keywords *** 
xyzzy 
    qwerty 

qwerty 
    No Operation 
    Log 123 

e lib.py essere come questo:

def foo(): 
    abc = bar() 
    return abc 

def bar(): 
    c = 1 
    print c 
    return c 
+0

Grazie, ma questo non fa davvero il trucco. Voglio semplificare il registro rimuovendo qualsiasi parola chiave che non "fa" nulla. (L'impostazione di una variabile su una costante non vale come "fare qualcosa" per me.) Voglio che i miei file di registro siano facili da comprendere per chiunque e l'impostazione di una variabile è semplicemente fluff. Potrei dover rielaborare alcune altre parole chiave per evitarlo. –

+1

Inserisci le tue variabili in un file http://robotframework.googlecode.com/svn/trunk/doc/userguide/RobotFrameworkUserGuide.html#variable-file – Harri

2

È possibile utilizzare --removekeywords o l'opzione --flattenkeywords su pybot per rimuovere il contenuto della parola chiave Quindi, se tu hai eg parola chiave "pippo" che contiene molte parole chiave di registrazione, puoi impostare l'opzione "--flattenkeywords name: foo" su pybot, e nel log vedrai solo la parola chiave primaria, ma nessuna parola chiave al suo interno.

http://robotframework.googlecode.com/hg/doc/userguide/RobotFrameworkUserGuide.html?r=2.8.3#removing-and-flattening-keywords

+0

Che sicuramente sembra che dovrebbe funzionare, ma finora mi ha deluso. Maggiori dettagli in seguito. –

+0

Hai avuto successo usando --removekeywords? puoi darmi un esempio? –

+0

@SkipHuffman Ho aggiornato la mia risposta, nessuna delle opzioni effettivamente fa esattamente la cosa che vuoi. – kontulai

2

Il problema è che quando si assegna una variabile come ${var} = Keyword, il nome della parola chiave nel quadro delle uscite del robot è ${var} = Keyword, non Keyword come ci si aspetterebbe. Se la tua parola chiave proviene da una biblioteca o da un file di risorse, verrà incluso anche il suo nome come ${var} = MyLibrary.Keyword. Quest'ultima è una caratteristica, ma la prima è una bug che si spera risolta in RF 2.9.

Una soluzione facile per il nome della parola chiave, per ora, incluso il nome della variabile utilizza i caratteri jolly.Qualcosa del genere dovrebbe funzionare per voi:

--RemoveKeywords 'name:* = BuiltIn.Set Variable' 
+1

Non è proprio quello che sto cercando. L'intera azione di impostare la variabile non è interessante nel rapporto e nel registro, quindi mi piacerebbe lasciarlo fuori. –

+0

Ciao. I nostri test contengono dati sensibili, ad esempio una variabile con password che non dovrebbe essere in * log * e * output.xml *. E ci sono diversi problemi: 1. è che non possiamo filtrare per nome di variabile, solo per pattern di nome di parole chiave che non è adatto a noi. quindi la variabile suite set $ {some_password} non può essere rimossa usando il pattern \ * some_password \ *. 2. anche se i dati delle parole chiave sono stati rimossi nel file log.html, output.xml contiene ancora tutti i dati segreti. –

-1

Se si utilizza una libreria di pitone, le seguenti opere di scimmia-patching per me:

from robot.libraries.BuiltIn import BuiltIn 
from robot.output.logger import LOGGER 
import types 

def _nothing(*args, **kwargs): 
    pass 

def disable_keyword_logging(self): 
    self._logging_methods = (LOGGER.start_keyword, LOGGER.end_keyword) 
    LOGGER.start_keyword = types.MethodType(_nothing,LOGGER) 
    LOGGER.end_keyword = types.MethodType(_nothing,LOGGER) 

def enable_keyword_logging(self): 
    LOGGER.start_keyword, LOGGER.end_keyword = self._logging_methods 

Poi, quando questo script viene eseguito:

Disable keyword logging 
Log Hello world 
Enable keyword logging 

la parola chiave "Log" non viene registrata nell'output ma l'output è. Se non si desidera realmente nulla (anche senza informazioni di debug/info/warn registrate dalle parole chiave richiamate), sarà comunque necessario impostare il livello del registro su "NONE".

+0

Perché queste funzioni prendono 'self' come parametro? Non fanno parte di una definizione di classe. Come scritto, questo codice non funzionerà. –

0

Robot Framework non registra le variabili "globali" come parte di una tabella di variabili. Globale è tra virgolette perché Imposta variabile globale in realtà viene registrato, ma se si inizializza la variabile in questo modo ...

*** Variables *** 
${endpoint}  stuff 

*** Keywords *** 

... allora non sarà nel registro. Inoltre, se non vuoi che nessuno veda la variabile affatto se guarda solo il front-end della tua suite di test, puoi seppellirla in un file di risorse e chiamare il file di risorse.

Robot Framework registra il set Imposta parole chiave e risultati perché Set Variable implica che si sta impostando una variabile in modo dinamico e potrebbe essere impostata in base al risultato di una parola chiave, nel qual caso si vorrebbe probabilmente sapere quali risultato della parola chiave è. Se stai solo creando una variabile statica, non è necessario alcun lavoro aggiuntivo oltre la tabella. Una variabile dinamica è una parte necessaria del tuo codice?

Problemi correlati