httprunner進行接口測試-參數化


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


免責聲明!

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



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