一、HTTPRunner專案準備
1.1 安裝
在cmd中輸入命令pip install httprunner==2.3.0
輸入hrun -V列印出版本就是安裝成功了,

1.2 新建專案
在想要新建專案的檔案夾中打開cmd,輸入hrun --startproject 專案名稱即可在當前目錄下創建專案,

1.3 HttpRunnser 2.x工程目錄結構
api目錄
a.主要存放介面的最小執行單元(正向用例)
reports目錄
用于存放測驗報告
testcases目錄
用于處理介面的復雜執行邏輯
實作介面與介面之間的依賴
testsuites目錄
用于添加多條測驗用例,批量執行
處理資料驅動測驗(引數化)
env檔案
用于定義全域環境變數
可以在整個專案的測驗腳本中呼叫
debugtalk.py檔案
用于處理動態引數
也可以處理引數化動態資料
1.4 YAML組態檔的格式要求
yaml是資料格式,不是資料型別,yaml組態檔的后綴為.yaml或者.yml
yaml組態檔中使用#進行注釋,不可以在yaml資料行內進行注釋
yaml為key: value,key往往與冒號之間不加空格,value與冒號之間必須得加空格
yaml組態檔中,同一區域的key不能重復
yaml中value的資料型別,如果value中含有字母,會識別為字串型別(false、true、on、off、null除外),可以無需添加引號
可以使用成對的單引號或者雙引號來指定字串型別
如果value為數字,會指定識別為int或float型別
yaml是一個強縮進的資料格式,同級鍵值對縮進必須一致,默認縮進2格
如果使用- 代表為陣列結構(串列)
二、登錄介面測驗用例設計
2.1 基礎的測驗用例結構
/api/login_api.yml
# 指定當前用例的名稱 name: "登錄介面-正向用例" # 指定介面的請求資訊 request: # 指定當前用例的url url: 'http://127.0.0.1:8000/user/login/' # 指定當前介面的請求方式 method: POST # 指定請求頭引數 headers: Content-Type: "application/json" # 指定json請求引數 json: username: 'aaron123' password: '123456' # 指定斷言資訊 validate: # 方式一: # - 斷言方式: ["實際值", 期望值] - eq: ["status_code", 200] # 方式二(不常用): # 完整定義 # - {"check": "實際值", "comparator": "斷言方式", "expect": 期望值} # - {"check": "status_code", "comparator": "le", "expect": 201}
2.2 運行測驗用例
2.2.1 使用命令列運行
輸入命令hrun 需要運行的用例路徑(相對路徑和絕對路徑均可),即可運行測驗用例,

2.2.2 使用py檔案運行
from httprunner.api import HttpRunner obj = HttpRunner(log_level="DEBUG") obj.run(r'E:\httprunner_dev06\testsuites\login_testsuite.yml') res = obj.summary
2.3 修改輸出的日志級別
輸入命令hrun 需要運行的用例路徑 --log-level 指定的等級即可修改輸出的日志級別,

