2016-01-20 56 views
1

我是Robot Framework的新手,我寫了幾個關鍵字,它們調用.py文件中的方法。所有這些Python方法都放在文件llk_machine.py中的一個類中。如何在Robot Framework中保留對象狀態

下面是我的測試用例文件:

*** Settings *** 

Variables   /repo/user/var_attero.py 

Library   %{ROBOTREPO}/Lib/LIB_LLK/llk_machine.py WITH NAME class1 

    *** Keywords *** 
CONNECT 

     [Documentation] Connects to Machine. 
     ${CONNECT_PASS_or_FAIL}= class1.llk_Connect 
     [Return] ${CONNECT_PASS_or_FAIL} 

CONFIGURE_DELAY 

     [Arguments] ${port_number}=1 ${fixed_delay}=25000 
     [Documentation] Configure impairment in the active testbed. 
     ${pass_fail_status}= class1.llk_Config_Impair_fixed ${port_number} ${fixed_delay} 
     [Return] ${pass_fail_status} 

llk_Connect和llk_Config_Impair_fixed在Python文件中的兩個方法。通過關鍵字連接,我連接到機器。當我執行這個測試用例時,它執行得很好並且通過。然後,當我選擇第二個測試用例來配置延遲時,出現「無法連接機器」的錯誤。但是,我已經通過第一個測試用例連接到機器,並且在物理檢查時,機器已連接到我的計算機。

所以我認爲另一個對象正在實例化,當我選擇第二個關鍵字和一個新的套接字連接到機器正在被請求,這顯然是失敗的,因爲機器已經與其他套接字通話並且不能接受另一個連接。

當我同時執行兩個測試用例時,它工作得很好。當我分別執行它們時,問題就會出現。

如何防止爲每個測試用例創建新對象,並且在整個測試周期中只有一個對象。請幫助我。

謝謝。

回答

2

默認情況下,機器人將爲每個測試用例創建一個關鍵字庫的新實例,特別是爲了使測試用例不會從其他測試用例繼承狀態。

您可以通過在實現關鍵字的python文件或類中添加一個特殊變量來更改此行爲。這個變量被命名爲ROBOT_LIBRARY_SCOPE。你可以將它設置爲以下文本字符串之一:

  • "TEST CASE" - 爲每個測試用例創建一個新的實例。一個可能的套件設置和套件拆卸共享另一個實例。這是默認設置。

  • "TEST SUITE" - 爲每個測試套件創建一個新實例。從測試用例文件創建幷包含測試用例的最低級別測試套件具有自己的實例,而更高級別的套件都可以爲其可能的設置和拆卸獲取自己的實例。

  • "GLOBAL" - 在整個測試執行過程中只創建一個實例,並且它被所有測試用例和測試套件共享。從模塊創建的庫始終是全局的。

注:上面的描述是從robot framework user guide部分Test library scope

例如,在一個套件中的所有測試之間共享的狀態,你的Python文件的頂部可能會是這個樣子:

# llk_machine.py 
ROBOT_LIBRARY_SCOPE = "TEST SUITE" 
... 
def llk_Connect(...): 
    ... 

如果您的關鍵字與同一個類中的方法該文件的名稱,你應該設置變量

# llk_machine.py 
class llk_machine(...): 
    ROBOT_LIBRARY_SCOPE = "TEST SUITE" 
    ... 

更完整的例子可以在的robot framework user guide

"Test library scope"部分中找到的類的屬性