天天看點

5.0 Robot Framework 架構學習測試架構共同點:

測試架構共同點:

  • 手工編寫用例+測試資料
  • 手工運作用例 — > 自由運作用例
  • 肉眼全程觀察運作過程—>自動記錄運作過程
  • 肉眼校驗結果 — > 自動校驗測試結果
  • 手工編寫測試報告—> 自動生成測試報告 (檢視測試報告,分析測試報告,回報bug,優化腳本)

Robot Framework 架構學習

一、 RF特點:

  • 開源、基于python語言
  • 豐富的第三方庫: UI , API, Android, iOS
  • 測試用例支援: txt\tsv、html等格式編寫
  • 關鍵字驅動,用已有關鍵字形成業務關鍵字
  • 測試用例支援變量使用、IF語句和FOR循環
  • 支援繼承svn、git、jekins等工具
  • 靈活、可擴充
  • 豐富的編輯工具

    Robot Framework 學習位址: https://robotframework.org/ ---->Library

二、 Robot Framework四大常用使用子產品介紹

1. *** Test Cases ***    用例子產品
2. *** Keywords ***  關鍵字  
3. *** Settings *** 庫導入子產品
4. *** Variables ***     變量
           

關鍵字存放在:

資源檔案中(資源檔案名.robot / 資源檔案名.resource)

資源檔案的導入: 在用例套件中, Settingsm子產品導入,導入格式: Resource 資源檔案名.字尾

