版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/q386815991/article/details/79569409
1、Postman接口測試工具
Postman簡介與安裝:
Postman是一款功能強大的網(wǎng)頁調(diào)試與發(fā)送網(wǎng)頁HTTP請求的Chrome插件。
它提供功能強大的 Web API & HTTP 請求調(diào)試。它能夠發(fā)送任何類型的HTTP 請求 (GET, HEAD, POST, PUT..),附帶任何數(shù)量的參數(shù)+ headers。
Postman功能:
主要用于模擬網(wǎng)絡(luò)請求包
快速創(chuàng)建請求
回放、管理請求
快速設(shè)置網(wǎng)絡(luò)代理
Postman安裝:
1.在chrome應(yīng)用商店搜索,應(yīng)用商店地址:https://chrome.google.com/webstore/search/postman?t=http://webstore.google.com
翻墻下載直接添加成google瀏覽器插件即可
2.客戶端安裝
https://www.getpostman.com/Apps
建議選擇mac/windows app,比起Chrome app,下載不需要翻墻,功能更強大
2、界面

3、Postman簡單使用
http://www.bejson.com/ 解析json格式數(shù)據(jù)的網(wǎng)站
https://developers.douban.com/wiki/?title=book_v2#get_book_search

https://mp.weixin.qq.com/wiki/home/
開始開發(fā)--接口測試號申請
appID wx55614004f367f8ca
Appsecret 65515b46dd758dfdb09420bb7db2c67f
用戶分組管理--創(chuàng)建分組
利用postman發(fā)送post請求、參數(shù)是json格式

頁面訪問請求(Post方法):
form-data、x-www-form-urlencoded、raw、binary的區(qū)別
1. form-data
就是http請求中的multipart/form-data,它會將表單的數(shù)據(jù)處理為一條消息,以標簽為單元,用分隔符分開。既可以上傳鍵值對,也可以上傳文件。當上傳的字段是文件時,會有Content-Type來說明文件類型;content-disposition,用來說明字段的一些信息;由于有boundary隔離,所以multipart/form-data既可以上傳文件,也可以上傳鍵值對,它采用了鍵值對的方式,所以可以上傳多個文件。
2.x-www-form-urlencoded:
就是application/x-www-from-urlencoded,會將表單內(nèi)的數(shù)據(jù)轉(zhuǎn)換為鍵值對
3.raw
可以上傳任意格式的文本,可以上傳text、json、xml、html等
4.binary
相當于Content-Type:application/octet-stream,從字面意思得知,只可以上傳二進制數(shù)據(jù),通常用來上傳文件,由于沒有鍵值,所以,一次只能上傳一個文件。
multipart/form-data與x-www-form-urlencoded區(qū)別
multipart/form-data:既可以上傳文件等二進制數(shù)據(jù),也可以上傳表單鍵值對,只是最后會轉(zhuǎn)化為一條信息;
x-www-form-urlencoded:只能上傳鍵值對,并且鍵值對都是間隔分開的。
Get方法和Post方法的區(qū)別
1. get是從服務(wù)器上獲取數(shù)據(jù),post是向服務(wù)器傳送數(shù)據(jù)。
2.get安全性非常低,post安全性較高。但是執(zhí)行效率卻比Post方法好。
3.POST的安全性要比GET的安全性高。注意:這里所說的安全性和上面 GET提到的“安全”不是同個概念。上面“安全”的含義僅僅是不作數(shù)據(jù)修改,而這里安全的含義是真正的Security的含義,比如:通過GET提交數(shù)據(jù),用戶名和密碼將明文出現(xiàn)在URL上,因為(1)登錄頁面有可能被瀏覽器緩存,(2)其他人查看瀏覽器的歷史紀錄,那么別人就可以拿到你的賬號和密碼了,除此之外,使用GET提交數(shù)據(jù)還可能會造成Cross-site request forgery攻擊。
總結(jié)一下,Get是向服務(wù)器發(fā)索取數(shù)據(jù)的一種請求,而Post是向服務(wù)器提交數(shù)據(jù)的一種請求,在FORM(表單)中,Method默認為"GET",實質(zhì)上,GET和POST只是發(fā)送機制不同,并不是一個取一個發(fā)!
Postman設(shè)置發(fā)送請求頭
1、查看響應(yīng)結(jié)果
Body 有三種視圖:Prettry, Raw, 和 Preview。
Prettry 模式將 JSON 或 XML 響應(yīng)格式化,使他們更容易被查看。Pretty 模式中的鏈接被高亮顯示,點擊他們可以在 Postman 中加載一個使用該 URL 的 GET 請求。
Raw 視圖只是一個顯示了響應(yīng)的 body 的大文本區(qū)域, 它可以幫助你判斷你的響應(yīng)是不是被壓縮的。
Preview 選項卡在內(nèi)聯(lián)沙箱框架中呈現(xiàn)響應(yīng)。一些Web 框架默認返回 HTML 錯誤,這時, Preview 模式就非常有用了。由于內(nèi)聯(lián)沙箱框架的限制,JAVAScript 和圖像在內(nèi)聯(lián)框架中是被禁用的。如果你的 API 端點返回一個圖像, Postman 會自動檢測并呈現(xiàn)它。對于二進制響應(yīng)類型,你應(yīng)該選擇“Send and download”,這將讓你保存響應(yīng)到你的硬盤上,之后你就可以用適當?shù)牟榭雌鱽聿榭此_@樣你就可以靈活地測試音頻、PDF、zip 文件或 API 給你的任何文件。
Headers:
在 Header 選項卡中,headers 顯示為 key/value 對。光標懸停 header 名時則會顯示根據(jù) HTTP 規(guī)范對 header 的描述。如果你正在發(fā)送一個 HEAD 請求, Postman 會默認顯示 Headers 選項卡。
Cookies
Postman v0.8.x以上版本 可以顯示瀏覽器 cookies, 就像它與瀏覽器共享相同的環(huán)境一樣。對于本地應(yīng)用, 你需要啟用Interceptor,然后你就可以在響應(yīng)部分的 Cookies 選項卡中查看響應(yīng)的 cookies。
Tests
Tests為執(zhí)行斷言后的測試結(jié)果
2、常規(guī)使用--斷言Tests
測試返回的body包含的內(nèi)容
tests["Body matches string"] =responseBody.has("百度搜索");
測試返回的狀態(tài)碼
tests["Status code is 200"] =responseCode.code === 200;
tests["1+1"] = 1+1 === 2;
測試返回的狀態(tài)信息
tests["Status code name hasstring"] = responseCode.name.has("OK");
tests["hello is he"] ="hello".has("he");
測試響應(yīng)時間是否低于200ms
tests["Response time is less than200ms"] = responseTime < 200;
檢查響應(yīng)body中等于指定string--Check if response body is equal to a string
tests["Body is correct"] =responseBody === "response_body_string";
檢查Content-Type是否包含在header返回(大小寫不敏感)
tests["Content-Type is present"]= postman.getResponseHeader("Content-Type");
檢查Content-Type是否包含在header返回(大小寫敏感)
tests["Content-Type is present"]= responseHeaders.hasOwnProperty("Content-Type");
檢查成功post的請求
tests["Successful POST request"]= responseCode.code === 201 || responseCode.code === 202 || responseCode.code=== 200;
檢查JSON某字段值
var jsonData = JSON.parse(responseBody);
tests["Your test name"] =jsonData.expires_in === 7200;
3、接口持久化
把單個接口保存到文件夾(接口項目)中,再接口項目文件夾下新建文件夾(模塊)
4、環(huán)境變量:
環(huán)境變量:
postman可直接通過切換環(huán)境來實現(xiàn)多個環(huán)境中的參數(shù)切換。常用功能:環(huán)境地址切換、全局變量使用。
5、Postman導(dǎo)入導(dǎo)出功能
6、Postman持久化運行

7、postman提取接口返回值
1、變量賦值的方式

let jsondata = JSON.parse(responseBody) ;
let access_token = jsondata.access_token ;
let expires_in = jsondata.expires_in ;
tests["時效"] =expires_in === 7200 ;
2、保存到全局變量
var jsondata = JSON.parse(responseBody) ;
postman.setGlobalVariable("tokenid",jsondata.access_token);
3、接口串行傳參
把上一個接口的返回值送給下一個接口作為輸入?yún)?shù)
在postman中通過全局變量實現(xiàn)


4、Postman動態(tài)傳參
在runner里循環(huán)發(fā)n次請求/做自動化測試時,有些接口不適合寫死參數(shù):
1.Postman有以下內(nèi)建變量,適合一次性使用:
{{$guid}}//生成GUID
{{$timestamp}}//當前時間戳
{{$randomInt}}//0-1000的隨機整數(shù)
2.參數(shù)依賴上一個請求的返回:
上個請求的Tests里提取參數(shù)存環(huán)境變量,這個請求里用{{變量名}}取值
3.參數(shù)每次都不同,但之后的斷言或別的請求里可能還要用:
在Pre-requestScript里寫代碼處理,存為環(huán)境變量,參數(shù)里用{{變量名}}取值
5、Postman流程控制
流程控制只有在collection runner或Newman里才生效
設(shè)2個接口的順序為:接口A-->接口B
如果希望執(zhí)行順序為:接口A -> 接口B -> 接口A,又不想復(fù)制一份接口A
A接口:

B接口:

失敗的測試自動重新運行
6、Postman調(diào)試功能(日志)
1.使用 Ctrl+Alt+c 可以打開Postman的控制臺,可以查看請求和響應(yīng)(只適用于客戶端,不適用于Chrome 插件)

2.用console.log()打印,到控制臺看
console.log(jsondata.access_token);
3.tests['這里拼出你想看的字符串']= true在界面/報告看斷言
tests[jsondata.access_token] = false;
7、定義公共函數(shù)
常用公共函數(shù):
1).判斷是否超時(assertNotTimeout):
varhasResponse=postman.getResponseHeader('Content-Type')?true:false;if(!hasResponse) tests['服務(wù)端在超時前沒返回任何數(shù)據(jù),請檢查相關(guān)服務(wù)、網(wǎng)絡(luò)或反向代理設(shè)置(以下跳過其他斷言)']=false;
2).未超時,顯示發(fā)出的請求參數(shù)(logParams):
if(hasResponse) tests[`[INFO] 請求參數(shù)(超時沒返回時不解析):${JSON.stringify(request.data)}`]=true;
3).未超時,解析返回的JSON對象(getResponseJson):
try{if(hasResponse) var json=JSON.parse(responseBody);}catch(err){tests['服務(wù)端沒返回合法的JSON格式,請檢查相關(guān)服務(wù)、網(wǎng)絡(luò)或反向代理設(shè)置(以下跳過其他斷言)']=false; tests[`[INFO] 返回:${responseBody}`]=true;console.error(err);}
4).返回元素的類型(assertType):
var assertType=(name,value,type)=>{letisType=(type==='array')? Array.isArray(value):typeof value===type;tests[`${name}為${type}(實際值:${value})`]=isType;};
js的數(shù)據(jù)類型:
typeof 2 輸出 number
typeof null 輸出 object
typeof {} 輸出 object
typeof [] 輸出 object
typeof (function(){}) 輸出 function
typeof undefined 輸出 undefined
typeof '222' 輸出 string
typeof true 輸出 boolean
5).返回元素是否與預(yù)期值一致(assertEqual):
var assertEqual=(name,actual,expected)=>{tests[`${name}等于${expected}(實際值:${actual})`]=actual===expected;};
6).返回元素是否與預(yù)期值不一致(assertNotEqual):
varassertNotEqual=(name,actual,expected)=>{tests[`${name}不等于${expected}(實際值:${actual})`]=actual!==expected;};
————————————————
版權(quán)聲明:本文為CSDN博主「快樂風(fēng)男灬」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/q386815991/article/details/79569409