使用Postman工具做接口測試(四)——參數化、執行用例與生成測試報告(完結篇)


  引言

  前面已經介紹了postman斷言和參數提取,這個是針對接口運行后的操作,那么接口運行之前,我們需要做哪些了?毋庸置疑的就是參數化,它可以幫我們提前造測試數據,針對一些加密和認證的接口,我們需要提前做這些,帶着這些參數去請求,接口才會通。下面我講講實際測試中的參數化,批量執行測試用例以及生成測試報告。

 

 

  參數化

  在之前介紹《使用Postman工具做接口測試(二)——環境變量與請求參數格式》文中講過環境變量的設置,其實就是參數化,現在,我介紹參數化其他幾種形式。

第一種:自己定義的參數。

下面用戶簽名接口為例,下面代碼是本地開發的接口。

# 用戶簽名
# 鑒權: 簽名+時間戳
def user_sign(request):
    if request.method == 'POST':
        client_time = request.POST.get('time','')
        client_sign = request.POST.get('sign','')
        address = request.POST.get('address','')
        print(client_sign,222)
        print(address,333)

    else:
        return '錯誤'

    if client_time == '' or client_sign == '':
        return '簽名為空'

    # 服務器時間
    now_time = time.time()
    server_time = str(now_time).split('.')[0]
    # 時間差
    time_diff = int(server_time) - int(client_time)
    if time_diff >= 60:
        return '請求超時'

    # 簽名
    md5 = hashlib.md5()
    sign_str = client_time + '&guest-test'
    # 轉換成encode
    sign_bytes_utf8 = sign_str.encode(encoding = 'utf-8')
    md5.update(sign_bytes_utf8)
    server_sign = md5.hexdigest()

    if server_sign != client_sign:
        return '簽名失敗'
    else:
        return '簽名成功'

 

  從上面可以看出,加密方式:client_time + '&guest-test'。

如果要請求被加密接口,必須提前對請求參數中需要加密的信息進行參數化,如下:

 

代碼:

//設置當前時間戳(10位)
postman.setGlobalVariable("time",Math.round(new Date()/1000));
time = postman.getGlobalVariable('time');

//設置KEY_WORD為全局變量
postman.setGlobalVariable("Key","&guest-test");
KEY_WORD = postman.getGlobalVariable("Key");

//字符串進行md5加密
var str = time+KEY_WORD;
var strmd5= CryptoJS.MD5(str).toString();
//signs設置成全局變量,signs
postman.setGlobalVariable("signs",strmd5);
//signss = pm.variables.get('signs')
console.log(time);
console.log(strmd5);

 

如果要設置13位時間戳,可以這樣寫:

//設置當前時間戳(13位)
// postman.setGlobalVariable("time",Math.round(new Date().getTime()));
// time2 = postman.getGlobalVariable('time');

  

 接口請求前的處理,都放在Pre-request Script。

打開日志,看看是否獲取到值:

 

 

 

使用{{}}可以引用參數,看看效果:

 

 

第二種:使用postman自帶的函數來參數化。

其實這種跟上面是一樣的,只是使用一些內置函數。

{{$randomInt}}:添加0和1000之間的隨機整數

{{$timestamp}}:將當前的時間戳,精確到秒,精確到毫秒時,后面增加000即可

{{$randomDateRecent}}: 生成一個標准的中國時間,格式:Thu Mar 12 2020 08:15:08 GMT+0800 (中國標准時間)

使用如下:

 

 

看看后台的請求結果:

這個randomDateRecent時間傳進來我是做了轉化,顯示格式:%Y-%m-%d %H:%M:%S

 

可以看出,內置函數比較死板,無法得到想要的隨機數,所以我們還是可以自己寫腳本。

如:

// 隨機字符串
postman.setGlobalVariable("random_username", ("0000" + (Math.random()*Math.pow(36,4) << 0).toString(36)).slice(-4));
console.log(("0000" + (Math.random()*Math.pow(36,4) << 0).toString(36)).slice(-4))
// 0~9999的隨機整數
postman.setGlobalVariable("random_number",Math.round(Math.random()*9999));
console.log(Math.round(Math.random()*9999))

 

 

查看后台結果:

 

id是0~9999的隨機整數,name是4位的隨機字符串。

 

第三種:使用文件參數化,postman跟jmeter一樣都支持文檔參數化,當前支持文件格式有:Json文檔,txt文檔,CSV文檔。

前提條件: 本文以txt文檔為例,在txt里面創建測試數據,存入eid和name兩個字段。多個數據之間用逗號分隔(逗號是英文的)