三、 Robot framework 變量定義、調用

  • 變量定義

    ${} – 純量 。代表一個值

    @{} – 清單 。 N個值(清單)

    &{} – 字典, key-value

  • 變量指派:

    接收關鍵字調用後的傳回值

    通過關鍵字來指派: ${} – set variable

    @{} – create list

    &{} – Create Dictionary

  • 變量調用:

    ${} 直接調用,無論變量是純量,字典還是清單類型,調用時,需要轉化為純量

    清單元素通路: ${list[0]}

    字典key對應value值通路: ${dict.key} 或者 d i c t [ ′ k e y 值 ′ ] ( k e y 如 果 字 符 串 , {dict['key值']} (key如果字元串, dict[′key值′](key如果字元串,{dict[‘key值’]},否則,則 ${dict[key]} 即可通路)

  • 變量的作用域:

    1. 用例中定義的變量則隻作用于該用例

    2. robot用例套件檔案裡邊 Variables中的變量,隻作用于該用例套件

    3. 如果用例中對變量設定了: set suite variable 變量名,那麼該變量也可以在該套件其他用例中使用

    我們也可以将變量定義到py檔案中,使用時,直接引用就好了

    引用在套件檔案中的Settings中引入py,然後再調用變量:

    Variables.py 内容如下:

    username = “Lujier”

    pwd = “123123”

    list1 = [‘中國建設銀行’, ‘中國銀行’, ‘浦發銀行’, ‘陝西信合’]

    dict1 = {“name”: “Lujier”, “pwd”: “123123”}

    """字典變量,robot套件在引用py子產品變量時,文法跟robot原來不一樣
      比如: 測試套件在使用,robot中的字典的key對應的value擷取時,格式是: ${dict1.key}  ---》 遵循robot文法
                          py檔案中的字典時,卻需要: ${dict1[key]} ----》遵循python文法
      那麼,怎樣才可以讓py變量也可以像robot中的變量一樣,使用robot文法來通路呢?
          在清單前面加上: LIST__
          在字典前邊加上:  DICT__
          被調用時
      """
      LIST__list002 = [1, 3, 6, 8]
      DICT__dict002 = {"name": "Lujier", "age": "18 forever"}
               

    測試套件robot内容:

    *** Settings ***

    Variables variables.py # 引入變量檔案,相對路徑即可

    *** Test Cases ***
      test_001
          LOG TO CONSOLE   ${username}
      
      test002
          LOG TO CONSOLE    ${list1}
      
      test003
          LOG TO CONSOLE  ${dict1}
      
      test004
         [Documentation]    讀取清單局部值
         LOG TO CONSOLE    ${list1[0]}
      
      test005
         [Documentation]    讀取字典局部值(與python讀取一樣,不能用robot讀取robot變量的方式)
         LOG TO CONSOLE    ${dict1["name"]}
      
      test006
         [Documentation]   LIST__ 或則 DICT__變量可以按照robot文法來使用變量
         LOG TO CONSOLE   ${dict002.name}
         LOG TO CONSOLE   ${list002[0]}
               

四、 常見關鍵字:

  • FOR循環周遊

    舉例:

    清單for循環周遊

    @{list1}= Create List a b c

    :FOR ${i} IN @{list1} # For循環周遊

    \ LOG TO CONSOLE i   e x i t f o r l o o p i f " {i} \ exit for loop if " i exitforloopif"{i}" == “b” # 條件滿足,跳出循環

    清單for循環周遊_下标
         @{list1}=   Create List   a   b   c
         ${len} =    get length     ${list1}   # 擷取清單長度
         :FOR   ${index}   IN RANGE  ${len}    # For循環周遊
         \  LOG TO CONSOLE   ${list1[${index}]}
               
  • if 判斷 RUN KEYWORD IF

    *** Test Cases ***

    Test title

    ${datas} set variable 88

    RUN KEYWORD IF d a t a s = = 0 L O G T O C O N S O L E 竟 然 是 0... E L S E I F 0 < {datas}==0 LOG TO CONSOLE 竟然是0 ... ELSE IF 0< datas==0LOGTOCONSOLE竟然是0...ELSEIF0<{datas}<60 LOG TO CONSOLE 竟然不及格

    … ELSE log to console 及格了

  • 異常

    *** Test Cases ***

    用例異常關鍵字使用

    ${passed}= run keyword and return status addnums 100 300

    RUN KEYWORD IF ${passed} LOG TO CONSOLE 成功

    … ELSE log to console 失敗

    用例異常關鍵字使用2
       ${passed}=   run keyword and return status   addnums    100  300  400
       RUN KEYWORD IF   ${passed}   LOG TO CONSOLE   成功
       ...  ELSE   log to console   失敗
    
    *** Keywords ***
    addnums
        [Documentation]  加法函數定義
        [Arguments]   ${a}=1    ${b}=2   # 函數參數,預設值
        Log  ${a}+${b}
        ${sum}=   Evaluate  ${a}+${b}
        # ${sum}=   Evaluate  $a+$b
        [Return]   ${sum}
        # [Return]   $sum
               

五、 robot 自動化

Web UI 自動化: SeleniumLibrary
       pip install --upgrade robotframework-seleniumlibrary
 App UI 自動化: AppiumLibrary
       pip install robotframework-appiumlibrary
 接口自動化: RequestsLibrary
          pip install -U requests
          pip install -U robotframework-requests
 以 Web自動化為例:
           
  • Selenium庫引入:

    用例檔案Settings引入: Library SeleniumLibrary

  • 常見關鍵字

    在RF中,seleniumlibrary的元素定位方式和selenium保持一緻

    表達式2種:

    定位類型:定位表達式 ,如 id:hello

    定位類型=定位表達式

    如果是css定位,需要在定位前面加上: css=

  • 等待:

    隻需要在會話啟動的時候設定

    等待元素可見: Wait Until Element is Visible

    等待元素出現: Wait Until Page Contains Element

1. Robot_Web自動化思想:
1) PO分層思想,
  2) 用到知識: Library、Keyword、Resource、TestCase/TestSuite
             Settings - 引入庫、引入資源|變量檔案、前置後置
  3) 用例管理
      . 自動加載用例--- 需要告知robot,在那個目錄(工程目錄)下去收集用例
      . 預設報告 --- 預設存放在所在的目錄
  
  報告是否可指定路徑?  可以
  用例是否可篩選?   可以打标記:
        用例标記:用例内部[Tags]
        類标記: Settings中:Force Tags 強制标簽
                           Default Tags 預設标簽
  
  4) 用例運作,可以在console控制台:  
    . 運作所有用例: robot  項目路徑 
       一般建議,進入到該項目目錄下,在使用: robot  用例目錄 來運作用例,此時報告就會預設顯示在該項目下
    .  運作指定标簽的用例: robot -i 标簽名  項目路徑/用例路徑
        如: robot -i smoke   python_robot_20190919_20190921
    .  用例執行結果(報告、日志等檔案)指定位置
        robot -i 标簽名 -d   存放報告路徑   項目路徑/用例路徑
        如: robot -d  python_robot_20190919_0921/OutPuts  python_robot_20190919_20190921
    .  運作指定測試套件:  
        robot -s  套件名稱/路徑  項目路徑/用例路徑
    .   接收robot指令行所傳的參數
         robot -i -标簽  -v  變量名:變量值
         如:  robot 檔案内容
              *** Test Cases ***
              get_cmd_key_and_value
                  [Documentation]  擷取運作指令中傳的參數
                   [Tags]  global_value
                    LOG     ${browser_type}
           那麼robot指令就是:robot -i  global_value -v  
           browser_type:chrome  name:Lujier -d  python_robot_20190919_0921/OutPuts  python_robot_20190919_20190921