Postman自動化接口測試實(shí)戰(zhàn)
背景描述
有一個(gè)項(xiàng)目要使用postman進(jìn)行接口測試,接口所需參數(shù)有:
- appid: 應(yīng)用標(biāo)識;
- sign:請求簽名,需要使用HMACSHA1加密算法計(jì)算,簽名串是:{appid}${url}${stamp};
- stamp:這個(gè)是時(shí)間戳;
- option:業(yè)務(wù)參數(shù);
問題是怎么在Postman發(fā)起請求時(shí)根據(jù)參數(shù)動態(tài)構(gòu)建簽名(sign)?
postman的腳本庫中CryptoJS是支持各種算法的加密,包括HMACSHA1,簽名算法有了。
難點(diǎn)是獲取url中的path參數(shù),當(dāng)發(fā)起一個(gè)請求時(shí)開始可以固定一個(gè)path值的,自動化測試需要執(zhí)行時(shí)獲取path值,怎么獲取呢?
創(chuàng)建一個(gè)GET請求
postman基礎(chǔ)用法就不介紹了,先創(chuàng)建一個(gè)GET請求,URL中有配置各種動態(tài)參數(shù)
{{變量名}} :postman引用環(huán)境變量的語法;
{{$guid}}:postman預(yù)定義的環(huán)境變量用于獲取一個(gè)GUID值;
在pre-request scripts構(gòu)建簽名
pre-request scripts 是個(gè)javascript執(zhí)行環(huán)境,在請求發(fā)送之前執(zhí)行;把他當(dāng)做js用就行,不過有的js庫是不支持的。
接下來就是動態(tài)獲取簽名了
1、appid環(huán)境變量中配置的固定值;
2、stamp時(shí)間戳獲?。?/p>
//獲取unix時(shí)間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提供的加密算法庫并不一定所有都支持,有時(shí)候需要向后臺去換取簽名;
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)); });
簽名串最好進(jìn)行URL編碼。
遺留問題:向后臺換取簽名的時(shí)候起初是返回字符串responsejson()解析不了的!
5、使用eval將定義的變量postmanUtil注入全局變量中然后調(diào)用
eval(environment.postmanUtil);postmanUtil.setLsdzSign();
結(jié)果如圖:
代碼如下:
var postmanUtil={ //獲取unix時(shí)間 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"); //時(shí)間戳 var time=postmanUtil.getUnixTime(); pm.environment.set("stamp", time); //地址 獲取當(dāng)前地址的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寫上面代碼,要是單個(gè)接口還是可以的,即使很多接口只要Copy一份即可。
萬一腳本需要改麻煩就來了,你需要去每個(gè)請求的 Pre-request Script窗口改,怎么解決呢?
可以解決,將postmanUtil定在ENVIRONMENT中就可以了,做法如下:
其實(shí)就是將postmanUtil放入環(huán)境變量了,其它沒有變,只要維護(hù)環(huán)境變量里的值就OK了,不用一個(gè)個(gè)去改。
再看pre-request script代碼,這樣就簡單多了:
postman console的用法
不知道是否成功獲取了環(huán)境變量,又或者想查看某個(gè)變量的值,postman也提供了很方便的控制臺查看,菜單View下Show Postman Console可以打開如下控制臺:
圖中是console.log(sercret) 和 sendRequest()的結(jié)果
Collection Runner 自動化API測試
創(chuàng)建接口的測試用例
對于返回html的結(jié)果,只要測試body中包含某個(gè)值就算通過
對于返回Json結(jié)果,只要Code為0即為通過
窗口右側(cè)有常用的腳本快捷操作,選中就可以生成,很方便
選擇并運(yùn)行自動化接口測試
點(diǎn)擊主頁左上角Runner進(jìn)入,選擇之前構(gòu)建好的接口,并選擇好環(huán)境,點(diǎn)擊Run xxx 接口運(yùn)行腳本測試
測試結(jié)果
可以看到結(jié)果2接口都成功返回預(yù)定的結(jié)果
到此這篇關(guān)于Postman自動化接口測試實(shí)戰(zhàn)的文章就介紹到這了,更多相關(guān)Postman自動化接口測試內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript字符串操作的四個(gè)實(shí)用技巧
在制作前端頁面的過程中,經(jīng)常需要用到JavaScript進(jìn)行邏輯處理,很多時(shí)候都需要對字符串進(jìn)行操作,這篇文章主要給大家介紹了關(guān)于JavaScript字符串操作的四個(gè)實(shí)用技巧,需要的朋友可以參考下2021-07-07JavaScript數(shù)據(jù)操作_淺談原始值和引用值的操作本質(zhì)
下面小編就為大家?guī)硪黄狫avaScript數(shù)據(jù)操作_淺談原始值和引用值的操作本質(zhì)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08webpack打包時(shí)如何修改文件名的實(shí)現(xiàn)示例
本文主要介紹了webpack打包時(shí)如何修改文件名的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06javascript簡單進(jìn)制轉(zhuǎn)換實(shí)現(xiàn)方法
這篇文章主要介紹了javascript簡單進(jìn)制轉(zhuǎn)換實(shí)現(xiàn)方法,涉及javascript字符串轉(zhuǎn)換與數(shù)值操作相關(guān)技巧,需要的朋友可以參考下2016-11-11JS apply用法總結(jié)和使用場景實(shí)例分析
這篇文章主要介紹了JS apply用法總結(jié)和使用場景,結(jié)合實(shí)例形式分析了JS apply的基本功能、原理、使用方法及操作注意事項(xiàng),需要的朋友可以參考下2020-03-03uniapp H5 https跨域請求實(shí)現(xiàn)
這篇文章主要介紹了uniapp H5 https跨域請求實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01