天天看點

基于Postman的API自動化測試

基于Postman的API自動化測試

1. 安裝

兩種安裝方式,我熱衷于以chrome插件形式安裝

Chrome插件

Mac App

2. 發送請求

Postman最基礎的功能就是發送http請求,支援GET/PUT/POST/DELETE,還有很多我不認識的http方法。

通過填寫URL、header、body等就可以發送一個請求,這對于我們平時做一些簡單的測試是夠用的。

如果你的應用需要用到登入驗證,可以通過填寫Authorization以滿足你的需求。

另外也可以使用Chrome浏覽器已經登入的cookie,同步浏覽器的cookie需要安裝另一個插件Interceptor(攔截機)。它可以在你發送請求時幫你将已經存在于浏覽器的資料随header請求,另外它可以将浏覽器的請求寫到postman的曆史中(需要開啟“Request Capture”

)。

3. 集合

每次配置完一個請求都可以儲存到一個集合中,如此一來,下次測試可以直接從集合中找到你要執行的測試。

集合不單單隻有分類和存儲功能,Postman支援一鍵運作整個集合内的測試。

我們可以把一個請求當做一個Test Case, 那麼集合就是一個Test Suite。

每個集合都對應一個URL,可以通過Share按鈕獲得你的集合URL,這個URL可以用于分享給你的隊友,或者用于Newman執行。

Newman是Postman的一個指令行工具,可以讓API測試加入到你的持續內建任務上。

4. 環境變量

當做API測試時,你可能經常需要切換不同的設定。比如,開發環境的API設定、測試環境和産品環境的API設定,你可能需要在不同的測試環境下使用不同的配置。為此Postman提供了環境變量,這樣你就可以通過修改環境變量,而不需修改請求了。

你可以通過右上角的下拉菜單選擇環境,可以通過點選右側的小眼睛來檢視目前環境變量。

5. API測試

Postman測試沙箱是一個JavaScript執行環境,可以通過JS腳本來編寫pre-requist和測試腳本。pre-requist可以用來修改一些預設參數。

Postman沙箱內建了幾個工具庫,比如lodash、SugarJs、tv4,還有一些内置函數如xml2JSON..

tv4用于驗證JSON資料,通過編寫JSON Schema來驗證,JSON Schema的文法請參照這裡

測試文法:

// description 為該測試的描述
// value 隻要Boolean(value)不等于false,這個測試就是PASS
tests[description] = value

// example
tests["Status code is 200"] = responseCode.code === 200;
           

我們以github status的接口為例:

url: https://status.github.com/api/status.json

tests["Status code is 200"] = responseCode.code === 200;

// validate json schema
var schema = {
  properties: {
      status: {type: 'string'},
      last_updated: {type: 'string'}
  }
};

tests["Valid data schema"] = tv4.validate(responseBody, schema);

// check status
var jsonData = JSON.parse(responseBody);
tests["Github status is good"] = jsonData.status === 'good';
           

運作結果:

基于Postman的API自動化測試

示例

受 http://httpbin.org/ 啟發,Postman也提供了一套入門的API http://dump.getpostman.com/ ,接下來我們将利用這套API做完整的測試。

1. 建立一個環境變量

基于Postman的API自動化測試

點選

Manage Environments

,然後點選

Add

基于Postman的API自動化測試

添加一個URL變量,我們會在後續使用

2. 請求一個新使用者

我們需要通過發送一個POST請求到{{url}}/blog/users/來建立一個使用者,并需要附加下面的參數到請求body中:

注:記得将環境變量切換到dump.getpostman.com,這樣我們才能擷取到{{url}}變量
{
  "username": "abhinav",
  "password": "abc"
}
           
基于Postman的API自動化測試
這個接口現在好像不支援建立使用者了,我們假設已經建立成功了,因為這不影響我們後續操作

3. 擷取使用者的Token

Token用于授予終端請求和通路權限的。我們可以通過POST使用者名和密碼請求 {{url}}/blog/users/tokens/ 來擷取使用者的Token,這個Token将用于其他請求中。

{
  "username": "abhinav",
  "password": "abc"
}
           
基于Postman的API自動化測試

4. 格式化JSON

我們需要從上面的請求結果中擷取到使用者Token和使用者ID,并将這兩個值儲存到環境變量中,以供後續使用。将下面這段代碼添加到測試編輯器中:

var data = JSON.parse(responseBody);

if (data.token) {
  tests["Body has token"] = true;
  postman.setEnvironmentVariable("user_id", data.user_id);
  postman.setEnvironmentVariable("token", data.token);
}
else {
  tests["Body has token"] = false;
}
           
基于Postman的API自動化測試

5. 建立一篇文章

如果上面的測試是在主視窗或者集合運作器中執行,那麼

user_id

token

會自動地被添加到環境變量中。

為了建立一篇文章,我們需要發送一個POST請求到 {{url}}/blog/posts ,并将

user_id

token

添加在URL參數中。POST的請求Body如下:

{
  "post": "This is a new post"
}
           
基于Postman的API自動化測試

6. 檢查傳回資料

如果上述的請求成功的話将傳回一個帶有

post_id

的JSON。我們将在這裡驗證是否建立文章成功,并且将文章ID儲存到環境變量。将下面這段代碼添加到測試編輯器中:

var data = JSON.parse(responseBody);
 
if (data.post_id) {
  tests["post_id found"] = true;
 
  postman.setEnvironmentVariable("post_id", data.post_id);
}
else {
  tests["post_id found"] = false;
}
           
基于Postman的API自動化測試

7. 擷取一篇文章并驗證JSON

我們将通過上面傳回的文章ID來擷取我們建立的文章。這裡我們将用到Postman内置的 tv4 JSON 驗證器來檢查伺服器響應的JSON。

建立一個GET請求到 {{url}}/blog/posts/{{post_id}},并将下面這段代碼添加到測試編輯器中:

var schema = {
  "type": "object",
  "properties": {
    "content": "string",
    "created_at": "integer",
    "id": "integer"
  },
  "required": ["content", "created_at", "id"]
};
 
var data = JSON.parse(responseBody);
 
var result = tv4.validateResult(data, schema);
 
tests["Valid schema"] = result.valid; 
           
基于Postman的API自動化測試

8. 一鍵運作與分享集合

我們将上述每一個測試儲存到PostmanTest的集合中,這樣我們就可以在任何時候打開和運作你想要的測試,并且可以一鍵運作所有,或者将集合分享給你的小夥伴,也可以擷取嵌入式代碼(如下面的按鈕)。

基于Postman的API自動化測試

本文的所有測試用例都在這裡

基于Postman的API自動化測試

參考

https://www.getpostman.com/docs