優勢
- 支援不同開發語言平臺,java/python
- 可是用於測試api,同時也可以用於測試ui介面
- 使用虛擬碼進行編寫case,簡單易懂,學習成本低
- 可以在虛擬碼中執行Python程式碼
- 可是使用python定義虛擬碼關鍵字
- 介面豐富,可自定義程度高
劣勢
- 有一定的學習成本
安裝
-
安裝
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
- 在
keywords
塊中定義請求內容,可以將一個keywords
當成一個函式,Arguments
塊就是傳入這個函式的內容,在例子中只傳入了兩個上傳給介面的引數。當然也可以將期盼的結果傳入到關鍵字中,然後用斷言的方式判斷請求的結果是否符合預期。 test cases
則是定義測試內容的地方,配合在keywords
設定的arguments
設定期望傳遞的引數。框架會根據位置來一一對應引數,同時有多少個case就會發起多少次請求。- 在
settings
塊中,定義這個測試需要的資源與庫。例如:在之前定義的公有headers
在settings
塊中以Resource
的形式引入,而functions.py
則以Library
的形式引入。 - 除了使用定義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
- 執行之後會生成三個檔案,統計測試用例執行的結果已經生成一些日誌,方便檢視。
- robot 命令還有很豐富的引數,如:指定生成日誌的檔案的目錄、按照tag執行測試用例等