測試腳本
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與否的結果