Postman 的前后置腳本中是完全支持 JavaScript 編寫代碼,JavaScript 有很多內置的對象和方法,可以幫助我們完成各種任務,比如生成隨機數和測試響應數據。
使用Math.random()方法來生成一個 0 到 1 之間的隨機小數,比如:
Math.random() // 0.0-1.0之間的數字,小數 0.465413246541
生成一個指定范圍內的隨機數:
Math.random()*10 // 0.0-10.0之間的數字,小數 9.465413246541
生成一個整數,可以使用Math.floor()、Math.ceil()或者Math.round()方法來對小數進行取整:
Math.floor(Math.random()*10) // 直接舍棄小數部分 0,1,2,3,4,5,6,7,8,9Math.floor(9.232323123313213)=9 // 直接舍棄小數部分 9Math.ceil(Math.random()*10) // 進1法,整數部分加1, 1,2,3,4,5,6,7,8,9,10Math.ceil(9.232323233231121)=10 // 進1法,整數部分加1, 10Math.round(Math.random()*10) // 四舍五入法,最接近的整數 0,1,2,3,4,5,6,7,8,9,10Math.round(9.232323233231121)=9 // 四舍五入法,最接近的整數 9
生成一個用戶名,規定格式為 kira001,kira002,jkira003。
var num="";// 循環生成3位數for(var i=0;i<3;i++){ num +=Math.floor(Math.random()*10);}// 拼接用戶名var username = "kira" + num;// 打印用戶名console.log(username) // kira456
生成一個電話號碼,規定前三位為 135,138,156,181,199。
// 定義前三位列表var list=["135","138","156","181","199"];// 隨機獲取一個下標var index= Math.floor(Math.random()*list.length)// 獲取前三位var pre_phone3=list[index];// 定義后八位為空字符串var back_phone8 ="";// 循環生成后八位數字for(var i=0;i<8;i++){ back_phone8 +=Math.floor(Math.random()*10);}// 拼接電話號碼var phonenum = pre_phone3+back_phone8;// 打印電話號碼console.log(phonenum) // 15612345678// 設置為臨時變量,請求直接{{phonenum}}調用pm.variables.set('phonenum',phonenum);
接口測試的時候,我們需要對請求數據或者響應數據進行一些邏輯處理和斷言,以確保數據的正確性和完整性。
pm 對象是一個全局對象,它提供了一些屬性和方法來訪問請求和響應的信息。
console.log(pm.response.code) // 提取狀態碼 200console.log(pm.response.reason()) // 提取響應信息 OKconsole.log(pm.response.headers) // 提取響應頭console.log(pm.response.responseTime) // 提取響應時間console.log(pm.response.text()) // 提取響應體,不管body是什么格式的,都可以采用這個函數來提取console.log(pm.response.json()) // 提取json格式的響應數據,并轉化為json對象(即python字典)
responseCode、responseTime 等對象是一些全局對象,它們也可以用來訪問請求和響應的信息。
var code=responseCode.code; // 獲取響應中的狀態碼200var codename=responseCode.name; // 提取響應信息 OKvar time=responseTime; // 提取響應時間var headers=postman.getResponseHeader('Content-Type'); // 提取響應頭中的Content-Typevar cookies=postman.getResponseCookie('name').value; // 獲取響應cookies中的value值,括號中填寫cookies的name值var body=getResponseBody; // 獲取響應正文(是字符串,如果是json格式,那就是json字符串)var jsonData= JSON.parse(body) // 將json字符串轉化為json對象(字典)
pm.test()是一個全局函數,用來定義一個測試用例,接受一個回調函數作為參數。
狀態碼是指服務器對請求的處理結果的一種表示,如: 200 表示成功,404 表示未找到,500 表示服務器錯誤等等。
(1) 方法 1:pm.response.to.have.status()
pm.response.to.have.status()用來判斷響應的狀態碼。
pm.test("Status code is 200", function () { pm.response.to.have.status(200);});
(2) 方法 2:pm.expect()
pm.expect()是一個全局函數,用來創建一個期望值,并接受一個實際值作為參數。`pm.expect()還提供了一些鏈式方法,可以用來進行各種斷言。
var code=pm.response.code;pm.test("鏈式斷言簡單示例",function(){ pm.expect(code).to.equal(200); pm.expect({a: 1}).to.deep.equal({a: 1}); pm.expect({a: {b: ['x', 'y']}}).to.have.nested.property('a.b[1]'); pm.expect({'.a': {'[b]': 'x'}}).to.nested.include({'//.a.//[b//]': 'x'}); pm.expect({a: 1}).to.have.own.property('a'); pm.expect({a: 1, b: 2}).to.not.have.any.keys('c', 'd'); pm.expect({a: 1, b: 2}).to.have.all.keys('a', 'b'); pm.expect([]).to.be.an('array').that.is.empty;});
pm.expect()有非常多的鏈式方法,具體參考鏈接:https://www.chaijs.com/api/bdd/
(3) 方法 3:if 語句和 tests 對象
tests 是一個全局對象,用來存儲測試結果,接受一個布爾值作為參數。
var code =pm.response.code;if(code==200){ tests['狀態碼一致!']=true;}else{ tests['狀態碼不一致']=false;}
(4) 方法 4:tests 對象和比較運算符
比較運算符是一種運算符,用來比較兩個值的大小或相等性,并返回一個布爾值。
tests['狀態碼的檢驗']=pm.response.code===200;
響應體是指服務器返回給客戶端的數據,它可以是文本、圖片、音頻、視頻等等。
(1) 方法 1:pm.expect()
全量匹配或者部分匹配:
pm.test("全量匹配或者部分匹配", function () { var body =pm.response.text(); pm.expect(body).to.equal('{"status":2,"msg":"請求成功"}');// 全量匹配 pm.expect(body).to.include('請求成功');// 部分匹配});
響應的具體內容不固定,但它的格式和結構固定,則可以結構匹配或者鍵值匹配:
pm.test("響應結構匹配", function () { var jsonData = pm.response.json(); // 結構匹配 pm.expect(jsonData).to.eql({ "errcode": 0, "data": { "user_id": 1 } }); // 鍵值匹配 pm.expect(jsonData.status).to.equal(2); pm.expect(jsonData.msg).to.equal("請求成功");});
(2) 方法 2:pm.response.to.have.jsonBody()
pm.test("Body is json", function () { //檢查響應體是否為 json 格式。 pm.response.to.have.jsonBody(); //檢查響應體中是否存在某個鍵或者某個值。 pm.response.to.have.jsonBody('status');// 檢查鍵是否存在 pm.response.to.have.jsonBody(2);// 檢查值是否存在});
(3) 方法 3:pm.response.to.have.jsonSchema()
檢查響應體是否符合某個 json 模式(schema),包含兩個必需的屬性 errcode(數字) 和 errmsg(字符串)。
pm.test("Body matches schema", function () { var schema = { "type": "object", // 對象 "properties": { "errcode": { "type": "number" // 數字類型 }, "errmsg": { "type": "string" // 字符串類型 } }, "required": ["errcode", "errmsg"] // 必須}; pm.response.to.have.jsonSchema(schema);});
(1) 場景 1:響應體 json 格式的數量比較大,不能全量匹配整個 json 格式,如何斷言?
只檢查響應體中的一些關鍵的鍵或者值
(2) 場景 2:返回的 json 格式的數據是變化的,如何斷言?
這種情況下,使用 json 模式來檢查響應體的結構和約束,而不是具體的內容。
(3) 場景 3:如果返回的 json 格式的 Body 數據是動態變化的怎么辦?
本文鏈接:http://www.tebozhan.com/showinfo-26-13334-0.htmlPostman 腳本的奧秘:JavaScript 的內置對象和方法
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 在 IDEA 中的各種調試技巧,輕松定位 Bug(超級全面)
下一篇: 性能工程實踐