上傳文件后,查看是否一樣:

 

 

引用參數化變量eid和name

 

 

 

 

 

 

 

 

運行參數說明:

  • Environment:選擇運行的環境,環境主要決定環境變量的;
  • Iterations: 用例迭代的次數,也就是當前選中的這些請求需要運行幾次;
  • Delay:延遲,用來設置每個請求之間的運行時間(以毫米為單位),如果設置了,則一個請求運行完后會等待相應的時間才運行下一個請求;
  • Log Responses:記錄響應日志,這是一種限制性的設置,默認是記錄所有請求的日志,也可以限制為只記錄錯誤日志或者完全不記錄;
  • Data:選中數據文件,這是 Postman 提供的數據驅動的方式,數據針對當前 Collection 中請求中使用的變量。支持 Csv 和 Json 格式的文件;
  • Keep variable values:保持變量值。如果 Collection 中有腳本重新設置環境變量或者全局變量的值,默認情況下只對當次運行有效。如果勾選了此選項,那么在腳本中重設的變量值會保存下來,也就是會直接修改 Postman 中預設的變量值;
  • Run collection without using stored cookies:如果勾選此選項,運行 Collection 的時候則不會使用 Postman 的 cookie 管理器;
  • Save cookies after collection run:運行后,儲存運行過程中的 cookies,此選項默認勾選。

 

查看結果:

 

 

 

   運行測試用例

選擇collection后,右側的菜單中運行Run

 

 

 

 

 

 查看結果:

 

 

 

  測試報告工具安裝

  在做完接口測試之后,輸出的測試結果需要以報告的形式展示,postman也提供了報告,但不同的是需要安裝一些必要的工具——Newman。

Newman是一款基於nodejs開發的可以運行postman腳本的工具,使用Newman,可以直接從命令運行和測試postman集合。

  安裝nodejs

下載地址:https://nodejs.org/en/download/

 

 

 

 查看是否安裝成功,打開cmd輸入node -v

 

 

 

 

  安裝newman

注意:newman必須要跟nodejs處於一個文件當中,才可以安裝成功,否則會報錯的

 

 

  安裝html報告模塊

 

 

首先從postman中導出測試用例

創建一個文件夾,把導出來的用例直接存放到創建的文件夾當中,方便測試

 

 

 

 

 

 

  生產測試報告

打開cmd,找到存放用例的路徑。執行下面的一些命令

方式1-執行導出的測試用例:

newman run E:\postman_report\API文檔.postman_collection.json

  

 

 

從圖中可以看出執行詳情,迭代1次,請求5個,失敗0個。

方法2-生成html測試報告:

newman run E:\postman_report\API文檔.postman_collection.json -r html

 

 如果出現這種情況,說明導出的json測試用例不支持newman命令,所以重新導一份。

 

 再次執行上面命令:

 

 進入E:\postman_report 發現沒有html報告,經過一系列的掙扎,自己最后懷疑是文件名有中文引起的,改了英文后,果然成功。

如圖:

 

 

 

 如果你不指定報告存放路徑,它會默認生成一個文件夾newman.

如果你想放到其他目錄,可以這樣:

E:\postman_report>newman run api.postman_collection.json --reporters html --reporter-html-export E:\postman_report

  

 

 

查看報告內容:

 

 

這個報告是不是太簡陋了?下面看看使用其他工具生成漂亮報告。

 

  高級版html報告

使用htmlextra套件生成比較高級的html報告
使用方法和html的相同,需要安裝htmlextra,命令行中輸入:

npm install -g newman-reporter-htmlextra

 

使用命令生成報告:

E:\postman_report>newman run api.postman_collection.json -r htmlextra --reporter-html-export

 

 

 

查看報告:

 

 

 

通過頭部的Summary、Total Requests 、Failed Tests 、Skipped Tests 查看統計數據、所有的請求、失敗的用例、跳過的用例等。

  如下圖,所有的用例:

 點擊每個請求可以查看詳細,如下圖:

 

 

失敗用例:

 

 

其他:

設置重復執行次數
例:重復執行10次

newman run APITest.postman_collection.json -n 10

 

查看其他可用的參數

newman run -h

 

 

 

postman接口測試全套內容基本上就是這些,當然還可以和Jenkins工具做持續集成。

 

小編碼字不易,轉載請注明。歡迎加入自動化測試開發學習交流群:696400122,關注小編,滿滿干貨,持續更新中。一起學習成長~

 


免責聲明!

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



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