如何優雅地使用httprunner進行接口測試


一天,你的領導X要你對某接口做測試,你一聽,接口測試,高大上。用什么做好呢?postman?jmeter?loadrunner?balabala。。。優秀的你,想到了一大堆工具,當然也包括用python寫。為了凸顯B格,你選擇了python。新建一個a.py文件,然后一頓猛如虎的擼代碼:

import requests url = “******” params = "******" re = reqeste.get(url, params) ...

你家領導,一看,還行,提醒你少了斷言,於是你加進去了

...

assertEqual (content.msg, "***")

...

你家領導可能是比較關心你,於是又丟了幾個接口給你,你開始依葫蘆畫瓢,流水賬代碼搞起。完事后,你仔細想想總覺得不對,於是你將每個請求都封裝起來,大概長這樣:

def qingqiu_a():

url = "***"

...

def fangwen_b():

url = "***"

...

def shenmegui_c():

url = "***"

...

顯然,你的領導是愛你的,某天他又丟給你幾十個接口,然后希望你輸出報告。你:“exm?”,改改改。於是你引入了unittest單元測試框架、HTMLTestRunner等等。

正打算將各個測試用例分類重新規整,你領導又來了。如果世界上有真愛這種東西存在的話,那你領導對你的愛便是了。

“我又從開發那里幫你要了100個接口過來測,開不開心?”

“你的腳本給我看下,這個是啥意思?可以在我那邊運行嗎?”

“你的腳本怎么這么多啊,好亂啊”

“這個接口我要做性能測試,還有這個、這個。。。”

“這幾個接口是串聯起來的,你處理下”

......

你幾近崩潰,為什么,為什么不能簡單點。

(腦補《演員》)

幸好,你並沒有放棄,你在某個機緣巧合下發現了一個叫httprunner的測試框架,這個框架使用的是yaml格式的文本來描述腳本,只需一行命令即可進行接口測試。在連夜研究完這個框架后,你發出慨然長嘆:“原來接口測試可以這么優雅的寫啊!”

於是你將幾百個接口丟進一個yaml文本里,執行了下面這條命令:

hrun api.yaml

刷刷刷,搞定,X吃驚的看着你,似乎在看一頭變帥的豬

“這次咋這么快?平時光調試都得一兩天。”

“測試報告不錯!”

“數據也都校驗了。”

“咦,這腳本簡單,我都看得懂,可以可以,很強勢!”

......

 

so,你是怎么使用httprunner的呢?

 

0,安裝

安裝好python3,直接pip install httprunner即可

hrun -V 查看版本,能看到版本信息,就代表安裝成功

hrun -h 查看幫助信息 

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"]     
View Code

執行測試,通過,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