• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 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

    ...
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>