Robot Framework自定義測試庫的作用域的理解

發表于:2019-10-03來源:cnblogs作者:Maserati~點擊數: 標簽:Robot Framew
Robot Framework 為了保證測試用例之間的獨立性, 默認情況下, 它為每個測試用例創建新的測試庫實例. 然而, 這種方式不總是我們想要的, 比如有時測試用例需要共享某個狀態的時候. 此外
robot framework中,強大的測試庫api支持,用戶可根據實際需求定義測試庫,導入后可使用自定義庫中相應的關鍵字。

  當自定義的測試庫是類庫,則需要考慮一個問題:類實例。用類實現的庫可以有內部狀態, 這些狀態可以被關鍵字或構造函數修改. 因為這些狀態會影響到關鍵字實際的行為, 所以, 保證一個測試用例不會意外地影響到另一個用例顯得非常重要. 這種依賴行為有可能造成非常難定位的bug。例如, 添加了新的測試用例, 而這些用例使用庫的方式并不一致。

  Robot Framework 為了保證測試用例之間的獨立性, 默認情況下, 它為每個測試用例創建新的測試庫實例. 然而, 這種方式不總是我們想要的, 比如有時測試用例需要共享某個狀態的時候. 此外, 那些無狀態的庫顯然也不需要每次都創建新實例。實例化測試庫類的方式可以通過屬性ROBOT_LIBRARY_SCOPE定義的三個作用域來控制

  1.TEST CASE:為每個測試用例創建測試庫實例,用例間相互獨立,此為默認情況;

  創建測試庫類:GTest.py

 1 class GTest(object):
 2 
 3     ROBOT_LIBRARY_SCOPE = "TEST CASE"
 4     counter = 0
 5 
 6     def __init__(self):
 7         GTest.counter += 1
 8 
 9     def count(self):
10         return self.counter, id(self)
View Code

   創建測試套件login.robot:

 1 *** Settings ***
 2 Documentation     Suite description
 3 Library           GTest.py
 4 
 5 *** Test Cases ***
 6 Test title
 7     [Tags]    DEBUG
 8     @{res}   count
 9     log many    @{res}
10 
11 Test title2
12     [Tags]      DEBUG
13     @{res}   count
14     log many    @{res}
View Code

 從用例的執行結果來看,每個使用GTest庫的測試用例運行時,counter值加1,且實例id各不相同,所以SCOPE為"TEST CASE"的測試庫會為每個測試用例創建實例,這種配置更適用于嚴格控制用例間相互影響的場景;

  2.TEST SUITE:為每個測試套件創建測試庫實例,該測試套件內的所有用例共享這個庫實例

  修改測試庫類GTest.py, 將ROBOT_LIBRARY_SCOPE值替換為"TEST SUITE"

 1 class GTest(object):
 2 
 3     ROBOT_LIBRARY_SCOPE = "TEST SUITE"
 4     counter = 0
 5 
 6     def __init__(self):
 7         GTest.counter += 1
 8 
 9     def count(self):
10         return self.counter, id(self)
View Code

  新增測試套件login2.robot

 1 *** Settings ***
 2 Documentation     Suite description
 3 Library           GTest.py
 4 
 5 *** Test Cases ***
 6 Test title
 7     [Tags]    DEBUG
 8     @{res}   count
 9     log many    @{res}
10 
11 Test title2
12     [Tags]      DEBUG
13     @{res}   count
14     log many    @{res}
View Code

  運行測試套件login.robot和login2.robot

 

 

 

 

 從以上測試結果來看,圖1中,同一測試套件內所有測試用例獲取到的GTest實例相同;圖2中,不同測試套件獲取到的GTest實例不同,因此SCOPE設置為"TEST SUITE"時,會為每個測試套件創建一個測試庫實例;

  3.GLOBAL:整個測試過程中只創建一個測試庫實例,所有測試套件、測試用例共享同一個測試庫實例

  修改測試庫GTest.py,將ROBOT_LIBRARY_SCOPE修改為"GLOBAL"

 1 class GTest(object):
 2 
 3     ROBOT_LIBRARY_SCOPE = "GLOBAL"
 4     counter = 0
 5 
 6     def __init__(self):
 7         GTest.counter += 1
 8 
 9     def count(self):
10         return self.counter, id(self)
View Code

  運行測試套件login.robot和login2.robot

 

 

 從用例運行結果來看,測試套件login.robot和login2.robot所用GTest的同一個實例,且只有一個。因此SCOPE設置為"GLOBAL"后,整個測試過程中只生成一個測試庫實例。所有套件、測試用例共享這個測試庫實例;

  robot官網中說明,如果同一個測試庫被多次以不同參數導入,則不管ROBOT_LIBRARY_SCOPE是否定義,每個測試套件會創建一個新的實例

  創建測試庫GTest.py,  ROBOT_LIBRARY_SCOPE定義為"GLOBAL"

 1 class GTest(object):
 2 
 3     ROBOT_LIBRARY_SCOPE = "GLOBAL"
 4     counter = 0
 5 
 6     def __init__(self, *args):
 7         self.args = args
 8         GTest.counter += 1
 9 
10     def count(self):
11         return self.counter, id(self)
View Code

  創建測試套件login.robot

 1 *** Settings ***
 2 Documentation     Suite description
 3 Library           GTest.py      suite1      login1
 4 
 5 *** Test Cases ***
 6 Test title
 7     [Tags]    DEBUG
 8     @{res}   count
 9     log many    @{res}
10 
11 Test title2
12     [Tags]      DEBUG
13     @{res}   count
14     log many    @{res}
View Code

  創建測試套件login2.robot

 1 *** Settings ***
 2 Documentation     Suite description
 3 Library           GTest.py      login2      suite2
 4 
 5 *** Test Cases ***
 6 Test title
 7     [Tags]    DEBUG
 8     @{res}   count
 9     log many    @{res}
10 
11 Test title2
12     [Tags]      DEBUG
13     @{res}   count
14     log many    @{res}
View Code

 

從測試用例運行結果來看,雖然將作用域定義成了全局的,但是由于在不同測試套件中以不同參數導入,所以用例執行過程中為不同的測試套件生成了不同的實例。

原文轉自:https://www.cnblogs.com/blackeyes1023/p/11613463.html

...
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97