- ????專注于分享軟件測試干貨內(nèi)容,歡迎點贊 ?? 收藏 ?留言 ?? 如有錯誤敬請指正!
- ??交流討論:歡迎加入我們一起學習!
- ??資源分享:耗時200+小時精選的「軟件測試」資料包
- ?? 最困難的時候,也就是我們離成功不遠的時候!
?
背景描述
有一個項目要使用postman進行接口測試,接口所需參數(shù)有:
- appid: 應(yīng)用標識;
- sign:請求簽名,需要使用HMACSHA1加密算法計算,簽名串是:{appid}${url}${stamp};
- stamp:這個是時間戳;
- option:業(yè)務(wù)參數(shù);
問題是怎么在Postman發(fā)起請求時根據(jù)參數(shù)動態(tài)構(gòu)建簽名(sign)?
postman的腳本庫中CryptoJS是支持各種算法的加密,包括HMACSHA1,簽名算法有了。
難點是獲取url中的path參數(shù),當發(fā)起一個請求時開始可以固定一個path值的,自動化測試需要執(zhí)行時獲取path值,怎么獲取呢?
創(chuàng)建一個GET請求
postman基礎(chǔ)用法就不介紹了,先創(chuàng)建一個GET請求,URL中有配置各種動態(tài)參數(shù)
{{變量名}} :postman引用環(huán)境變量的語法;
{{$guid}}:postman預(yù)定義的環(huán)境變量用于獲取一個GUID值;
在pre-request scripts構(gòu)建簽名
pre-request scripts 是個javascript執(zhí)行環(huán)境,在請求發(fā)送之前執(zhí)行;把他當做js用就行,不過有的js庫是不支持的。
接下來就是動態(tài)獲取簽名了
1、appid環(huán)境變量中配置的固定值;
2、stamp時間戳獲?。?/p>
//獲取unix時間
getUnixTime:function(){
return Math.round(new Date().getTime()/1000);
}
3、url值可以通過request.url
獲取然后解析出其中的path:
//獲取url的path部分
getUrlRelativePath:function(url){
var arrUrl = url.split("http://");
var start = arrUrl[1].indexOf("/");
var end=arrUrl[1].indexOf("?");
var relUrl = arrUrl[1].substring(start,end);//stop省略,截取從start開始到結(jié)尾的所有字符
console.log(relUrl);
return relUrl;
}
4、構(gòu)造簽名串,使用秘鑰加密即可。
postman提供的加密算法庫并不一定所有都支持,有時候需要向后臺去換取簽名;
var host=pm.environment.get("host");
var text=encodeURIComponent(plain);
pm.sendRequest(host+"/FaceIn/ToHmacsha1?plain="+text+"&secret="+sercret, function (err, response) {
var json=response.json();
//簽名含有+等特殊字符需要url編碼
pm.environment.set("sign",encodeURIComponent(json.result));
});
簽名串最好進行URL編碼。
遺留問題:向后臺換取簽名的時候起初是返回字符串responsejson()解析不了的!
5、使用eval將定義的變量postmanUtil注入全局變量中然后調(diào)用
eval(environment.postmanUtil);
postmanUtil.setLsdzSign();
結(jié)果如圖:
代碼如下:
var postmanUtil={
//獲取unix時間
getUnixTime:function(){
return Math.round(new Date().getTime()/1000);
},
//獲取url的path部分
getUrlRelativePath:function(url){
var arrUrl = url.split("http://");
var start = arrUrl[1].indexOf("/");
var end=arrUrl[1].indexOf("?");
var relUrl = arrUrl[1].substring(start,end);//stop省略,截取從start開始到結(jié)尾的所有字符
console.log(relUrl);
return relUrl;
},
//簽名
setLsdzSign:function(){
var appid=pm.environment.get("appid");
var sercret=pm.environment.get("appsercret");
//時間戳
var time=postmanUtil.getUnixTime();
pm.environment.set("stamp", time);
//地址 獲取當前地址的path部分
var path= postmanUtil.getUrlRelativePath(request.url);
console.log(path);
var url=path;
var plain=appid+"$"+url.toLowerCase()+"$"+time;
var hmac = CryptoJS.HmacSHA1(plain, sercret).toString(CryptoJS.enc.Base64);
//獲取簽名,CryptoJS.HmacSHA1 無法滿足簽名算法只能從后臺
var host=pm.environment.get("host");
var text=encodeURIComponent(plain);
pm.sendRequest(host+"/FaceIn/ToHmacsha1?plain="+text+"&secret="+sercret, function (err, response) {
var json=response.json();
//簽名含有+等特殊字符需要url編碼
pm.environment.set("sign",encodeURIComponent(json.result));
});
}
}
eval(environment.postmanUtil);
postmanUtil.setLsdzSign();
腳本寫在環(huán)境變量中
在Pre-request Script寫上面代碼,要是單個接口還是可以的,即使很多接口只要Copy一份即可。
萬一腳本需要改麻煩就來了,你需要去每個請求的 Pre-request Script窗口改,怎么解決呢?
可以解決,將postmanUtil
定在ENVIRONMENT
中就可以了,做法如下:
其實就是將postmanUtil
放入環(huán)境變量了,其它沒有變,只要維護環(huán)境變量里的值就OK了,不用一個個去改。
再看pre-request script
代碼,這樣就簡單多了:
postman console的用法
不知道是否成功獲取了環(huán)境變量,又或者想查看某個變量的值,postman也提供了很方便的控制臺查看,菜單View
下Show Postman Console
可以打開如下控制臺:
圖中是console.log(sercret)
?和?sendRequest()
的結(jié)果
Collection Runner 自動化API測試
創(chuàng)建接口的測試用例
對于返回html的結(jié)果,只要測試body中包含某個值就算通過
對于返回Json結(jié)果,只要Code為0即為通過
窗口右側(cè)有常用的腳本快捷操作,選中就可以生成,很方便
選擇并運行自動化接口測試
點擊主頁左上角Runner
進入,選擇之前構(gòu)建好的接口,并選擇好環(huán)境,點擊Run xxx
?接口運行腳本測試
測試結(jié)果
可以看到結(jié)果2接口都成功返回預(yù)定的結(jié)果
行動吧,在路上總比一直觀望的要好,未來的你肯定會感謝現(xiàn)在拼搏的自己!如果想學習提升找不到資料,沒人答疑解惑時,請及時加入群,里面有各種測試開發(fā)資料和技術(shù)可以一起交流哦。
最后: 下方這份完整的軟件測試視頻教程已經(jīng)整理上傳完成,需要的朋友們可以自行領(lǐng)取 【保證100%免費】
軟件測試面試文檔
我們學習必然是為了找到高薪的工作,下面這些面試題是來自阿里、騰訊、字節(jié)等一線互聯(lián)網(wǎng)大廠最新的面試資料,并且有字節(jié)大佬給出了權(quán)威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。文章來源:http://www.zghlxwxcb.cn/news/detail-783444.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-783444.html
到了這里,關(guān)于postman自動化接口測試的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!