自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Postman 腳本的奧秘:JavaScript 的內(nèi)置對象和方法

開發(fā) 前端
?Postman 的前后置腳本中是完全支持 JavaScript 編寫代碼,JavaScript 有很多內(nèi)置的對象和方法,可以幫助我們完成各種任務(wù),比如生成隨機(jī)數(shù)和測試響應(yīng)數(shù)據(jù)。

Postman 的前后置腳本中是完全支持 JavaScript 編寫代碼,JavaScript 有很多內(nèi)置的對象和方法,可以幫助我們完成各種任務(wù),比如生成隨機(jī)數(shù)和測試響應(yīng)數(shù)據(jù)。

一、生成隨機(jī)數(shù)

使用Math.random()方法來生成一個 0 到 1 之間的隨機(jī)小數(shù),比如:

Math.random() // 0.0-1.0之間的數(shù)字,小數(shù) 0.465413246541

生成一個指定范圍內(nèi)的隨機(jī)數(shù):

Math.random()*10  // 0.0-10.0之間的數(shù)字,小數(shù) 9.465413246541

生成一個整數(shù),可以使用Math.floor()、Math.ceil()或者M(jìn)ath.round()方法來對小數(shù)進(jìn)行取整:

Math.floor(Math.random()*10)  // 直接舍棄小數(shù)部分 0,1,2,3,4,5,6,7,8,9
Math.floor(9.232323123313213)=9 // 直接舍棄小數(shù)部分 9
Math.ceil(Math.random()*10)  // 進(jìn)1法,整數(shù)部分加1, 1,2,3,4,5,6,7,8,9,10
Math.ceil(9.232323233231121)=10 // 進(jìn)1法,整數(shù)部分加1, 10
Math.round(Math.random()*10) // 四舍五入法,最接近的整數(shù) 0,1,2,3,4,5,6,7,8,9,10
Math.round(9.232323233231121)=9 // 四舍五入法,最接近的整數(shù) 9

場景 1:隨機(jī)生成一個用戶名

生成一個用戶名,規(guī)定格式為 kira001,kira002,jkira003。

var num="";
// 循環(huán)生成3位數(shù)
for(var i=0;i<3;i++){
    num +=Math.floor(Math.random()*10);
}
// 拼接用戶名
var username = "kira" + num;
// 打印用戶名
console.log(username) // kira456

場景 2:隨機(jī)生成一個電話號碼

生成一個電話號碼,規(guī)定前三位為 135,138,156,181,199。

// 定義前三位列表
var list=["135","138","156","181","199"];
// 隨機(jī)獲取一個下標(biāo)
var index= Math.floor(Math.random()*list.length)
// 獲取前三位
var pre_phone3=list[index];
// 定義后八位為空字符串
var back_phone8 ="";
// 循環(huán)生成后八位數(shù)字
for(var i=0;i<8;i++){
    back_phone8 +=Math.floor(Math.random()*10);
}
// 拼接電話號碼
var phonenum = pre_phone3+back_phone8;
// 打印電話號碼
console.log(phonenum) // 15612345678
// 設(shè)置為臨時(shí)變量,請求直接{{phonenum}}調(diào)用
pm.variables.set('phonenum',phonenum);

二、請求數(shù)據(jù)或響應(yīng)數(shù)據(jù)處理

接口測試的時(shí)候,我們需要對請求數(shù)據(jù)或者響應(yīng)數(shù)據(jù)進(jìn)行一些邏輯處理和斷言,以確保數(shù)據(jù)的正確性和完整性。

方法 1:pm 對象

pm 對象是一個全局對象,它提供了一些屬性和方法來訪問請求和響應(yīng)的信息。

console.log(pm.response.code)   // 提取狀態(tài)碼 200
console.log(pm.response.reason())  // 提取響應(yīng)信息 OK
console.log(pm.response.headers)  // 提取響應(yīng)頭
console.log(pm.response.responseTime)  // 提取響應(yīng)時(shí)間
console.log(pm.response.text())  // 提取響應(yīng)體,不管body是什么格式的,都可以采用這個函數(shù)來提取
console.log(pm.response.json())  // 提取json格式的響應(yīng)數(shù)據(jù),并轉(zhuǎn)化為json對象(即python字典)

方法 2:responseCode、responseTime 等對象

responseCode、responseTime 等對象是一些全局對象,它們也可以用來訪問請求和響應(yīng)的信息。

var code=responseCode.code;       // 獲取響應(yīng)中的狀態(tài)碼200
var codename=responseCode.name;   // 提取響應(yīng)信息 OK
var time=responseTime;            // 提取響應(yīng)時(shí)間
var headers=postman.getResponseHeader('Content-Type');  // 提取響應(yīng)頭中的Content-Type
var cookies=postman.getResponseCookie('name').value;    // 獲取響應(yīng)cookies中的value值,括號中填寫cookies的name值
var body=getResponseBody;        // 獲取響應(yīng)正文(是字符串,如果是json格式,那就是json字符串)
var jsonData= JSON.parse(body)   // 將json字符串轉(zhuǎn)化為json對象(字典)

三、斷言響應(yīng)信息

pm.test()是一個全局函數(shù),用來定義一個測試用例,接受一個回調(diào)函數(shù)作為參數(shù)。

