HTTPrunner簡單教程二


記錄學習過程,便以以后好查找
先來明白,各個框架文件夾中對應的文件是干啥用的。
 
1、api文件:存放接口描述文件
格式樣例:
name: #登錄接口
base_url: ${gain_base_url()}
request:
url: /gk/user/login
headers:
Content-Type: application/json
method: POST
json:
isVisitor: $isVisitor
mobile: $mobile
checkcode: $checkcode

2、testcase文件:存放測試用例步驟,一個test屬於一次請求,congfig接口全局定義參數
格式樣例:
 
- config:
name: qjp_login_user_post
request:
headers:
Content-Type: application/json
variables:
- tk_type: 0
- test:
name: 登錄
request:
url: http://qjptest.51biaoqing.com/gk/user/login
headers:
Content-Type: application/json
Auth-Token: a8f68cf3-67eb-469f-bc61-4ba92152fc97
GK-App-Key: d14269a21ac4c7af9c5a
User-Agent-TK: ACFY9OZ-LelZlDX1eQUXq1ANkorI3ZONsERxanA
User-Agent-Platform: android

method: POST
json:
isVisitor: 0
mobile: 18616578655
checkcode: "8888"
validate:
- eq: [content.code, 200]
setup_hooks:
- ${encryption($request,$tk_type)}
extract:
- token: content.data.token


3、testsuiutes:測試場景構建

4、實踐:
方式1:
直接在testcases文件中創建對應yaml文件,后hrunn命令運行

config:
name:xxx(必填) ---測試用例名稱,測試報告中的標題
variables: list of dict(非必須) ---定義的全局變量,作用域為整個用例,即當前yml文件
parameter:list of dict (非必須) -----全局參數,用於實現數據化驅動,作用域為整個用例,即當前yml文件
  request:dict (非必須) -----request的公告參數,作用域為整個用例,即當前yml文,常用參數如base_url(參數后,在test中的url可以只描述path),headers
test:
name:xxx(必填) ----測試步驟名稱,在測試報告中作為測試步驟的名稱
request:dict(必填) ----http請求詳細內容(包含url,headers,method,json)
variables:list of dict(非必填) ---測試步驟中定義的變量,作用域於當前步驟
extract:list(非必填) ----提取當前測試步驟響應數據參數並保存到變量中如var,后續測試用例都可以聽過$var形式引用
setup_hooks:list(非必填) ----在http請求前執行hook函數,主要用於准備工作
teardown_hooks:list(非必填)----在請求發送后執行hook函數,用戶用戶測試后的清理工作

直接在文件工程根目錄下cmd 命令:hrun testcasess中yml文件的絕對路徑,運行完后可以在根目錄下的report下查看本次運行報告

樣例:
- config:
name: qjp_login_user_post
request:
headers:
Content-Type: application/json
variables:
- tk_type: 0
- test:
name: 登錄
request:
url: http://qjptest.51biaoqing.com/gk/user/login
headers:
Content-Type: application/json
Auth-Token: a8f68cf3-67eb-469f-bc61-4ba92152fc97
GK-App-Key: d14269a21ac4c7af9c5a
User-Agent-TK: ACFY9OZ-LelZlDX1eQUXq1ANkorI3ZONsERxanA
User-Agent-Platform: android

method: POST
json:
isVisitor: 0
mobile: 18616578655
checkcode: "8888"
validate:
- eq: [content.code, 200]
setup_hooks:
- ${encryption($request,$tk_type)}
extract:
- token: content.data.token

方式2:
先在api中定義相關接口請求相關接口參數,再在testcases中應用api引用相關接口信息,命令行中運行
hrun testcasess中yml文件的絕對路徑,運行完后可以在根目錄下的report下查看本次運行報告
api樣例——————————————————
name:接口名稱
request:
url:xx
headers:
xx:xx
Content-Type: application/json
method:post
json:
xx:xx
xx:"888"
testcases中測試用例————————
與方式1中格式相同,不同的是request部分換成api:對於接口yml路徑,注意中api文件request
config:
name:xxx(必填) ---測試用例名稱,測試報告中的標題
variables: list of dict(非必須) ---定義的全局變量,作用域為整個用例,即當前yml文件
parameter:list of dict (非必須) -----全局參數,用於實現數據化驅動,作用域為整個用例,即當前yml文件
  request:dict (非必須) -----request的公告參數,作用域為整個用例,即當前yml文,常用參數如base_url(參數后,在test中的url可以只描述path),headers
