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