柚子快報(bào)激活碼778899分享:Postman
柚子快報(bào)激活碼778899分享:Postman
一、接口測(cè)試就是測(cè)試系統(tǒng)組件接口之間的一種測(cè)試。
分類: 測(cè)試外部接口:測(cè)試被測(cè)系統(tǒng)和外部系統(tǒng)之間的接口。(只需要測(cè)試正例即可) 測(cè)試內(nèi)部接口: 1.內(nèi)部接口只提供給內(nèi)部系統(tǒng)使用。(預(yù)算系統(tǒng)、承保系統(tǒng),也只需要測(cè)試正例即可) 2.內(nèi)部接口提供給外部系統(tǒng)使用(測(cè)試必須非常全面,正例,各種異常場(chǎng)景,權(quán)限控制)
二、接口測(cè)試的流程及用例的設(shè)計(jì)
1.拿到接口api文檔(通過抓包工具獲?。煜そ涌跇I(yè)務(wù)、接口地址、鑒權(quán)方式、入?yún)?、出參、錯(cuò)誤碼的設(shè)置 2.編寫接口的用例及評(píng)審 思路: 正例 :輸入正常的入?yún)?,接口能夠成功返回?cái)?shù)據(jù) 反例 :鑒權(quán)反例——鑒權(quán)碼為空,鑒權(quán)碼錯(cuò)誤,鑒權(quán)碼過期,… 參數(shù)反例——參數(shù)為空,參數(shù)類型異常、參數(shù)長(zhǎng)度異?!?錯(cuò)誤碼覆蓋——根據(jù)業(yè)務(wù)來定的 其他錯(cuò)誤場(chǎng)景——接口黑名單、接口調(diào)用次數(shù)的限制、分頁場(chǎng)景 3.使用接口測(cè)試工具postman執(zhí)行接口測(cè)試 4.postman+newman+Jenkins實(shí)現(xiàn)持續(xù)集成,并且輸出測(cè)試報(bào)告并發(fā)送郵件
三、執(zhí)行接口測(cè)試
請(qǐng)求頁面: Params : get 請(qǐng)求傳參 authorization : 鑒權(quán) hearders : 請(qǐng)求頭 Body : post請(qǐng)求傳參 form-data : 既可以傳鍵值對(duì)參數(shù)也可以傳文件 x-www-from-urlencoded 只能傳鍵值對(duì)參數(shù) raw : json \ text \ xml \ html \ javascript binary : 把文件以二進(jìn)制方式傳參 pre-request-script 請(qǐng)求之前的腳本 tests 請(qǐng)求之后的斷言 cookies 用于管理cookie信息 響應(yīng)頁簽: Body 接口返回的數(shù)據(jù) … 四、接口關(guān)聯(lián) 增刪改查注意接口的閉環(huán),新增數(shù)據(jù)需要進(jìn)行清理
1.使用json提取器實(shí)現(xiàn)接口關(guān)聯(lián)
{
"data": {
"dayList": [
{
"label": "01月07日",
"value": "2024-01-07"
}
],
"weekList": [
{
"label": "01月01日-01月07日",
"value": "2024-01-01"
}
],
"monthList": [
{
"label": "12月",
"value": "2023-12-01"
}
]
},
"code": 2000,
"msg": null
}
第一個(gè)接口: //使用json提取器提取value //打印返回值 console.log(responseBody); //把返回的字符串格式的數(shù)據(jù)轉(zhuǎn)換成對(duì)象的形式 //定義一個(gè)變量進(jìn)行接收 把結(jié)果轉(zhuǎn)換成一個(gè)對(duì)象后保存在result這個(gè)變量里來 //JavaScript 中的 JSON.parse() 方法用于解析一個(gè) JSON 字符串,并將其轉(zhuǎn)換為 JavaScript 對(duì)象。 var result = JSON.parse(responseBody); console.log(result.data.dayList[0].value); //注意:要把提取出來的值放在一個(gè)變量里面去 day = result.data.dayList[0].value //再把取得的這個(gè)值設(shè)置為全局變量 pm.globals.set(“day”, day); 第二個(gè)接口: 引用變量使用雙大括號(hào) {{day}}
2.使用正則表達(dá)式提取器來實(shí)現(xiàn)接口關(guān)聯(lián)
同上例子:
// //使用正則表達(dá)式提取實(shí)現(xiàn)接口關(guān)聯(lián),match匹配
// var result= responseBody.match(new RegExp('"value":"(.*?)"','g'));
// console.log(result);
// // 定義正則表達(dá)式模式
// var regexPattern = /\d{4}-\d{2}-\d{2}/g;
// // 定義存儲(chǔ)提取值的數(shù)組
// var values = [];
// // 提取匹配的日期
// result.forEach(function(item) {
// var match = item.match(regexPattern);
// if (match) {
// values.push(match[0]);
// }
// });
// // 打印提取的日期
// console.log(values);
// //賦值day提取第一個(gè)值
// var day = values[0]
// console.log(day);
-------------------------------------------------------------------------------------
// 解析響應(yīng)體
var jsonData = JSON.parse(pm.response.text());
// 定義正則表達(dá)式模式
var regexPattern = /"value":\s*"(.*?)"/g;
// 定義存儲(chǔ)提取值的數(shù)組
var values = [];
// 提取"value"字段的值
var match;
while ((match = regexPattern.exec(pm.response.text())) !== null) {
values.push(match[1]);
}
// 獲取第一個(gè)值
var firstValue = values[0];
// 打印第一個(gè)值
console.log("First value: " + firstValue);
// 設(shè)置全局變量
pm.globals.set("firstValue", firstValue);
//結(jié)果:First value: 2024-01-07
注意:
問題1:/“value”:\s*"(.?)"/g 中的 \s是什么意思呢?
在正則表達(dá)式中,\s表示匹配任何空白字符,包括空格、制表符、換行符等。\s表示匹配零個(gè)或多個(gè)連續(xù)的空白字符。 在上述示例中,“value”:\s"(.?)“是一個(gè)正則表達(dá)式模式,用于匹配類似于"value”: “some value"這樣的文本。具體匹配規(guī)則如下: ● “value”::匹配字面字符串"value”:。 ● \s:匹配零個(gè)或多個(gè)空白字符。 ● “:匹配字面字符串”。 ● (.?):使用非貪婪模式匹配任意字符序列,并將其捕獲到匹配結(jié)果中。 ● “:匹配字面字符串”。 這個(gè)正則表達(dá)式模式的目的是提取出雙引號(hào)引起來的"value"字段的值。通過使用\s可以忽略字段名和字段值之間的任何空白字符。捕獲分組(.*?)用于提取實(shí)際的字段值,并將其添加到values數(shù)組中。 請(qǐng)注意,正則表達(dá)式中的\是一個(gè)轉(zhuǎn)義字符,用于表示特殊字符,例如\s表示空白字符。因此在正則表達(dá)式中,我們需要使用\s來表示一個(gè)普通的反斜杠字符。
問題2:regexPattern.exec() 這是什么方法?
regexPattern.exec()是JavaScript正則表達(dá)式對(duì)象的一個(gè)方法,用于在字符串中執(zhí)行正則表達(dá)式匹配。它搜索字符串中的匹配項(xiàng),并返回一個(gè)數(shù)組,其中包含匹配的結(jié)果。 在上述示例中,regexPattern是一個(gè)正則表達(dá)式對(duì)象,用于匹配"value":\s*"(.*?)"這樣的模式。exec()方法在字符串pm.response.text()中執(zhí)行正則表達(dá)式匹配,并返回匹配的結(jié)果。 如果匹配成功,則exec()方法返回一個(gè)數(shù)組,其中第一個(gè)元素是匹配的完整文本,后續(xù)元素是捕獲分組的匹配結(jié)果。如果沒有匹配的項(xiàng),則返回null。 在示例代碼中,我們使用while循環(huán)來反復(fù)調(diào)用regexPattern.exec()方法,直到?jīng)]有更多的匹配項(xiàng)為止。每次調(diào)用exec()方法,都會(huì)將下一個(gè)匹配項(xiàng)返回給match變量,并將其添加到values數(shù)組中。 請(qǐng)注意,exec()方法在每次調(diào)用時(shí)都會(huì)更新正則表達(dá)式對(duì)象的內(nèi)部狀態(tài),以便在下一次調(diào)用時(shí)繼續(xù)搜索。這樣可以實(shí)現(xiàn)迭代地獲取所有匹配項(xiàng)。
五、POSTMAN內(nèi)置動(dòng)態(tài)參數(shù)以及自定義的動(dòng)態(tài)參數(shù)
postman內(nèi)置動(dòng)態(tài)參數(shù):
{{$}} 指postman的內(nèi)置動(dòng)態(tài)參數(shù)
{{$timestamp}}生成當(dāng)前時(shí)間的時(shí)間戳
{{$randomint}}生成0-1000之間的隨機(jī)數(shù)
{{$guid}} 生成速記GUID字符串 (隨機(jī)生成字符串)
自定義動(dòng)態(tài)參數(shù) —— 自定義的動(dòng)態(tài)參數(shù)是可以進(jìn)行斷言的
var times = Date.now();//手動(dòng)的獲取時(shí)間戳
pm.globals.set("times",times);//設(shè)置為全局變量
使用時(shí)使用{{times}}
六、postman的斷言
status code :code is 200 —— 檢查返回的狀態(tài)碼是否為200 response body : contains string —— 檢查響應(yīng)中包括指定字符串 response body : json value check —— 檢查響應(yīng)中其中json的值 response body : is equal to a string —— 檢查相應(yīng)等于一個(gè)字符串 … 狀態(tài)斷言&業(yè)務(wù)斷言 狀態(tài)斷言:
pm.test("Status code is 200 檢查返回的狀態(tài)碼是否為200 ", function () {
pm.response.to.have.status(200);
});
業(yè)務(wù)斷言:
pm.test("Body matches string 檢查響應(yīng)中包含dayList", function () {
pm.expect(pm.response.text()).to.include("dayList");
});
示例: 響應(yīng)數(shù)據(jù)1:
{"tag": {
"id":4858,
"name":"好好學(xué)習(xí)123456789"
}
}
備注:其中123456789 是自定義動(dòng)態(tài)參數(shù) 【自定義動(dòng)態(tài)參數(shù) —— 自定義的動(dòng)態(tài)參數(shù)是可以進(jìn)行斷言的 var times = Date.now();//手動(dòng)的獲取時(shí)間戳 pm.globals.set(“times”,times);//設(shè)置為全局變量 使用時(shí)使用{{times}}】
pm.test("檢查響應(yīng)中的包括標(biāo)簽名", function () {
//方式一:
pm.expect(pm.response.text()).to.include("好好學(xué)習(xí)"+ pm.globals.get("times"));
});
//方式二:
pm.expect(pm.response.text()).to.include("好好學(xué)習(xí)"+ globals["times"]);
});
//方式三:
pm.expect(pm.response.text()).to.include("好好學(xué)習(xí)"+ globals.times);
});
響應(yīng)數(shù)據(jù)2:
{
"errcode":0,
"errmsg":"ok"
}
舉例說明 — response body : json value check —— 檢查響應(yīng)中其中json的值
pm.test("檢查errcode為0",function(){
var jsonData = pm.response.json();
pm.expect(jsonData.errcode).to.eql(0);
});
七、postman批量運(yùn)行測(cè)試用例
run collection 文件上傳:如下圖
八、postman數(shù)據(jù)驅(qū)動(dòng)之csv文件和json文件的處理
正例和反例 data.csv —— 用notepad++打開
備注:下圖糾正:search 同理 data.json文件 由列表+大括號(hào)構(gòu)建的數(shù)據(jù)格式
九、測(cè)試必須帶請(qǐng)求頭的接口
常見的請(qǐng)求頭: Host 請(qǐng)求的主機(jī)地址 Connection 連接方式 Accept 客戶端所接受的數(shù)據(jù)格式 X-Requested-With 異步請(qǐng)求 User-Agent 客戶端的用戶類型 Referer 來源 Cookie cookie信息 Content-Type 請(qǐng)求內(nèi)容的格式
十、postman接口mock service服務(wù)器
mock模擬 后端接口還沒有開發(fā)完成,前端的業(yè)務(wù)需要調(diào)用后端的接口。 {“error_code”:0,“msg”:“返回成功”,“data”:[]} https://6aa80496-4097-4a5d-908f-e6faff160391.mock.pstmn.io
十一、postman的cookie鑒權(quán)
什么是cookie? cookie是一小段文本,格式 key=value cookie鑒權(quán)的原理: 1.當(dāng)客戶端第一次訪問服務(wù)器的時(shí)候,那么服務(wù)器就會(huì)生成cookie信息,并且在響應(yīng)頭的set-cookie里面把生成的cookie信息發(fā)送給客戶端。 2.當(dāng)客戶端第二次-N次訪問服務(wù)器時(shí),那么客戶端就會(huì)在請(qǐng)求頭的cookie帶上cookie信息,從而實(shí)現(xiàn)鑒權(quán)。 cookie的分類: 會(huì)話cookie:保存在內(nèi)存,當(dāng)瀏覽器關(guān)閉后就會(huì)自動(dòng)化清除cookie 持久cookie:保存在硬盤里,當(dāng)瀏覽器關(guān)閉后不會(huì)清除,只有當(dāng)失效時(shí)間到了才會(huì)自動(dòng)清除 當(dāng)?shù)谝淮卧L問頁面時(shí),postman會(huì)自動(dòng)保存cookie,第二次去請(qǐng)求時(shí),則會(huì)自動(dòng)帶上cookie信息 正則表達(dá)獲取token:如下圖
十二、Newman
postman 專為接口測(cè)試而生,Newman是專為postman而生。Newman可以讓我們的postman的腳本通過非GUI(命令行)的方式去運(yùn)行。即可和Jenkins去集成 運(yùn)行命令:newman run 常用參數(shù):-e 應(yīng)用環(huán)境變量 -g 引用全局變量 -d 引用數(shù)據(jù)文件 -n 指定測(cè)試用例迭代的次數(shù) -r cli,html.json.junit --reporter-html-export 指定生成HTML的報(bào)告 新建一文件,將postman里的testcase、environment、global、data 等導(dǎo)出到該文件處,在該路徑下,cmd,運(yùn)行newman run eg: E:\postmam>newman run testcase.json -e environment.json -g globals.json -d data.json -r cli,html.json.junit --reporter-html-export report.html 注意:Newman的安裝 詳見:https://blog.csdn.net/zaxuezhe/article/details/123401627 安裝報(bào)告器:使用 npm 安裝正確的報(bào)告器 npm install -g newman-reporter-html newman run collection.json -r html -r html 指定了使用 html 報(bào)告器(對(duì)應(yīng)于 newman-reporter-html 包)。如果你想要將報(bào)告輸出到文件,可以使用 --reporter-{{reporter-name}}-export 參數(shù) 生成一個(gè)名為 report.html 的 HTML 報(bào)告文件 newman run collection.json -r html --reporter-html-export report.html
十三、Postman+Newman+Jenkins實(shí)現(xiàn)接口測(cè)試持續(xù)集成
1.新建一個(gè)項(xiàng)目 2.設(shè)置自定義工作空間 3.構(gòu)建執(zhí)行Windows的批處理命令 Execute Windows batch command 4.執(zhí)行系統(tǒng)的Groovy腳本 Execute system Groovy script 5.生成的HTML的報(bào)告集成到Jenkins
柚子快報(bào)激活碼778899分享:Postman
參考閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。