1. 程式人生 > 實用技巧 >postman第7講-核心功能六:Tests(斷言)

postman第7講-核心功能六:Tests(斷言)

我們檢驗一個測試點是否通過,一般會將我們心理預期的結果與實際結果進行比對,如果結果一致則證明測試通過,如果結果不一致,則證明測試不通過,這即是我們經常所說的斷言。

在 postman 中封裝了我們常見的斷言(Tests),當然 Tests 除了可以作為斷言,還可以當做後置處理器,經常應用於:

【1】獲取當前介面的響應,傳遞給下一個介面
【2】控制多個介面間的執行順序。

1.postman 中封裝的常見斷言

其中以下 8 種與預置指令碼中的一致,這些嚴格意義上並不是斷言而是輔助進行引數化的,與預置指令碼相比唯一的不同在於生效時間,預置指令碼在請求前生效,斷言在請求後生效。

pm.environment.get("variable_key");
pm.globals.get("variable_key");
pm.variables.get("variable_key");
pm.environment.set("variable_key", "variable_value");
pm.environment.unset("variable_key");
pm.environment.unset("variable_key");
pm.globals.unset("variable_key");
pm.sendRequest("https://postman-echo.com/get", function (err, response) {
    console.log(response.json());
});
 

除去上面 8 種斷言外,其他斷言的含義如下:

【1】校驗介面響應的狀態碼,常見的有 200、404、500當然也包括前面鑑權學到的 401 等等。

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

【2】檢查響應資訊中是否包含某些指定的字串;

pm.test("Body matches string", function () {
    pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});

【3】檢查從JSON響應中獲取到某個欄位,判斷其是否與預期欄位一致;

pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.value).to.eql(100);
});

【4】檢查實際獲取的響應體(即 Body 資訊)與預期結果的響應體是否一致;

pm.test("Body is correct", function () {
    pm.response.to.have.body("response_body_string");
});

【5】檢查響應中的頭域資訊(Headers)是否與預期一致;

pm.test("Content-Type is present", function () {
    pm.response.to.have.header("Content-Type");
});

【6】判斷實際響應時間是否與低於預期時間

pm.test("Response time is less than 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});

【7】檢查響應碼是否與預期集合中的某個值一致

pm.test("Successful POST request", function () {
    pm.expect(pm.response.code).to.be.oneOf([201,202]);
});

【8】檢查響應資訊中是否包含某個預期值

pm.test("Status code name has string", function () {
    pm.response.to.have.status("Created");
});

【9】轉化XML格式的響應成JSON物件

var jsonObject = xml2Json(responseBody);

2.postman 中斷言使用示例

我們針對如上介面的請求和響應設計用例如下:

//檢驗響應狀態碼為200
pm.test("檢驗響應狀態碼為200", function () {
    pm.response.to.have.status(200);
});
//檢驗響應中包含字串 "postman-echo.com"
pm.test("檢驗響應中包含字串 postman-echo.com", function () {
    pm.expect(pm.response.text()).to.include("postman-echo.com");
});
//檢驗 key = age 的value 值等於 18
pm.test("檢驗 key = age 的value 值等於 18", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.args.age).to.eql("18");
});

此時傳送請求檢視斷言結果:

可見此時測試點全部通過。

需要注意的點:postman 獲取斷言時,任何響應都必須轉為 JsonData 物件。例如 我們想獲取如下響應資訊中鍵值為 name 的值:

{
  "reponse": {
    "person": {
      "name": "hai",
      "age": 18
    }
  }
}

此時我們這樣做:

//第一步將響應轉為 jsonData 物件
jsonData = pm.response.json();
//第二步通過 . 獲取到我們想要的 age 的值
var age = jsonData.reponse.person.age;

由此我們可以任意獲取響應中的欄位,進而在設定成相應的環境變數,當然就可以作為引數傳遞給任意介面了,這就是介面間引數傳遞的原理所在;