2.4 引數設定
2.4.1 支持的合法的請求方式method
GET、POST、PUT、PATCH、DELETE,忽略大小寫,推薦使用大寫,
2.4.2 支持的請求頭Content-Type
application/json,請求引數需要為json
application/x-www-form-urlencoded,請求引數需要為data
2.4.3 支持的請求引數型別
json,指定json請求引數
data,指定x-www-form-urlencoded引數
params,指定查詢字串引數
2.4.4 支持的斷言方式
eq、equals、==、is,相等斷言
lt、less_than,小于
le、less_than_or_equals,小于等于
gt、greater_than,大于
ge、greater_than_or_equals,大于等于
contains,包含
2.4.5 支持的斷言方式實際值
status_code,提取回應狀態碼
cookies,提取cookies資訊
headers,提取請求頭資訊
content、 text、json,提取回應資料,如果介面回傳的是json資料,那么這三個獲取均類似于Python中字典或者嵌套字典的串列,取值用json.key來取值
ok,當前的請求是否成功
url,提取請求url資訊
三、引數化處理
3.1 base_url
我們可以把url前面公共的地方提取為base_url,簡化url的寫法,
# 如果有設定base_url會指定拼接一個完整的url路徑 base_url: 'http://127.0.0.1:8000' request: # url: 'http://127.0.0.1:8000/user/login/' url: '/user/login/'
3.2 設定引數
在variables中設定變數的值,呼叫時使用$變數名即可,
注意:
- 定義變數之后,可以在定義變數下方的任意地方呼叫
- 一般在當前yaml組態檔中才能呼叫
variables: # 變數key: 變數的值 uname: 'aaron123' passwd: '123456' status: 200 ... json: username: $uname passwd: $passwd validate: - eq: ["status_code", $status]
3.3 env變數
在專案根路徑下的.env檔案中也可以定義變數,使用key=value的方式去定義,
在.env檔案中定義的變數,可以在任意yaml組態檔中呼叫
USERNAME=aaron123
PASSWORD=123456
在api/demo_api.yml檔案中呼叫,使用${ENV(變數名)}呼叫,
json:
username: ${ENV(USERNAME)}
password: ${ENV(PASSWORD)}
3.4 debugtalk函式
我們如果想要給某個變數添加動態的值,可以在專案根路徑下的debugtalk.py檔案中定義函式,
debugtalk.py檔案中的函式可以在任意yaml組態檔中呼叫,
def random_generate_user_agent(): user_agent_list = ["Mozilla/5.0 Aaron", "Mozilla/5.0 Aaron1", "Mozilla/5.0 Aaron2", "Mozilla/5.0 Aaron3"] return random.choice(user_agent_list)
然后在需要的地方呼叫函式,實作動態資料,
呼叫方式為${方法名()},
User-Agent: "${random_generate_user_agent()}"
此時,User-Agent的值就會隨機從user_agent_list中取出,
3.5 用例依賴
如果當前有一個用例需要先登錄才能正確請求,那么我們就需要在testcases/demo_testcase.yml檔案中添加用例依賴關系,
# 定義全域配置資訊 # a.定義teststeps中公共資訊 config: name: "測驗獲取專案串列資料介面" # 定義每個測驗步驟 teststeps: - name: "先登錄" # 匯入需要執行的用例的yml路徑 api: "api/login_api.yml" # 用于提取引數并創建變數(可多個),創建的變數可以在下方任意處呼叫 extract: # 把content回應體內的token值取出來,賦給變數token - token: content.token - name: "獲取專案串列資料" api: api/projects_api.yml
在api/projects_api.yml檔案中,參考前面定義的token變數,
headers: Authorization: "JWT $token"
3.6 variables優先級順序:
testcase config variables > teststep extract > teststep variables > api variables
建議只在一個地方使用variables,不然專案混亂,不便管理,
3.7 資料驅動
如果想要批量執行用例,需要將邏輯寫在testsuite檔案中,
3.7.1 方式一
testsuites/login_testsuite.yml
# 定義所有用例的公共資訊 config: name: "某某套件" testcases: - name: "測驗登錄介面" testcase: "testcases/login_testcase.yml" # 定義資料驅動測驗(引數化),此處定義的引數變數優先級最高 parameters: # - 引數1-引數2-引數3-...: - title-username-password-status_code-msg: # 這里的值與上面的引數一一對應 - ["正常登錄", "aaron123", "123456", 200, "token"] - ["密碼錯誤", "aaron123", "123457", 400, "non_field_errors"] - ["賬號錯誤", "aaron188", "123456", 400, "non_field_errors"] - ["用戶名為空", "", "123456", 400, "username"] - ["密碼為空", "aaron123", "", 400, "password"] # - title-username-password-status_code-msg: ${P(data/data.csv)} - title-username-password-status_code-msg: ${get_accounts()}
修改對應的testcase和api檔案,使用$變數名對parameters中的引數一一替換,即可實作資料驅動,
3.7.2 方式二
將測驗用例寫在csv檔案中,
第一行需要和parameters中定義的欄位和順序一致,
data/data.csv
title,username,password,status_code,msg
正常登錄,aaron123,123456,200,token
密碼錯誤,aaron123,123457,400,non_field_errors
賬號錯誤,aaron188,123456,400,non_field_errors
用戶名為空,,123456,400,username
密碼為空,aaron123,,400,password
修改testsuite檔案的parameters,
parameters:
- title-username-password-status_code-msg: ${P(data/data.csv)}
但是這種方法有一個弊端,所有csv檔案中讀出的資料都是字串格式,我們一般不這樣呼叫,可以使用程式讀出csv,然后再進行引數化處理,
3.7.2 方式三
在debugtalk.py檔案中定義一個回傳引數串列的函式(可以從Excel中讀取,也可以從csv讀取,也可以從資料庫讀取),
引數順序無所謂,但是key值需要和parameters中定義的欄位一致,
def get_accounts(): accounts = [ {"title": "正常登錄", "username": "aaron123", "password": "123456", "status_code": 200, "msg": "token"}, {"title": "密碼錯誤", "username": "aaron123", "password": "123457", "status_code": 400, "msg": "non_field_errors"}, {"title": "賬號錯誤", "username": "aaron188", "password": "123456", "status_code": 400, "msg": "non_field_errors"}, {"title": "用戶名為空", "username": "", "password": "123456", "status_code": 400, "msg": "username"}, {"title": "密碼為空", "username": "aaron123", "password": "", "status_code": 400, "msg": "password"}, ] return accounts
修改testsuite檔案的parameters,
parameters:
- title-username-password-status_code-msg: ${get_accounts()}
————————————————
著作權宣告:本文為CSDN博主「測開小菜鳥」的原創文章,遵循CC 4.0 BY-SA著作權協議,轉載請附上原文出處鏈接及本宣告,
原文鏈接:https://blog.csdn.net/qq_33537936/article/details/114270906
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/522915.html
標籤:其他
上一篇:web安全學習(sql注入1)
下一篇:軟體要想做的好,測驗必定少不了