斷言狀態(tài)碼

狀態(tài)碼是指服務(wù)器對請求的處理結(jié)果的一種表示,如: 200 表示成功,404 表示未找到,500 表示服務(wù)器錯誤等等。

(1) 方法 1:pm.response.to.have.status()

pm.response.to.have.status()用來判斷響應(yīng)的狀態(tài)碼。

pm.test("Status code is 200", function () {
     pm.response.to.have.status(200);
});

(2) 方法 2:pm.expect()

pm.expect()是一個全局函數(shù),用來創(chuàng)建一個期望值,并接受一個實(shí)際值作為參數(shù)。`pm.expect()還提供了一些鏈?zhǔn)椒椒?,可以用來進(jìn)行各種斷言。

var code=pm.response.code;
pm.test("鏈?zhǔn)綌嘌院唵问纠?,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()有非常多的鏈?zhǔn)椒椒?,具體參考鏈接:https://www.chaijs.com/api/bdd/

(3) 方法 3:if 語句和 tests 對象

tests 是一個全局對象,用來存儲測試結(jié)果,接受一個布爾值作為參數(shù)。

var code =pm.response.code;
if(code==200){
    tests['狀態(tài)碼一致!']=true;
}else{
    tests['狀態(tài)碼不一致']=false;
}

(4) 方法 4:tests 對象和比較運(yùn)算符

比較運(yùn)算符是一種運(yùn)算符,用來比較兩個值的大小或相等性,并返回一個布爾值。

tests['狀態(tài)碼的檢驗(yàn)']=pm.response.code===200;

斷言響應(yīng)體

響應(yīng)體是指服務(wù)器返回給客戶端的數(shù)據(jù),它可以是文本、圖片、音頻、視頻等等。

(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('請求成功');// 部分匹配
});

響應(yīng)的具體內(nèi)容不固定,但它的格式和結(jié)構(gòu)固定,則可以結(jié)構(gòu)匹配或者鍵值匹配:

pm.test("響應(yīng)結(jié)構(gòu)匹配", function () {
     var jsonData = pm.response.json();
     // 結(jié)構(gòu)匹配
     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 () {
  //檢查響應(yīng)體是否為 json 格式。
  pm.response.to.have.jsonBody();
  //檢查響應(yīng)體中是否存在某個鍵或者某個值。  
  pm.response.to.have.jsonBody('status');// 檢查鍵是否存在
  pm.response.to.have.jsonBody(2);// 檢查值是否存在
});

(3) 方法 3:pm.response.to.have.jsonSchema()

檢查響應(yīng)體是否符合某個 json 模式(schema),包含兩個必需的屬性 errcode(數(shù)字) 和 errmsg(字符串)。

pm.test("Body matches schema", function () {
  var schema = {
     "type": "object", // 對象
     "properties": {
          "errcode": {
               "type": "number" // 數(shù)字類型
          },
          "errmsg": {
               "type": "string" // 字符串類型
          }
     },
     "required": ["errcode", "errmsg"]  // 必須
};
  pm.response.to.have.jsonSchema(schema);
});

常見特殊場景斷言思路分析

(1) 場景 1:響應(yīng)體 json 格式的數(shù)量比較大,不能全量匹配整個 json 格式,如何斷言?

只檢查響應(yīng)體中的一些關(guān)鍵的鍵或者值

(2) 場景 2:返回的 json 格式的數(shù)據(jù)是變化的,如何斷言?

這種情況下,使用 json 模式來檢查響應(yīng)體的結(jié)構(gòu)和約束,而不是具體的內(nèi)容。

(3) 場景 3:如果返回的 json 格式的 Body 數(shù)據(jù)是動態(tài)變化的怎么辦?

  • 首先檢查是否為 json 格式
  • 可以只檢查 body 中是否存在期望的鍵,主要檢查哪些核心的鍵
  • 可以檢查返回 json 結(jié)構(gòu)是否正確
責(zé)任編輯:趙寧寧 來源: 測試玩家勇哥
相關(guān)推薦

2012-07-25 13:25:11

ibmdw

2021-05-10 08:45:34

JavaScript開發(fā)對象

2011-01-26 10:53:48

JavaScriptWeb

2016-11-07 15:43:38

JavaScript

2013-04-23 10:42:55

JavaScriptthis

2009-06-10 22:07:59

JavaScriptdocument對象window對象

2019-04-23 15:20:26

JavaScript對象前端

2011-06-01 11:37:48

searchmatchjavascript

2018-12-19 19:30:46

JavaScript創(chuàng)建對象前端

2023-11-21 15:23:15

JavaScript工具

2009-07-02 14:27:53

JSP內(nèi)置對象

2013-04-25 09:12:36

2011-07-08 10:25:55

JavaScript

2010-08-17 14:47:49

FirefoxJavascript

2024-04-08 07:58:11

Python數(shù)據(jù)類型字符串

2024-03-27 14:31:57

JVM對象內(nèi)存

2009-03-31 09:18:34

客戶端內(nèi)置對象ASP.NET

2021-04-07 10:12:05

Javascript對象拷貝開發(fā)

2021-05-14 00:00:15

JavaScript開發(fā)代碼

2023-06-02 15:42:51

JavaScript數(shù)據(jù)結(jié)構(gòu)對象
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號