Postman:測試腳本

測試腳本

Postman工具藉助測試腳本來幫助用戶自動判斷接口請求響應是否正確,相當於LoadRunner工具中的檢查點或JMeter中的斷言

 

Tests基礎知識

如果將預請求腳本看成是接口的前提條件,那麼測試腳本就是"預期結果",藉助Tests能實現接口響應的自動檢驗。同樣,用戶可以使用JavaScript語言爲每個請求編寫和運行測試腳本

注:
1、在Tests腳本編輯區旁邊Postman同樣提供了常用的代碼片段:通過點擊腳本名字來向編輯區域添加對應的代碼

2、理論上來說,用戶可以爲某個請求添加任意多個測試腳本,這取決於想要的測試點

3、Postman每次發送請求時都要執行測試。結果顯示在"Response"下的"Test Results"選項卡中
         ⑴選項卡標題顯示執行和通過測試的數量,並在選項卡中列出了詳細的測試結果。如果測試結果爲真,則顯示PASS,反正則顯示FAIL

 

運行腳本要求

1、測試腳本在發送請求,並從服務器收到響應之後纔開始執行

2、pre-request腳本,是在對API進行請求之前的腳本,一般用於動態生成參數、JSON數據包、鏈接地址等

3、test腳本,其實更應該叫post-request,實在完成API訪問並得到其response迴應之後運行的腳本,一般用於獲取response的內容,用於之後對於別的資源的請求,如獲取頁面標題和內容等

4、需要注意:pre-request腳本,在裏面直接寫代碼就可以了;但是test腳本需要在指定的函數pm.test(...)中執行纔會被識別,且作爲test腳本運行(這裏感覺就跟在腳本中發送請求差不多了,請求和處理函數要在sendRequest函數中使用)

例:

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

注:
1、pm.test()中第一個參數是測試描述(會在測試結果欄顯示,應和其它測試描述做以區分),第二個參數是一個函數,具體執行代碼都在這個函數中運行

2、pm對象是Postman的主要對象,所有的內置函數,數據調用等,都需要通過它來實現

 

 

操作變量、發送請求

在測試腳本中與變量操作的方法主要有如下幾個方法:在測試腳本中操作變量與在預請求腳本中操作變量的方法一致

函數名 描述
pm.globals.set("variable_key", "variable_value");  設置全局變量
pm.environment.set("variable_key", "variable_value"); 設置環境變量
pm.globals.get("variable_key"); 獲取全局變量(的值)
pm.environment.get("variable_key"); 獲取環境變量(的值)
pm.variables.get("variable_key");  獲取變量(的值)
pm.globals.unset("variable_key"); 清除全局變量
pm.environment.unset("variable_key"); 清除環境變量

pm.sendRequest("URL", function (err, response) {

      console.log(response.json());
});

發送一個請求(GET請求)

注:
上面8個方法的使用方法和在Pre-request script中的使用方法一致,這裏就不介紹了

 

 

檢查響應體中是否包含一個字符串

1、Response body:Contains string

2、作用:檢查響應體中是否包含一個字符串

語法:

pm.test("測試描述", function () {
    pm.expect(pm.response.text()).to.include("需要測試的字符串");
});

//pm.response.text()返回的是字符串類型的
//pm.response.json()返回的是json類型的

例:檢查響應體中是否包含一個字符串

注:感覺代碼意思爲
1、斷言函數:expect()

2、返回響應體:pm.response.text(),這裏是以字符串形式返回,也可以pm.response.json()以json格式返回

 

 

檢查響應體是否等於一個字符串

1、Response body:Is equal to a string

2、作用:用於檢查響應體是否等於一個字符串(這裏要求響應體必須等於被測試的整個某個字符串,而不是說響應體包含字符串的一部分)

語法:

pm.test("測試描述", function () {
    pm.response.to.have.body("需要測試的字符串");
});

 

 