test:
name:xxx(必填) ----測試步驟名稱,在測試報告中作為測試步驟的名稱
api:api/xxx.yml ----測試步驟對應接口信息
variables:list of dict(非必填) ---測試步驟中定義的變量,作用域於當前步驟
validate:list (非必填) ----用於斷言,來校驗接口返回值與預期是否一致
extract:list(非必填) ----提取當前測試步驟響應數據參數並保存到變量中如var,后續測試用例都可以聽過$var形式引用
setup_hooks:list(非必填) ----在http請求前執行hook函數,主要用於准備工作
teardown_hooks:list(非必填)----在請求發送后執行hook函數,用戶用戶測試后的清理工作

方式三:
在testcasuites中運行測試場景case

關於參數化問題:
1、使用csv文件進行參數化
在testcases腳本同級目錄下新建csv文件,存入需要的數據,引用時增加一個parameters參數,可通過P{xxx.csv}文件來讀取csv文件中的數據,
多個參數使用短橫線“-”進行連接,如
parameters:
- goods_id: ${P(xxx.scv)}
腳本執行時,有多個參數會按照交叉取值來運行,不是按行來運行的

2、使用輔助函數來進行參數化
在debugtalk.py文件中,新建一個函數可以在其他地方引用,使用${xxx()}來引用函數,如:
 
 variables: $var


3、config文件中參數化
requests中的base_url和headers,base_url定義后,在test中url只需要填寫路徑即可,headers屬於整個當前yml文件公用,在test中不用再指定
如果在測試步驟中指定headers使用指定的?
樣例:
- config:
name: qjp_login_user_post
request:
base_url: http://qjptest.51biaoqing.com
headers:
Content-Type: application/json
Auth-Token: a8f68cf3-67eb-469f-bc61-4ba92152fc97
GK-App-Key: d14269a21ac4c7af9c5a
User-Agent-TK: ACFY9OZ-LelZlDX1eQUXq1ANkorI3ZONsERxanA
User-Agent-Platform: android
variables:
- tk_type: 0
- test:
name: 登錄
# api: api/demo_api.yml
request:
url: /gk/user/login
method: POST
json:
isVisitor: 0
mobile: 18616578655
checkcode: "8888"
validate:
- eq: [content.code, 200]
setup_hooks:
- ${encryption($request,$tk_type)}
extract:
- token: content.data.token

疑問:
1、parameter和variables參數有什么區別?
parameter用於數據化驅動?
variables只用戶單給變量取值?

2、對於表單參數/上傳文件形式post請求,httprunner是如何處理的?
表單參數可以使用params參數來實現
 
3、congfig中定義的rquest請求在test中直接引用就可以了?加載方式是什么,如在config中定義了reques的headers信息,那么在test中如何讓引用?
requests中的base_url和headers,base_url定義后,在test中url只需要填寫路徑即可,headers屬於整個當前yml文件公用,在test中不用再指定
如果在測試步驟中指定headers使用指定的?樣例如上
4、測試步驟中的定義的參數
在congfig或者test中定義parameter或者variables后,在測試步驟中使用
 
4、在reques中(headers/json)的參數,究竟要不要要雙引號?還是直接引用?
直接應用就行了
5、api的yml文件中是否要包含接口返回驗證和參數值?如驗證返回結果包含token?api文件中,對於參數值直接賦值和引用的意義有什么不同?
6、在api中參數值已經直接賦值和引用的,那么在testcases文件還需要再引用一遍參數值嗎?
7、測試步驟用例的定義的變量和參數,在api中是否可以直接引用
可以直接應用的嗎,不過作用域不一樣每一個是作用域是整個yml文件,一個是當前test生效

遇到問題:
1、httprunner.exceptions.ParamsError: base url missed!
config中request和base_url和headers格式錯誤,
request/base_url/headers 應該是同級關系,不是次級關系,這里強調的是參數值,所以不是request方式的格式
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM