Postman接口測試使用教程和接口自動化測試項目實戰(zhàn)你要的都有

有些圖片沒有cv過來,建議大家邊看視頻邊記筆記,筆記一定要自己記。
如果筆記有錯誤加我qq:3279793245 p22之后視頻沒有看
測試系統(tǒng)組件接口之間的一種測試
1 分類:
測試外部接口:測試被測系統(tǒng)和外部系統(tǒng)之間的接口 (只測正向)
測試內(nèi)部接口:
1.內(nèi)部接口只提供給內(nèi)部系統(tǒng)使用 (公司內(nèi)部使用)
2.內(nèi)部接口提供給外部系統(tǒng)使用 (全面測試,異常場景,權(quán)限控制)
2 接口測試流程和用例設(shè)計
1 拿到接口api文檔(或者f12抓包工具),熟悉接口業(yè)務(wù),接口地址,鑒權(quán)方式,入?yún)?,錯誤碼
2 編寫接口測試用例以及評審
思路:
正例:輸入正確入?yún)?,接口返回正確數(shù)據(jù)
返例:
鑒權(quán)反例:
鑒權(quán)碼為空,錯誤,過期......
參數(shù)反例:
為空,參數(shù)類型異常,長度異常
錯誤碼覆蓋:
根據(jù)業(yè)務(wù)來定。
其他錯誤場景:
接口黑名單,接口調(diào)用次數(shù)限制,分頁場景
3 使用postman執(zhí)行測試用例
4 postman+nweman+Jenkins實現(xiàn)持續(xù)集成并且輸出測試報告并且發(fā)送郵件。
3 postman 介紹 使用
創(chuàng)建項目
3.2 創(chuàng)建接口
get請求頁簽
左邊豎著目錄解釋
collections :集合 項目
APIS: api文檔
environments:環(huán)境變量
Mock servers:服務(wù)器
Monitors:監(jiān)聽
History:歷史記錄
=---------------=
橫著關(guān)鍵字解釋
Params :get傳參
Authorization:鑒權(quán)
Headers :請求頭
Body:post請求傳參地方
none:沒有參數(shù)
from-data :既可以傳鍵值對,也可以傳文件
x-www-from-urlcodend:只能傳鍵值對
raw:傳json,text,xml,html,javaScript
binary:把文件以二進制的方式傳參
Pre-request Script:請求之前的腳本
Tests:請求之后的(腳本)斷言
Settings:設(shè)置
Cookies:用于管理cookies信息
-----Authorization:鑒權(quán)圖解
Body:post請求傳參地方
from-data :既可以傳鍵值對,也可以傳文件
Cookies:用于管理cookies信息
post請求標(biāo)簽
Params 里可以以key-value形式添加鑒權(quán)token
響應(yīng)頁簽
下方關(guān)鍵字解釋
body:接口返回的數(shù)據(jù)
Pretty:以json,html,xml。。。不同格式查看返回的數(shù)據(jù)
Raw:以文本的方式查看返回的數(shù)據(jù)
PreView:以網(wǎng)頁的形式查看返回的數(shù)據(jù)
Cookies:響應(yīng)的cookies信息
Headers:響應(yīng)頭
Test Results:斷言的結(jié)果
··· -> Save response to file : 以文件形式保存此次響應(yīng)
get請求 post請求區(qū)別
get請求一般是獲取數(shù)據(jù)
post請求一般是提交數(shù)據(jù)
git:
速度快
不限制參數(shù)長度
入?yún)⒃趗rl里,保密性不強 url后面加 ? 多個參數(shù)以 & 分割
post:
速度慢
限制參數(shù)長度
入?yún)⒓用?/p>
4 postman環(huán)境變量 全局變量
Create Environment(環(huán)境變量):
添加環(huán)境變量:
使用環(huán)境變量:
環(huán)境變量key在URl欄里輸入要用 {{}} 括起來 ,然后右上角選擇對應(yīng)的環(huán)境運行。
Globals(全局變量):
全局變量:能夠在任何接口里面都能訪問的變量
5 接口關(guān)聯(lián)
1 使用json提取器實現(xiàn)接口關(guān)聯(lián)
需求:第一個接口里有access_token,第二個接口里需要這個token,就可以把token在第一個接口里設(shè)置為全局變量。
第一個接口里的 Tests :
console.log(responseBody); //使用json提取器提取access_token值 //把返回的字符串的數(shù)據(jù)轉(zhuǎn)換成對象的形式 var result = JSON.parse(responseBody); console.log(result.access_token); //把access_toekn設(shè)置為全局變量 pm.globals.set("access_token".result.access_token);
console.log(responseBody); 打印上一個接口測試?yán)锏闹?/p>
var result = JSON.parse(responseBody); 把json值轉(zhuǎn)為對象
console.log(result.access_token); 打印需要的值的value (value=result.key) //點左下角Consele顯示控制臺
pm.globals.set("access_token",result.access_token); 設(shè)置變量名稱為 ‘a(chǎn)ccess_token’的全局變量
高亮兩行代碼就可以完成
第二個接口:
value里使用{{access_token}} 獲取value
圖示:
不用看地址欄(url沒改 )
第一個接口
第二個接口
1.1 查看環(huán)境變量和全局變量:
2 使用正則表達(dá)式提取器實現(xiàn)接口關(guān)聯(lián)
第一個接口里的Tests:
var result = responseBody.match(new RegExp('"access_token":"(.*?)"')); console.log(result);//到這先運行一下 result會有好幾個值,選擇正確的值的下標(biāo)放在第三行 pm.globals.set("access_token",result[1]); 設(shè)置全局變量
new RegExp('') //創(chuàng)建一個正則表達(dá)式 ,括號里傳進的值如果加雙引號,RegExp('')這個括號里就使用單引號。
new RegExp('"access_token":"(.*?)"') //黃色高亮是值的前面,橙色是值本身,值本身使用 (.*?) 代替。
原來的值為:
寫完第二行先運行一下 result會有好幾個值,選擇正確的值的下標(biāo)放在第三行。
//點左下角Consele顯示控制臺
第二個接口
value里使用{{access_token}} 獲取value
3 內(nèi)置動態(tài)參數(shù)以及自定義動態(tài)參數(shù)
postman內(nèi)置動態(tài)參數(shù):
{{$timestamp}} 生成當(dāng)前時間的時間戳
{{$randomint}} 生成1-1000的隨機數(shù),有可能重復(fù)
{{$guid}} 生成一個隨機的GUID的字符串
自定義動態(tài)參數(shù)
Pre-request Script()://請求之前執(zhí)行的腳本在這里寫代碼
var times = Date.new(); pm.globals.set("times", times);
var times = Date.new(); 獲得當(dāng)前時間戳賦值給times
pm.globals.set("times",?times); //把時間戳設(shè)置為全局變量
Body里直接使用times 。
//點左下角Consele顯示控制臺
6 業(yè)務(wù)閉環(huán)(增、改、查、刪)和文件上傳
一個業(yè)務(wù)如果有增刪改查,可以按照 增 改 查 刪的順序執(zhí)行接口,這樣數(shù)據(jù)庫就不會有多余數(shù)據(jù)。
文件上傳
Body from-date file
key設(shè)置文件名字 value 選擇地址
7 斷言
傳送門:csdn
Status code: Code is 200
檢查狀態(tài)碼為200
Response body: Contains string
響應(yīng)結(jié)果:包含指定字符串
Response body: JSON value check
響應(yīng)結(jié)果:json檢查
Response body: Is equal to a string
響應(yīng)結(jié)果:等于指定字符串
Response headers: Content-Type header check
header報文檢查
Response time is less than 200ms
響應(yīng)時間小于200ms
一般狀態(tài)斷言只有一個,業(yè)務(wù)斷言可以有多個
寫在Tests
運行結(jié)束之后在 Test Results里查看結(jié)果
全局?jǐn)嘌?:
每個接口都要寫狀態(tài)斷言
在項目- 項目名稱右鍵 Edit Tests 里添加狀態(tài)斷言
Status code: Code is 200 檢查返回值是否為200
//狀態(tài)斷言 pm.test("檢查返回狀態(tài)碼是否為200",function (){ pm.response.to.have.status(200); });
Response body: Contains string 檢查是否含有某個關(guān)鍵字
一定要自定義參數(shù),需要拼接 + pm.globals.get("key") 或者 globals["times"] 或者 globals.times都是獲取全局變量
//業(yè)務(wù)斷言 pm.test("檢查響應(yīng)中是否有token這個關(guān)鍵字", function () { pm.expect(pm.response.text()).to.include("token"); });
//豬豬俠215222在上面接口里是由 豬豬俠+{{times}} 組成的
//times是一個時間戳,在這里當(dāng)做隨機數(shù)
//業(yè)務(wù)斷言 獲取 值為豬豬俠times(豬豬俠215154)的key pm.test("檢查是否有豬豬俠215648561", function () { //豬豬俠215222在上面接口里是由 豬豬俠+{{times}} 組成的 //times是一個時間戳,在這里當(dāng)做隨機數(shù) pm.expect(pm.response.text()).to.include("豬豬俠"+ pm.globals.get("times")); pm.expect(pm.response.text()).to.include("豬豬俠"+globals["times"])); pm.expect(pm.response.text()).to.include("豬豬俠"+globals.times)); });
Response body: JSON value check
pm.test("檢查errcode為0",function(){ var jsonData = pm.response.json(); pm.expect(jsonData.errcode).to.eql(0); });
8批量運行測試用例
在項目- 項目名稱右鍵 Run collection
批量上傳文件時,要在settings里General里 Working directory 下面 打開可讀取文件權(quán)限
9 通過csv或者json實現(xiàn)數(shù)據(jù)驅(qū)動(一個接口同時運行正例和反例)
csv
1 創(chuàng)建data.csv文件
2 value值依次為空進行運行,查看出錯后的返回值
3 所有的key,在文件的第一行用逗號隔開
4 第二行輸入正確的value,逗號隔開
5 其中一個key的value為空,其他正確,
其每個key的value依次為空,幾個key寫幾條數(shù)據(jù)
后面加上第一步各個value為空時的返回值代碼
正確的參數(shù)會返回token,錯誤會返回錯誤代碼
6 Params 下面 value 要改成date文件里的{{key}}
7 如果接口運行前需要token 或者鑒權(quán)驗證 要先進行判斷
因為錯誤的數(shù)據(jù)進行測試是沒有token,鑒權(quán)或api驗證可能不需要判斷
這個里token:
如果token不等于-1 ,則獲取token
if(responseBody.search("access_token")!=-1){ var result = responseBody.match(new RegExp('"access_token":"(.*?)"')); console.log(result);//到這先運行一下 result會有好幾個值,選擇正確的值的下標(biāo)放在第三行 pm.globals.set("access_token",result[1]); 設(shè)置全局變量 };
這個token是寫死的,使用csv要修改
原來的:
//業(yè)務(wù)斷言 pm.test("檢查響應(yīng)中是否有token這個關(guān)鍵字", function () { pm.expect(pm.response.text()).to.include("token"); });
csv:
accert_value在data.csv里對應(yīng)的就是token的key
//業(yè)務(wù)斷言 pm.test("檢查響應(yīng)中是否有token這個關(guān)鍵字", function () { pm.expect(pm.response.text()).to.include(data.accert_value); });
json
創(chuàng)建data.json
第一行寫正確數(shù)據(jù)
其他每個key的value依次為空,幾個key寫幾條數(shù)據(jù)
后面加上第一步各個value為空時的返回值代碼
正確會返回token,錯誤會返回錯誤代碼
[ {"A":"1","B":"2","C":"3","accress_token":"token值4sdf6ds54gv6d4g35d4"}, {"A":"","B":"2","C":"3","accress_token":4004}, {"A":"1","B":"","C":"3","accress_token":4005}, {"A":"1","B":"2","C":"","accress_token":4006} ]
其他和csv一樣
10 必須帶請求頭的接口
host:請求地址
Accept:客戶端接收到的數(shù)據(jù)格式
Connection: 連接方式
X-Requested-With 異步請求
User-Agent: 客戶端用戶類型
Referer: 請求來源地址
Cookie :Cookie信息
Content-type: 請求內(nèi)容格式
1 不知道用哪個請求,就把所有請求頭全部復(fù)制
抓包軟件
2 postman Headers-Bulk Edit 粘貼
3 刪除 Host以及Host以上的內(nèi)容
4 點擊Key-Value Edit,然后運行一遍取消一個對號,直到運行后Body-Previwe不顯示網(wǎng)頁
11 Postman接口Mock Servier服務(wù)器
mock 模擬
后端的接口還沒開發(fā)完成,前段的業(yè)務(wù)需要調(diào)用后端的接口
1 postman-Mock Servers-創(chuàng)建一個服務(wù)
這里是成功之后返回“ok”
2瀏覽器測試:
復(fù)制瀏覽器地址+“/接口名字”
https://b6965b04-0e94-42f0-b681-7b968017a447.mock.pstmn.io/test
11 Cookie鑒權(quán)
cookie只是一小段文本,格式key-value
原理:
1當(dāng)客戶端第一次訪問服務(wù)器的時候,那么服務(wù)器就會生成cookie,
并且在響應(yīng)頭的set-cookie里面把生成的cookie信息發(fā)送個客戶端,在客戶端保存起來。
2當(dāng)客戶端以后每次訪問服務(wù)器的時候,那么客戶端就會在請求頭的cookie帶上cookie信息,
從而實現(xiàn)鑒權(quán)。
cookie分類
會話cookie:保存在內(nèi)存里,瀏覽器關(guān)閉就會自動化清除cookie
持久cookie:保存在硬盤里,瀏覽器關(guān)閉后不會清除,只有當(dāng)過期時間過了才會清除
演示:
cookie在第一個接口里,使用正則表達(dá)式把cookie設(shè)置為全局變量(需求文檔會提示cookie在前端源碼里的位置)
需求文檔提示的token位置:
第一個接口Tests里代碼:
responseBody.match(new RegExp('name="csrf_token" value="(.*?)"')); pm.globals.set("csrf_token",result[1]);
運行第一個接口,點右上角眼睛,最下面顯示cookie信息
第二個接口使用設(shè)置的全局變量
點擊cookies,刪除全部cookie,第二個接口會訪問失敗
12 加密和解密
13 Newman(新男人)
newman專用于接口測試,為postman而生,可以讓posman的腳本用過命令行的方式執(zhí)行
運行命令:newman run
常用參數(shù);
-e 引用環(huán)境變量
-g 引用全局變量
-d 引用數(shù)據(jù)文件
-n 指定測試用例迭代次數(shù)
-r cli,html,json,junit --reporter-html-export 指定生成html報告。
示例:
1 導(dǎo)出項目接口,環(huán)境,全局變量,數(shù)據(jù)文件(標(biāo)題9的csv和josn格式數(shù)據(jù)文件),把這些文件放在一個空白文件夾里。
接口
環(huán)境
全局變量
數(shù)據(jù)文件
2 文件地址欄cmd
3 輸入執(zhí)行代碼
newman run 接口文件.json -e 環(huán)境變量文件.json -g 全局變量.json -d 數(shù)據(jù)文件.json -r cli,json,unit --reporter-html-export report.html
--------------------------------------
-r cli,json,unit --reporter-html-export report.html 為固定格式 輸出report.html 這個文件
在文件存放的文件夾里,有輸出的html文件。