1,用例格式
通常一個腳本文件里面有如下模塊:
- config
- test
- test
即:全局配置、用例、用例
config模塊里面定義的是整個文本測試集的變量,即全局變量
test模塊里面定義的是具體接口請求,下面看個具體例子
2,舉個例子
以某快遞查詢接口為例,新建一個yaml文件,命名為test_post_api.yaml
- config:
name: test kuaidi100 api
request: base_url: http://www.kuaidi100.com - test: name: test kuaidi100 one request: url: /query method: GET params: type: huitongkuaidi postid: 350757858666
yaml格式類似與json,可以看成是優雅的json。yaml中,跟python一樣,也是空格縮進表示同一層級,不過沒有python那么嚴格,只要縮進空格數一樣就是同一級,“-”python讀取出來是list,“#”用來注釋,更多語法可以去官網學習。
config模塊
name 本用例集名稱
request 請求全局變量,包括base_url(公共host)、headers等
base_url 全局公共host,也可以不定義,用例中寫全url即可
以上全局配置,除了name,其他都是非必要的,根據需要添加。
test模塊
name 本條測試用例的名字
request 請求體
url 請求的路徑,由於全局變量已經定義好host,這里就直接填寫后面的路由即可
method 請求方式
params 請求參數
示例是某快遞查詢接口,腳本初步寫好,接下來開始測試吧,怎么測試腳本?
打開cmd,進入到該文件目錄,執行命令hrun test_post_api.yaml回車即可。
成功,cool,可以看到一條用例測試通過,而且還在腳本所在目錄生成了report文件夾,生成的測試報告就放在里面,報告名字為測試時間戳。報告長這樣,還是蠻清爽的。
點擊log,可以查看詳細日志
3,斷言
雖然運行成功,但我們無法判斷請求的結果與我們的預期是否一致。這個時候就需要斷言。httprunner中斷言很簡單,通過在用例里面增加validate參數實現,如下:
那么怎么知道如何定義被斷言的數據呢?即上圖中的content.message等。
瀏覽器執行該接口,其返回值是字典(如下,這些字典數據存在content變量里面),可以直接通過content后面接“.key”獲取value值,再判斷與我們給出的值是否相等,以此判斷用例是否通過。如:content.message斷言值設置為“ok”,如果其對應的value等於“ok”,就表示通過。
{"message":"ok","nu":"350757858666","ischeck":"1","condition":"F00","com":"huitongkuaidi","status":"200"......
加好想要的斷言后,再次執行用例,打開報告查看日志,可以看到,日志里面清楚的記錄了所以的斷言結果。
4,參數傳遞
在做接口測試時,經常需要將上一個接口返回的結果,傳入到下一個接口中當着參數,httprunner中使用extration參數來進行參數的傳遞。由於演示接口只有一個,切接口返回值里面有運單號,就直接拷貝了上面的用例作為接受參數的用例。故可以將第一個用例返回值中的運單號提取出來,傳入第二個用例當做參數,只需在前面加$就可以引用該參數,look

- config:
name: test kuaidi100 api
# parameters: # - user_id: [1001, 1002, 1003, 1004] request: base_url: http://www.kuaidi100.com - test: name: test kuaidi100 one request: url: /query method: GET params: type: huitongkuaidi postid: 350757858666 validate: - eq: [status_code, 200] - eq: [content.message, "ok"] - eq: [content.com, "huitongkuaidi"] - eq: [content.nu, "350757858666"] extract: - postid: content.nu - test: name: test kuaidi100 two request: url: /query method: GET params: type: huitongkuaidi postid: $postid validate: - eq: [status_code, 200] - eq: [content.message, "ok"] - eq: [content.com, "huitongkuaidi"] - eq: [content.nu, "350757858666"]
執行測試,通過,cool:
5,腳本運行方式
上面也提到了,單個腳本可以使用:hrun ***.yaml
當要同時運行多個腳本文件的時候,后面接多個文件:hrun a.yaml b.yaml c.yaml
當然,也可以直接指定文件夾,運行文件下所以腳本:hrun ***\test\
6,參數化
誠然,無論在日常接口測試,還是性能測試,都對數據有要求,特別是性能測試,需要大量數據,這個時候就需要對傳遞的參數進行參數化了。
httprunner中支持的參數化方法有:csv文本、自定義函數
6.1、使用csv文本進行參數化
在腳本同級目錄下新建csv文件,打開存入需要的數據,保存
引用: 增加一個parameters參數,通過調用${P(***.csv)}方法來讀取csv文本中的數據,也是使用$+變量名引用參數。
值得注意的是,通常來說,一個CSV文件中會放多列數值,那么這個時候,各列參數通過“-”連接來讀取參數,如:要傳postid1、name兩列參數,這樣寫就可以postid1-name: ${P(postid.csv)}
來來來,測試下,“Ran 4 tests in 2.076s”,good。因為csv中有4個參數,用例也運行了4遍,查看log,4個參數都是csv里面的,而且是順序的。
6.2、使用自定義函數進行參數化
還是在腳本下,新建debugtalk.py文件,注意,這個文件名字就不能隨便取啦,固定的。
與csv引用類似,腳本中使用${get_postids(5)}來引用函數,5表示想要獲取的參數個數,執行結果如下:
至此,httprunner接口測試框架的主要功能、或者說接口測試需要用到的大部分功能、場景,大概說了一遍。這樣做接口測試是不是感覺非常的簡單、優雅呢?
注意,由於這個框架集成了locusts性能測試工具,故還可以非常方便的進行性能測試,與接口測試類似,執行如下命令:locusts -f test_post_api.yaml,瀏覽器打開http://localhost:8089即可進行性能測試。
最后,這是一份非常簡單的入門教程,也還算比較全。其中有些細節,官網也沒有給出,寫的時候還是整了蠻久的。其他更多功能、細節,還是請參考官方中文教程網站:http://cn.httprunner.org/ 源碼挪步:https://github.com/httprunner/httprunner