1. 摘要
本文講解使用postman做接口測試和批量接口測試的方法。Postman的入門參考《【知識】1.Postman接口測試神器從安裝到精通》
2.實踐内容
2.1 環境變量和全局變量的設定:
a. 環境變量的設定方法如下圖。點選設定一個環境變量,名為"user_pwd", 裡面設定username 和passwd的值,然後在請求中應用這個環境變量"user_pwd"即可。
環境變量可以使用在以下地方:
- URL
- URL params
- Header values
- form-data/url-encoded values
- Raw body content
- Helper fields
注意:在你要使用的變量名上附上雙花括号,一個請求隻能應用一個環境變量。
下圖"username?imageView2/2/w/1620" 和"passwd" 的value值應用了環境變量"user_pwd",是以在body 中,隻需在key對應的value那寫上變量{{username}}, {{passwd}}。
注意:一個項目需要測試好幾個環境的情況,就可以對不同的環境設定一個環境變量,比如對“test environment”設定一個環境變量,對“stage environment”設定一個環境變量,對“production 環境”設定一個環境變量。
b. 全局變量的設定方法類似,如下圖,點選"Globals" 後就會出現添加環境變量類似的頁面,進行變量和值的設定。
注意:全局變量設定就應用于整個收藏夾(Collection)中的請求,不用像環境變量一樣需要選取。
2.2 用Postman做接口測試的執行個體
接口測試中常用的請求為GET 和POST,以下均以這兩種請求為例。
GET 和POST 的差別:
- GET 使用URL 或Cookie 傳參,而POST将資料放在Body 中。
- GET的URL 在長度上會有限制,而POST沒有。
- POST比GET相對安全,因為在位址欄不可見。
- 一般POST請求用來擷取資料,POST請求用來發送資料。
對于上面的差別,其實第一點POST也可以将資料放在URL裡,GET請求其實也沒有長度限制,POST請求看起來是隐式的,但是可以通過抓包拿到參數。
1. GET 請求:
平常我們拿一個url 通路頁面,就是所謂的get 請求。
例1.(stu_info 接口:擷取名字為xx 的資訊)
将請求方式設為GET, 同時輸入完整的url, 跟通路浏覽器一樣, 或者輸入接口url, 點選"Params" 輸入需要的key 以及value, 點選"Send", 即可在"Response" 中檢視傳回的結果。
注意: get 請求的内容不能放在body裡,并且長度有限制。由于對domain 設定了全局變量,是以,url 中用變量{{domain}} 做了替換,以下的請求中都應用了這個全局變量。
例2. (all_stu 接口:擷取所有使用者的資訊)
除了例1這種GET請求,還有些接口發送GET請求時除了發送key-value, 還要将Headers的資訊也一起發送過去,這樣就可以借助Postman來實作。以下圖為例,需要在Headers 裡添加"Referer"資訊,以擷取所有使用者的資訊。
2. POST請求:
POST 請求不能像GET一樣直接在浏覽器輸入就可以請求,需要借助工具來完成。
使用方法:選擇請求方式為post,輸入請求的url,以及輸入必要的"Authorization" , "header" 和"Body" 資料。post請求可以發送key-value, json格式,file等。
對于"Authorization"的使用,遇到比較多的是Type 為"Basic Auth", 然後設定對應的Username 和Password。
這裡的username, password的值可以通過設定環境變量的方式取得。
a. 用Postman 發送key-value 的請求:
以login 接口為例,在Body 中選取"form-data" 格式,輸入所需的key-value, 選取對應的環境變量。
b. 用Postman 發送json格式的請求:
以add user 接口為例,在Body 中選取"raw" 格式,根據接口文檔輸入json 資料, 有需要應用環境變量的選取環境變量。
c. 用Postman 發送檔案的請求:
以file upload 接口為例,在Body 中選取"form-data" 格式,在key 裡輸入"file",在右邊的下拉裡選取類型為"File",點選"Choose Files" 就可以上傳本地檔案了。
2.3 Pre-requestScript 的使用
對于環境變量和全局變量的使用,除了上面所講的方法外,也可以用Pre-requestScript 方法。
以login接口為例,在"Pre-requestScript"中設定環境變量 "username", "passwd",在Body 中選取"form-data"** 格式,輸入所需的key-value, value即為變量{{username}}, {{passwd}}。
postman. setEnvironmentVariable (“key”, “value”);
postman. setGlobalVariable (“key”, “value”);
getEnvironmentVariable ("key");//擷取key的環境變量
getGlobalVariable(“key”);//擷取key的全局變量
2.4 Tests 的使用
2.4.1. Tests 作為測試用例的應用
Tests 主要用來設計用例,比如要測試傳回結果是否含有某一字元串,就可以用到 Tests。以gold_add 接口為例,來編寫測試用例,分别測試傳回的結果是否含有,如下所示:
響應成功傳回PASS, 失敗傳回FAIL。
常用tests如下:
1.檢查response body中是否包含某個string
tests["Body matches string"] = responseBody.has("string_you_want_to_search");
複制
注意:"Body matches string" 需唯一。
2.檢測JSON中的某個值是否等于預期的值
var data = JSON.parse(responseBody);
tests["Your test name"] = data.value === 100;
複制
JSON.parse()方法,把json字元串轉化為對象。parse()會進行json格式的檢查是一個安全的函數。
如:檢查json中某個數組元素的個數(這裡檢測programs的長度)
var data = JSON.parse(responseBody);
tests["program's lenght"] = data.programs.length === 5;
複制
3.檢查response body是否與某個string相等
4.轉換XML body為JSON對象
var jsonObject = xml2Json(responseBody);`
tests["Body is correct"] = responseBody === "response_body_string";
複制
5.測試response Headers中的某個元素是否存在(如:Content-Type)
tests["Content-Type is present"] = postman.getResponseHeader("Content-Type");
複制
//getResponseHeader()方法會傳回header的值,如果該值存在
或者:
tests["Content-Type is present"] = responseHeaders.hasOwnProperty("Content-Type");
複制
上面的方法,不區分大小寫。下面的方法,要區分大小寫。
6.驗證Status code的值
tests["Status code is 200"] = responseCode.code === 200;
複制
7.驗證Response time是否小于某個值
tests["Response time is less than 200ms"] = responseTime < 200;
複制
8.name是否包含某個值
tests["Status code name has string"] = responseCode.name.has("Created");
複制
9.POST 請求的狀态響應碼是否是某個值
tests["Successful POST request"] = responseCode.code === 201 || responseCode.code === 202;
複制
10.很小的JSON資料驗證器
var schema = {
"items": {
"type": "boolean"
}
};
var data1 = [true, false];
var data2 = [true, 123];
console.log(tv4.error);
tests["Valid Data1"] = tv4.validate(data1, schema);
tests["Valid Data2"] = tv4.validate(data2, schema);
複制
2.4.2. 設定環境變量,建立多個接口間的關聯
以gold_add 接口為例,由于該接口有權限驗證,需要admin使用者才可以做操作,需要添加cookie,是以需要将login 接口關聯起來使用。
在login 請求中, 在"Tests"中加入
var jsonData =JSON.parse(responseBody);//擷取body中傳回的所有參數
postman.setEnvironmentVariable("sign",jsonData.login_info.sign);//把傳回參數中的sign設定為環境變量
這樣sign 就可以作為環境變量,應用于gold_add接口。
在gold_add 接口中,{{username}} 由于在環境變量"user_pwd" 中已經設定,可以直接輸入變量名, {{sign}} 動态取得login接口中 Response 的 "sign" 值,{{sign}}已在上面login 請求的"Tests" 中定義。
2.5 使用Postman Interceptor 發送帶Cookie 的請求
使用Postman 發送Cookie 的請求時,發現無法發送成功, 顯示"Restricted Header (use Postman Interceptor)" 提示。 網上搜了一下,原來是要在Chrome安裝"Postman Interceptor"插件,它可以讓postman中發送請求的時候使用這個網站的浏覽器cookie。
Chrome 安裝完以後如下圖所示有出現一個下圖中的小圖示。
在Postman 使用的時候要将Interceptor 打開,如下圖所示,紅框中的圖示要高亮,這樣發送Cookie 的請求時就不會出現上面提到的提示資訊了。
如果請求成功的話,在"Cookies" 中可以檢視到Cookie 值。
本文轉載自《 postman 做接口測試之學習筆記》