2013-11-15 20 views
5

W przypadku testowym zestawu robotów ustawiam zmienną, a następnie wykonuję proces.Jak mogę powiedzieć układowi robot, aby nie rejestrował słowa kluczowego?

Ponieważ ustawienie zmiennej nie jest bardzo interesującą informacją, nie chcę uwzględniać tego w moim raporcie.

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

Mój raport zawiera to:

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

Ale raczej nie ma go tam. Jak mogę powiedzieć Robot Framework, aby nie logował tej linii?

------ edit ------

Wygląda to powinien to zrobić:

pybot --removekeywords NAME:SetVariable testcase.txt 

Ale Set Variable słowa kluczowe są nadal.

(I tak, zmodernizowane moja robota ramy 2.8.3, aby skorzystać z tej funkcji.)

+0

Co dokładnie masz na myśli, mówiąc, że słowa kluczowe "Ustaw zmienną wciąż istnieją"? Czy masz na myśli, że nadal są zalogowani, czy masz na myśli to, że wciąż istnieją w teście? Czy używasz również wersji Robot Framework w wersji Java lub Python? –

Odpowiedz

2

Najlepsze co możesz zrobić, to użyć

Set Log Level NONE 

ale nadal będzie ona rejestrować wszystkie słowo kluczowe wywołuje, po prostu nic w nich nie ma.

Lub jeśli wywołasz funkcję Pythona, która wywołuje inną funkcję, to połączenie z drugą funkcją nie jest rejestrowane.

Jak to:

*** Settings *** 
Library   lib.py 

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

*** Keywords *** 
xyzzy 
    qwerty 

qwerty 
    No Operation 
    Log 123 

i lib.py będąc tak:

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

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

Dzięki, ale to nie wystarczy. Chcę uprościć dziennik, usuwając wszelkie słowa kluczowe, które niczego nie "robią". (Ustawienie zmiennej na stałą nie zalicza się do "robienia czegoś"). Chcę, aby moje pliki dziennika były łatwe do odczytania i zrozumienia, a ustawienie zmiennej jest po prostu puszyste. Być może będę musiał przerobić inne słowa kluczowe, aby tego uniknąć. –

+1

Umieść zmienne w pliku http://robotframework.googlecode.com/svn/trunk/doc/userguide/RobotFrameworkUserGuide.html#variable-file – Harri

2

Można użyć --removekeywords lub opcja --flattenkeywords na pybot usunąć zawartość kluczowych Więc jeśli masz np słowo kluczowe "foo", które zawiera wiele słów rejestrujących, możesz ustawić opcję "--flatena słów kluczowych: foo" na pybot, aw dzienniku zobaczysz tylko podstawowe słowo kluczowe, ale nie słowa kluczowe w nim.

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

+0

To na pewno wygląda tak, jak powinno działać, ale jak na razie to mnie zawodzi. Więcej szczegółów później. –

+0

Czy odniosłeś sukces używając --removekeywords? Czy możesz podać mi przykład? –

+0

@SkipHuffman Zaktualizowałem swoją odpowiedź, żadna z opcji faktycznie nie robi dokładnie tego, co chcesz. – kontulai

2

Problem polega na tym, że po przypisaniu zmiennej jak ${var} = Keyword, nazwę słowa kluczowego w wyjściach ramowych robot ${var} = Keyword nie Keyword jak można by oczekiwać. Jeśli słowo kluczowe pochodzi z biblioteki lub z pliku zasobów, jego nazwa będzie również zawierała się pod nazwą ${var} = MyLibrary.Keyword. Ta ostatnia jest cechą, ale pierwsza to bug, która, mam nadzieję, została ustalona w RF 2.9.

Łatwe obejście nazwy słowa kluczowego na razie, w tym nazwa zmiennej używa symboli wieloznacznych.Coś jak to powinno działać dla Ciebie:

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

To nie jest dokładnie to, czego szukam. Cała akcja ustawiania zmiennej nie jest interesująca w raporcie i dzienniku, więc chciałbym ją pominąć. –

+0

Witam. Nasze testy zawierają poufne dane, na przykład zmienną z hasłem, która nie powinna znajdować się w * log * i * output.xml *. I jest kilka problemów: 1. jest to, że nie możemy filtrować według nazwy zmiennej, tylko według wzoru nazwy słowa kluczowego, który nie jest dla nas odpowiedni. więc nie można usunąć ustawionej zmiennej pakietu $ {some_password} przy użyciu wzorca \ * some_password \ *. 2. nawet jeśli dane słowa kluczowego zostały usunięte w pliku log.html, plik output.xml nadal zawiera wszystkie tajne dane. –

-1

przypadku korzystania z biblioteki Pythona, małpa-łatanie następujących utworów dla mnie:

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 

Wtedy gdy ten skrypt jest uruchamiany:

Disable keyword logging 
Log Hello world 
Enable keyword logging 

słowo kluczowe "Log" nie jest rejestrowane na wyjściu, ale wyjście jest. Jeśli naprawdę nie chcesz niczego (również bez informacji debug/info/warn zarejestrowanych przez wywołane słowa kluczowe), nadal musisz ustawić poziom dziennika na "BRAK".

+0

Dlaczego te funkcje przyjmują "self" jako parametr? Nie są częścią definicji klasy. Jak napisano, ten kod nie zadziała. –

0

Robot Framework nie rejestruje zmiennych "globalnych" jako części tabeli zmiennych. Global jest w cudzysłowie, ponieważ globalny Set Variable faktycznie jest zalogowany, ale jeśli zainicjować zmienną jak tak ...

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

*** Keywords *** 

... to nie będzie w dzienniku. Dodatkowo, jeśli nie chcesz, aby ktokolwiek zobaczył zmienną w ogóle, jeśli tylko patrzysz na front swojego zestawu testów, możesz go pogrzebać w pliku zasobów i wywołać plik zasobów.

Robot Framework rejestruje słowa kluczowe i wyniki Set Variable, ponieważ Set Variable oznacza, że ​​dynamicznie ustawiasz zmienną i możesz ją ustawić na podstawie wyniku słowa kluczowego. W takim przypadku prawdopodobnie będziesz chciał wiedzieć, wynikiem tego słowa kluczowego jest. Jeśli tworzysz tylko zmienną statyczną, nie potrzebujesz dodatkowej pracy poza tabelą. Czy zmienna dynamiczna jest wymaganą częścią Twojego kodu?