柚子快報(bào)邀請(qǐng)碼778899分享:postman使用教程
柚子快報(bào)邀請(qǐng)碼778899分享:postman使用教程
postman接口測(cè)試
postman頁(yè)面介紹
請(qǐng)求:
params:get請(qǐng)求的參數(shù)authorization:鑒權(quán)heander:請(qǐng)求頭
accept:客戶端接受的數(shù)據(jù)類型content-type:客戶端發(fā)送給服務(wù)器的數(shù)據(jù)類型user-agent:客戶端的類型xmlhttprequest:異步請(qǐng)求… body:post請(qǐng)求傳參
none:沒(méi)有參數(shù)from-data:文件上傳x-www-from-urlencodeed:表單請(qǐng)求(鍵值對(duì))raw:使用原始數(shù)據(jù)上傳(json、xml、html等)binary:二進(jìn)制文件上傳 pre-request script:前置腳本,請(qǐng)求之前的腳本,對(duì)請(qǐng)求參數(shù)進(jìn)行處理tests:請(qǐng)求之后的腳本,可用作斷言、設(shè)置環(huán)境變量settings:設(shè)置cookis:是postman用于自動(dòng)管理cookie的功能
響應(yīng):
body:返回值
pretty:以不停的合適查看返回結(jié)果raw:以文本格式查看返回結(jié)果preview:以網(wǎng)頁(yè)格式查看返回結(jié)果 cookies:響應(yīng)的cookiesheaders:響應(yīng)頭testresults:斷言的結(jié)果
調(diào)試:
console:控制臺(tái)用于調(diào)試,可以顯示出接口請(qǐng)求信息,在pre-request script和tests編寫代碼后,也可在控制臺(tái)查看結(jié)果。
//打印返回值:console.log(變量名)
console.log(responseBody);
返回值類型為字符串 要轉(zhuǎn)化為json對(duì)象(通過(guò)key取值) json.parse(responseBody)
1、請(qǐng)求接口
填寫接口地址、接口請(qǐng)求類型、接口請(qǐng)求頭、接口請(qǐng)求參數(shù),點(diǎn)擊send發(fā)送請(qǐng)求,完成一個(gè)接口的請(qǐng)求。
2、斷言
完成接口請(qǐng)求后,需要做斷言,通過(guò)判斷接口返回的數(shù)據(jù)是否符合預(yù)期,從而判斷接口的請(qǐng)求是否符合預(yù)期,在批量執(zhí)行接口時(shí),斷言能直接判斷接口請(qǐng)求是否正確。斷言腳本需放在Test中。
//斷言的名稱,可自定義
pm.test("添加成功", function () {
//用jsonData變量存儲(chǔ)json類型的接口返回?cái)?shù)據(jù)
var jsonData = pm.response.json();
//判斷接口響應(yīng)碼是否與預(yù)期集合中的某個(gè)值一致。判斷jsonData.code的值是否為200
pm.expect(jsonData.code).to.eql(200);
});
接口的返回結(jié)果為
{
"msg": "入庫(kù)成功,報(bào)表生成",
"code": 200,
"data": {
"id": "1578726211851386880"
}
}
我用code:200作為斷言的依據(jù),jsonData.code獲取code值,code:200則接口斷言成功,否為失敗。 在Test Results中可以查看斷言結(jié)果,pass為斷言成功 斷言方式有多種可根據(jù)需求來(lái)選擇。
3、關(guān)聯(lián)
關(guān)聯(lián)就是將上一個(gè)接口的返回值提供給下一個(gè)接口使用,這里我們用登錄接口進(jìn)行舉例,登錄成功后會(huì)返回token,token要作為下一個(gè)接口的請(qǐng)求頭,才能請(qǐng)求數(shù)據(jù)。 方法一: 提取token并設(shè)置為環(huán)境變量
//用jsonData變量存儲(chǔ)json類型的接口返回?cái)?shù)據(jù)
var jsonData = pm.response.json();
//用token存儲(chǔ)jsonData.token的值,并設(shè)置為環(huán)境變量
pm.environment.set("token", jsonData.token);
點(diǎn)擊右上角眼睛,可查看設(shè)置成功的環(huán)境變量,這樣方便下一個(gè)接口引用 引用變量,除了在Pre-request Script中,其余模塊都可用{{變量名}}引用變量
方法二: 正則表達(dá)式關(guān)聯(lián)接口
console.log(responseBody);
//通過(guò)正則匹配值,match匹配
var datas =responseBody.match(new RegExp('"access_token":"(.*?)"'));
console.log(datas[1])
4、動(dòng)態(tài)參數(shù)
第一種:系統(tǒng)自帶的動(dòng)態(tài)參數(shù)
{{$timestamp}} //動(dòng)態(tài)時(shí)間戳
{{$randomlnt}} //動(dòng)態(tài)0-1000的整形
{{$guid}} //動(dòng)態(tài)的guid字符串
第二種:自定義動(dòng)態(tài)參數(shù)
var times =Date.now();
pm.globals.set(“times”,times);
定時(shí)執(zhí)行5s
const sleep=(milliseconds)=>{
const start =Date.now();
while (Date.now()<=start+milliseconds){}
};
sleep(5000);
一旦需要斷言隨機(jī)數(shù),那么就必須使用自定義動(dòng)態(tài)參數(shù)并且要注意如下事項(xiàng):
在斷言中不能使用{{}}引用變量
需要通過(guò)pm.globals.get(“變量名”),獲取變量
5、批量執(zhí)行測(cè)試用例
迭代:迭代次數(shù)
延遲:
data:數(shù)據(jù)驅(qū)動(dòng)
6、postman的參數(shù)化(csv,json)
json格式:
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-fD3yHNRG-1664971568134)(image/軟件測(cè)試/1664892897525.png)]
csv格式
文件中數(shù)據(jù)默認(rèn)為全局變量用{{}}引用即可
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-GEPOEMMP-1664971568134)(image/軟件測(cè)試/1664893744628.png)]
必須帶請(qǐng)求頭的接口
cookie鑒權(quán)
cookie是一段鍵值對(duì)的文本
cookie可以傳輸token和session
1.當(dāng)客戶端第一次訪問(wèn)服務(wù)器的時(shí)候,那么服務(wù)器就會(huì)生成cookie,并且通過(guò)響應(yīng)里面的set-cookie傳輸給客戶端??蛻舳藭?huì)自動(dòng)保存。 2當(dāng)客戶端第2-N次訪問(wèn)服務(wù)器的時(shí)候,那么客戶端就會(huì)自動(dòng)的讀取本地的cookie,然后根據(jù)主機(jī)IP或域名添加對(duì)應(yīng)的cookie從而實(shí)現(xiàn)鑒權(quán)??蛻舳说谝淮卧L問(wèn)服務(wù)器時(shí),服務(wù)器會(huì)產(chǎn)生cookie,并通過(guò)
postman自動(dòng)處理cookie,但不是萬(wàn)能的,會(huì)有坑
7、mock測(cè)試
mock:模擬,
應(yīng)用場(chǎng)景:
1、前后端分離的架構(gòu)下前后端開發(fā)是不同步的,前端的數(shù)據(jù)展示依賴于后端的接口,這時(shí)候就需要使用mock測(cè)試
前后端連調(diào):去掉mock,讓前端訪問(wèn)真實(shí)的后端接口。
2、當(dāng)被測(cè)系統(tǒng)調(diào)用第三方的接口,這時(shí)想測(cè)試這個(gè)接口的錯(cuò)誤場(chǎng)景。
3、去甲方展示demo,靜態(tài)網(wǎng)頁(yè)。
8、接口加解密
1、對(duì)稱式加密(私鑰加密)
常見有AES,DES,Base64,特點(diǎn):加密和解密都是相同的密鑰
AES加密,AES 加密最常用的模式就是 ECB模式 和 CBC 模式,當(dāng)然還有很多其它模式,他們都屬于AES加密。ECB模式和CBC 模式倆者區(qū)別就是 ECB 不需要 iv偏移量,而CBC需要。所以在用ECB摸索時(shí)只需傳參密鑰、明文,而CBC模式要添加iv偏移量
postman中使用CryptoJs庫(kù)進(jìn)行加密,CryptoJs支持常見的加密方式AES,MD5等
簡(jiǎn)單的AES加密
//CryptoJS.AES.encrypt("需要加密的內(nèi)容","密鑰")
var aes_value=CryptoJS.AES.encrypt("admin","mashang").toString();
console.log(aes_value); //輸出值
AES-128-CBC加密
//方法1
//定義一個(gè)aes加密函數(shù)
function encrypt(content, keyStr,iv) {
let key = CryptoJS.enc.Utf8.parse(keyStr);
let new_iv = CryptoJS.enc.Utf8.parse(iv);
let srcs = CryptoJS.enc.Utf8.parse(content);
let encrypted = CryptoJS.AES.encrypt(srcs, key, {iv: new_iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
return encrypted.toString();
}
//函數(shù)初始化需要傳三個(gè)值,"待加密字段","密鑰","iv偏移量"
var aes_username=encrypt("admin","key123","iv123");
//打印出aes_username的值
console.log(aes_username);
//方法2
const key = CryptoJS.enc.Utf8.parse("密鑰值"); //這里使用base64 或者 utf8 要看要求,加解密一致即可
const iv = CryptoJS.enc.Utf8.parse('iv偏移變量'); //十六位十六進(jìn)制數(shù)作為密鑰偏移量
//定義aes加密函數(shù)
function Encrypt(word) {
let srcs = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
return encrypted.toString();
}
//加密用戶名稱、密碼
var aes_username=Encrypt("admin");
var aes_password=Encrypt("123456")
//將加密的用戶名、密碼設(shè)置為局部環(huán)境變量
pm.environment.set("aes_username",aes_username);
pm.environment.set("aes_password",aes_password);
//打印出加密后的用戶名和密碼
console.log(aes_username);
console.log(aes_password);
AES-128-ECB加密
DES加密
CryptoJS.DES.encrypt("需要加密的內(nèi)容","密鑰")
var aes_value=CryptoJS.DES.encrypt("admin","ceshi").toString();
console.log(aes_value);
Base64加密
CryptoJS.enc.Base64.stringify("需要加密的內(nèi)容")
//先把待加密字符轉(zhuǎn)換為utf-8格式
var utf8_str=CryptoJS.enc.utf8.parse("admin");
var base64_str=CryptoJS.enc.Base64.stringify(utf8_str);
console.log(base64_str);
2、非對(duì)稱加密(雙密鑰加密 ):RSA
有公鑰和私鑰兩個(gè)密鑰,公鑰加密,私鑰解密
postman本身不支持這種加密方式,需要引用外部的js文件
3、只加密不解密,MD5、SHA、HmacSHA
MD5 32位小寫加密,
var md5_str=CryptoJS.MD6("admin").toString();
console.log(md5_str)
SHA 256 解密
var sha_str=CryptoJS.SHA256("admin").toString();
console.log(sha_str)
HamcSHA1
//CryptoJS.HmacSHA1("待加密的字符","密鑰").toString()
var HmacSHA1_str=CryptoJS.HmacSHA1("admin","ceshi").toString();
console.log(HmacSHA1)
4、Sign簽名,比混合加密更嚴(yán)格的加密方式,sign的生命周期一般是1-3分鐘
首先獲取到所有的參數(shù)(params和body)
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-18maeX04-1664971568134)(image/軟件測(cè)試/1664371555633.png)]
把所有的參數(shù)組合成一個(gè)字典
自定義一個(gè)根據(jù)ky的ACSII進(jìn)行升序排列的算法,把所有的參數(shù)和值進(jìn)行升序排列
獲取一個(gè)訂購(gòu)好nonce
獲取一個(gè)當(dāng)前時(shí)間戳
把訂單號(hào)nonce加到參數(shù)之前和時(shí)間戳加到參數(shù)之后
把最終的參數(shù)進(jìn)行加密(混合)處理,生成sign
把sign簽名在請(qǐng)求頭里面?zhèn)鹘o后端
柚子快報(bào)邀請(qǐng)碼778899分享:postman使用教程
參考文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。