robot framework 小試

DaleChaos發表於2019-10-17

原文地址

優勢

  1. 支援不同開發語言平臺,java/python
  2. 可是用於測試api,同時也可以用於測試ui介面
  3. 使用虛擬碼進行編寫case,簡單易懂,學習成本低
  4. 可以在虛擬碼中執行Python程式碼
  5. 可是使用python定義虛擬碼關鍵字
  6. 介面豐富,可自定義程度高

劣勢

  1. 有一定的學習成本

安裝

  • 安裝 robot framework

    pip install robotframework
  • 安裝http請求擴充套件包 robotframework-requests

    pip install robotframework-requests

定義公有關鍵字

http請求中,會有一部分公有的內容,比如 header

  • config 資料夾中新建 variables.robot 設定常用的引數
*** Settings ***
Documentation     variables  

*** Variables ***
${Host}          http://www.domain.com/   # 伺服器主機
${User-Agent}     Mozilla/5.0 (Windows NT 6.1; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0    # 瀏覽器代理
${Accept}         text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
${Content-Type}     application/x-www-form-urlencoded
${Content-Type-Json}     application/json
${Accept-Language}    en-US,en;q=0.5
${Accept-Encoding}    gzip, deflate
${Cookie}         9
${Connection}     keep-alive
${Cache-Control}    max-age=0
${Upgrade-Insecure-Requests}    1
  • 建立 defined.robot 設定不同型別的header
*** Settings ***
Resource  variables.robot  # 引入資原始檔

*** Keywords *** # 自定義關鍵字
headers # web header 
    ${dict_headers}    Create Dictionary    Host=${Host}    User-Agent=${User-Agent}    Accept=${Accept}    Accept-Language=${Accept-Language}    Accept-Encoding=${Accept-Encoding}
    ...    Connection=${Connection}    Cache-Control=${Cache-Control}
    Return From Keyword    ${dict_headers}

api_headers # api header
    ${api_headers}  create dictionary  Content-Type=application/x-www-form-urlencoded
       Return From Keyword    ${api_headers}

編寫自定義函式

建立py檔案 functions.py ,編寫自定義函式,用來解決一些自定義的場景。例如,獲取json資料,獲取加密資料等

# coding=utf-8
import json

# 獲取json串
def json_d(**params):
    return json.dumps(params)

編寫測試用例

編寫測試用例baidu_auth.robot

*** Settings ***
Suite Teardown    Delete All Sessions
Resource  ../config/defined.robot
Library  ../py_codes/functions.py
Library           Collections
Library           String
Library           RequestsLibrary
Library           OperatingSystem

*** Test Cases ***
Case One    #case name
    Test Baidu Auth   ebe4d31d84ffd1d300267f2eceeedecc    sasdasdazxczx
    #與keywords裡的arguments資料 一一對應
Case Two
    Test Baidu Auth   ebe4d31d84ffd1d300267f2eceeedecc    sasdasdazxczx

*** Keywords ***
Test Baidu Auth
    [Arguments]    ${code}    ${uuid}
    [Tags]    baidu auth
    Create Session    httpbin   http://www.domain.com/
    ${data}=    json_d  code=${code}    uuid=${uuid}    #使用自定義的json_d方法 獲取json串
    ${params}=  create dictionary  oauth_data=${data}
    ${header}   api_headers
    ${resp}=    Post Request    httpbin    /api/some_api        data=${params}    headers=${header}
    should be equal as strings    ${resp.status_code}    200    #斷言判斷http code 是否200
    log    ${resp.json()}   #記錄返回結果
    should be equal as integers    ${resp.json()["status"]}    0    #斷言判斷介面返回狀態 是否為0
  1. keywords 塊中定義請求內容,可以將一個 keywords 當成一個函式,Arguments 塊就是傳入這個函式的內容,在例子中只傳入了兩個上傳給介面的引數。當然也可以將期盼的結果傳入到關鍵字中,然後用斷言的方式判斷請求的結果是否符合預期。
  2. test cases 則是定義測試內容的地方,配合在 keywords 設定的 arguments 設定期望傳遞的引數。框架會根據位置來一一對應引數,同時有多少個case就會發起多少次請求。
  3. settings 塊中,定義這個測試需要的資源與庫。例如:在之前定義的公有 headerssettings 塊中以 Resource 的形式引入,而 functions.py 則以 Library 的形式引入。
  4. 除了使用定義python方法的形式達到一些自定義操作,之外還可以直接在 robot 檔案中執行python函式,例如,需要一個MD5值
    ${MD5}    Evaluate    hashlib.md5('hello'.encode(encoding='utf8')).hexdigest()    hashlib

使用Evaluate關鍵字,執行之後跟隨的python程式碼,在第四個位置帶上需要import的包名即可。

執行測試用例

robot cases/baidu_auth.robot     # 執行特定的robot
robot cases                      # 執行cases檔案下所有的robot
  1. 執行之後會生成三個檔案,統計測試用例執行的結果已經生成一些日誌,方便檢視。
  2. robot 命令還有很豐富的引數,如:指定生成日誌的檔案的目錄、按照tag執行測試用例等

你可知道 對我做過 什麼最殘忍
  就是你 狠狠把我 一夜之間 變成了大人

相關文章