場(chǎng)景:
api請(qǐng)求時(shí)需要一個(gè)簽名字段,該簽名由其他請(qǐng)求字符串拼接一個(gè)secretKey后進(jìn)行md5計(jì)算而得,在api頻繁手動(dòng)調(diào)試的情況下每次都計(jì)算大大降低了調(diào)試效率,所以使用postman的pre-request script功能自動(dòng)添加該簽名
操作:
首先將需要自動(dòng)管理的請(qǐng)求字段以變量名的形式表示:
上圖中signing字段通過(guò){{signing}}變量來(lái)表示
接下來(lái)編寫(xiě)pre-request script腳本計(jì)算該變量并賦值:
這里使用到postman的官方文檔:https://learning.postman.com/docs/postman/scripts/intro-to-scripts/
調(diào)試方法:點(diǎn)擊菜單的view->show postman console即可打開(kāi)控制臺(tái),其在Windows下快捷鍵為ctrl+alt+c,然后在pre-request script中寫(xiě)入要打印的信息,send該請(qǐng)求
可見(jiàn)控制臺(tái)對(duì)指定信息進(jìn)行了打印.
編寫(xiě)計(jì)算腳本:
接下來(lái)是正事,首先獲取全部請(qǐng)求參數(shù):
const getParams = pm.request.url.query;
此處pm為postman內(nèi)置api,詳情參加官方文檔:https://learning.postman.com/docs/postman/scripts/postman-sandbox-api-reference/
然后遍歷全部請(qǐng)求參數(shù),按照調(diào)用規(guī)則拼接,注意當(dāng)請(qǐng)求中參數(shù)處于未勾選狀態(tài)時(shí)會(huì)有一個(gè)disabled屬性,值為true,此類參數(shù)不參與計(jì)算
let args = [];
let queryStr = "";
getParams.each((singleGetParam)=>{
? ? if (singleGetParam.key !== 'signing' && !singleGetParam.disabled) {
? ? ? ? queryStr += singleGetParam.key + '=' + singleGetParam.value + "&";
? ? }
});
queryStr = queryStr.slice(0,-1) + 'yourSecretKey';
最后計(jì)算并賦值給環(huán)境變量(postman中預(yù)置了CryptoJS庫(kù),可直接使用文檔參加https://cryptojs.gitbook.io/docs/):
pm.environment.unset("signing");
pm.environment.set("signing", CryptoJS.MD5(queryStr).toString());
現(xiàn)在即可自動(dòng)計(jì)算簽名了
將腳本應(yīng)用于整個(gè)收藏夾:
每一個(gè)請(qǐng)求都添加腳本太麻煩了,postman可以直接給整個(gè)收藏夾添加公用腳本,編輯收藏夾時(shí)點(diǎn)擊pre-request script即可
以上です