引言
前面已經介紹了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,關注小編,滿滿干貨,持續更新中。一起學習成長~
