2013-11-15 36 views
5

在機器人框架測試用例中,我設置了一個變量,然後執行一個過程。如何告訴機器人框架不要記錄關鍵字?

由於該變量的設置不是一個非常有趣的信息位,我不想在我的報告中包括。

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

我的報告包含此:

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

但我寧願沒有這個文件。我如何才能告訴Robot Framework只是不記錄該行?

------編輯------

它看起來像這樣應該這樣做:

pybot --removekeywords NAME:SetVariable testcase.txt 

但設置變量的關鍵字仍然存在。

(是的,我升級我的機器人框架2.8.3利用這個功能的。)

+0

你的意思是什麼「設置變量關鍵字仍然存在」?你的意思是他們還在記錄中,還是你的意思是他們仍然存在於你的測試中?另外,您是否使用Robot Framework的基於Java或Python的版本? –

回答

2

你能做的最好是用

Set Log Level NONE 

,但它仍然會記錄所有關鍵字調用,而不是那些內部的任何東西。

或者,如果您調用一個調用另一個函數的python函數,那麼不會記錄對第二個函數的調用。

像這樣:

*** Settings *** 
Library   lib.py 

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

*** Keywords *** 
xyzzy 
    qwerty 

qwerty 
    No Operation 
    Log 123 

和lib.py是這樣的:

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

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

謝謝,但這並不是真的。我想通過刪除任何不「做任何事情」的關鍵字來簡化日誌。 (將一個變量設置爲一個常量並不算真正的「做某些事情」)我希望我的日誌文件對於任何人來說都很容易理解,並且設置一個變量只是鬆散的。我可能不得不重做一些其他關鍵字來避免它。 –

+1

把你的變量在文件http://robotframework.googlecode.com/svn/trunk/doc/userguide/RobotFrameworkUserGuide.html#variable-file – Harri

2

可以--removekeywords或--flattenkeywords選項使用上pybot刪除關鍵字的內容所以,如果你有例如關鍵字「foo」包含很多記錄關鍵字,您可以將「--flattenkeywords name:foo」選項設置爲pybot,並且在日誌中只能看到主關鍵字,但其中沒有關鍵字。

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

+0

這肯定看起來像它應該工作,但到目前爲止,它已經沒有我了。稍後更詳細。 –

+0

您使用過--removekeywords成功了嗎?你可以給我一個例子嗎? –

+0

@SkipHuffman我更新了我的答案,這兩個選項實際上並沒有做你想要的東西。 – kontulai

2

的問題是,當你將一個變量一樣${var} = Keyword,在機器人框架輸出關鍵字的名稱爲${var} = Keyword,而不是Keyword如你所願。如果您的關鍵字來自庫或資源文件,則其名稱也將包含在內,如${var} = MyLibrary.Keyword。後者是一個功能,但前者是一個bug,有望在RF 2.9中修復。

現在,關鍵字名稱的簡單解決方法是使用通配符,包括變量名稱。像這樣的東西應該爲您的工作:如果您使用的是Python庫,下面的猴子打補丁的作品對我來說

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

這不是我正在尋找的。設置變量的整個操作在報告和日誌中並不令人感興趣,因此我想將其忽略。 –

+0

你好。我們的測試包含敏感數據,例如,密碼不應在* log *和* output.xml *中的變量。並且有幾個問題:1.我們不能通過變量名進行過濾,只能通過不適合我們的關鍵字名稱模式進行過濾。因此無法使用\ * some_password \ *模式刪除設置的變量$ {some_password}。 2.即使關鍵字數據在log.html中被移除,output.xml仍包含所有祕密數據。 –

-1

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 

然後,當該腳本運行:

Disable keyword logging 
Log Hello world 
Enable keyword logging 

「Log」關鍵字未記錄到輸出,但輸出是。 如果你真的不需要任何東西(也沒有被調用關鍵字記錄的debug/info/warn信息),你仍然必須將日誌級別設置爲「NONE」。

+0

爲什麼這些函數將'self'作爲參數?它們不是類定義的一部分。正如所寫的,這段代碼不起作用。 –

0

Robot Framework不會將「全局」變量記錄爲變量表的一部分。 Global是在引號,因爲設置全局變量實際上被記錄,但如果你初始化變量是這樣的...

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

*** Keywords *** 

...那麼它不會在日誌中。另外,如果你不想讓任何人看到這個變量,只要他們只是看着你的測試套件的前端,就可以將它埋在一個Resource文件中,並且調用Resource文件。

機器人框架記錄您的設置變量關鍵字和結果,因爲設置變量意味着你動態地設置變量,並基於關鍵字的結果可能設置它,在這種情況下,你可能想知道是什麼關鍵字的結果是。如果你只是創建一個靜態變量,那麼就不需要額外的工作。動態變量是你的代碼的必需部分嗎?

相關問題