檢查響應體的鍵的值

1、Response body:JSON value check

2、作用:檢查指定鍵的值是否與預期一致

語法:

pm.test("測試描述", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.需要測試的鍵).to.eql(測試的鍵預期的結果);
});

例:
步驟1:先查看正確的響應

注:從上圖可以看出
1、需要被測試的鍵"test"是最外層鍵"args"的值,因此需要先將"test"鍵提取出來再進行判斷(不處理的話postman斷言會失敗)

2、需要被測試的鍵"url"直接位於最外層,所以不需要進行處理


步驟2:構建腳本

 

 

檢查請求頭中的鍵

1、Response headers:Content-Type header check

2、作用:檢查請求頭中某個鍵是否與預期結果一致

語法:

pm.test("測試描述", function () {
    pm.response.to.have.header("需要測試的請求頭的鍵");
});

注:
此方法只能測試請求頭的鍵,不能測試鍵的值

例:

 

 

檢查響應時間

1、Response time is less than 200ms

2、作用:用於檢查請求的響應時間是否小於指定時間,單位爲ms

語法:

pm.test("測試描述", function () {
    pm.expect(pm.response.responseTime).to.be.below(時間);
});

例:

 

 

檢查響應狀態碼

1、Status code:code is 200

2、作用:檢查響應的狀態碼是否爲預期

語法:

pm.test("測試描述", function () {
    pm.response.to.have.status(狀態碼);
});

例:

 

 

檢查響應狀態碼中的字符串

1、Status code:code name has string

2、作用爲:檢查響應狀態碼中是否存在某個指定的字符串

語法:

pm.test("測試描述", function () {
    pm.response.to.have.status("需要檢查的字符串");
});

例:

 

 

檢查響應狀態碼是否爲指定狀態碼中的一個

1、Status code:Successful POST request

2、作用:用於檢查響應狀態碼是否爲指定狀態碼中的一個

語法:

pm.test("測試描述", function () {
    pm.expect(pm.response.code).to.be.oneOf([需要測試的狀態碼列表]);
});

例:

 

 

使用輕量級驗證器

1、Use Tiny Validator for JSON data

2、參數:可以修改items裏面的鍵值對來對應驗證json的參數

語法:

var schema = {
  "items": {
    "type": "boolean"
  }
};

var data1 = [true, false];
var data2 = [true, 123];

pm.test('Schema is valid', function() {
  pm.expect(tv4.validate(data1, schema)).to.be.true;
  pm.expect(tv4.validate(data2, schema)).to.be.true;
});

 

 

將XML轉爲JSON格式

1、Response body:Convert XML body to a JSON Object

2、作用:假如響應體是XML格式,將其轉換成JSON對象,再對其進行操作

語法:

var jsonObject = xml2Json(responseBody);

參數:(默認不需要設置參數,爲接口的response)需要轉換的xml

 

 

測試結果備註

1、返回值就不是簡單的return語句可以,必須要通過Postman自帶的對象或方法纔可以,一般是通過pm.expect()或tests[ ]這兩個地方返回測試結果

2、這些方法名看起來都很容易理解,一般都會叫pm.expect()或.to.be()或.to.have()這樣的,字面意思就是期待什麼或要求它必須是什麼或必須有什麼,才能通過測試。

3、另外,同樣的測試結果,實際上還有更簡單的寫法,即不通過pm對象,而是內置tests對象,常用操作如下:

# 響應時間必須少於200毫秒
tests["Response time is less than 200ms"] = responseTime < 200;

# 判斷返回代碼是否等於某一個指定的代碼
tests["Status code name has string"] = responseCode.name.has("Created");

看這個用法,猜測tests是一個JSON格式的對象,tests[...]括號內的字符串是測試的描述, =後面是判斷語句,然後將True或False賦予爲tests[..]的值,然後postman輪訓所有tests對象裏的參數,並返回pass與否的結果


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章