在使用postman進行接口測試的時候,對於有些接口字段須要時間戳加密,這個時候咱們就遇到2個問題,其一是接口中的時間戳如何獲得?其二就是對於如今經常使用的md5加密操做如何在postman中使用代碼實現呢?
下面咱們以一個具體的接口例子來進行說明。
首先來看看咱們的接口文檔信息,如圖所示
此接口文檔中,須要三個參數customercode、timestamp和itoken(是customerCode+timestamp+ytoken加密後的結果)。
第一次操做的時候,咱們使用postman會這樣操做,如圖
這樣操做流程是:json
說明安全
x-www-form-urlencoded便是application/x-www-from-urlencoded,將表單內的數字轉換爲鍵對值session
postman中 form-data、x-www-form-urlencoded、raw、binary的區別:app
時間戳轉換工具:post
md5加密工具:加密
這樣建立會話的接口咱們就完成了!可是爲了系統的安全性,這裏的timestamp是每30分鐘就會過時的,下次咱們又須要從新設置timestamp,就是md5加密的結果......這樣操做豈不是太麻煩?.net
還好postman中Pre-Request Script能夠在 Request 以前自定義請求數據,這樣作的好處就是能夠以嵌入腳本的方式動態準備測試數據,並根據業務需求設計測試用例。
這裏咱們仍繼續以上面的用例爲例:
在postman中,如何才能獲取當前機器上的timestamp呢?
Math.round(new Date().getTime())
能夠知足咱們的要求!!!
那代碼如何實現呢?
//設置當前時間戳毫秒 postman.setGlobalVariable("timestamp",Math.round(new Date().getTime()));
這樣就將獲取的時間戳設置爲全局變量timestamp
咱們知道itoken的值是md5(customerCode+timestamp+ytoken')
那麼接下來就能夠動態的獲取md5的信息了,代碼以下:
//發起請求以前獲取當前的時間戳放在參數裏 //postman.setGlobalVariable("customerCode","***2345677***"); //1.設置環境變量 postman.setEnvironmentVariable("key", "value"); //2.設置全局變量 postman.setGlobalVariable("key", "value"); //environment.customerCode = "***2345677***"; customerCode = postman.getGlobalVariable("customerCode"); //設置當前時間戳毫秒 postman.setGlobalVariable("timestamp",Math.round(new Date().getTime())); //environment.timestamp = Math.round(new Date().getTime()); //postman.setEnvironmentVariable("unixtime_now","timecode"); //var jsonData = JSON.parse(request.data.applyJsonStr); //postman.setGlobalVariable("ytoken","*********b176a4739bfccb*********"); //獲取全局變量 //如postman.getGlobalVariable("key"); customerCode = postman.getGlobalVariable("customerCode"); timestamp = postman.getGlobalVariable('timestamp'); ytoken = postman.getGlobalVariable("ytoken"); var str = customerCode+timestamp+ytoken; //postman.setEnvironmentVariable("str",str); //environment.str = str; postman.setGlobalVariable("str",str); //var md5 = CryptoJS.MD5(str).toString().toLowerCase(); //使用md5加密 //var strmd5 = CryptoJS.MD5(str).toString(); var strmd5 = CryptoJS.MD5(str); //environment.strmd5 = strmd5; postman.setGlobalVariable('md5',strmd5); //environment.md5 = md5; //timecode=System.currentTimeMillis(); console.log(str);
而在接口請求中,就可使用已經定義好的變量來進行接口操做,代碼以下
customerCode:{{customerCode}} timestamp:{{timestamp}} ltoken:{{md5}}
如圖所示
這樣下次建立接口的時候,直接運行該用例便可,不用再次修改參數值~(≧▽≦)/~
那麼咱們如何才能知道該接口用例是成功的呢,該怎麼斷言呢?
這裏列出我該接口斷言的一個示例,代碼以下
/* // 推薦用全等 ===,確保類型和值都一致 tests['Status code is 200'] = responseCode.code === 200; // 判斷是否存在 'success' 值 tests["Body matches code"] = responseBody.has("0"); var jsonData = JSON.parse(responseBody); postman.setEnvironmentVariable("sessionId",jsonData.result); tests[`[INFO] Request params: ${JSON.stringify(request.data)}`] = true; tests["have result "]=jsonData.hasOwnProperty("error")!==true; tests[`[INFO] Response timeout: ${responseTime}`] = responseTime < 6000; **/ //狀態代碼是200 if(responseCode.code === 200){ // 判斷是否存在 'success' 值,檢查響應體包含一個字符串 tests["Body matches code"] = responseBody.has("0"); //響應結果中result保存爲全局變量sessonId var jsonData = JSON.parse(responseBody); postman.setGlobalVariable("sessionId",jsonData.result); //輸入接口參數信息 tests[`[INFO] Request params: ${JSON.stringify(request.data)}`] = true; // tests["have result "]=jsonData.hasOwnProperty("error")!==true; //判斷接口響應結果有result tests["have result "]=jsonData.hasOwnProperty("result")===true; //判斷接口響應時間小於N秒 tests[`[INFO] Response timeout: ${responseTime}`] = responseTime < 6000; }else{ //接口請求失敗 tests["Waring:Request Failed. Please Fix!"] = false; }
這樣建立會話的接口就完成了!