Postman介紹(1)




一、Postman介紹

Postman是google開發的一款功能強大的網頁調試與發送網頁HTTP請求,並能運行測試用例的的Chrome插件。其主要功能包括:

  • 模擬各種HTTP requests
    從常用的 GET、POST 到 RESTful 的 PUT 、 DELETE …等等。 甚至還可以發送文件、送出額外的 header。
  • Collection 功能(測試集合)
    Collection 是 requests的集合,在做完一個測試的時候, 你可以把這次的 request 存到特定的 Collection 里面,如此一來,下次要做同樣的測試時,就不需要重新輸入。而且一個collection可以包含多條request,如果我們把一個request當成一個test case,那collection就可以看成是一個test suite。通過collection的歸類,我們可以良好的分類測試軟件所提供的API.而且 Collection 還可以 Import 或是 Share 出來,讓團隊里面的所有人共享你建立起來的 Collection。
  • 人性化的Response整理
    一般在用其他工具來測試的時候,response的內容通常都是純文字的 raw, 但如果是 JSON ,就是塞成一整行的 JSON。這會造成閱讀的障礙 ,而 Postman 可以針對response內容的格式自動美化。 JSON、 XML 或是 HTML 都會整理成我們可以閱讀的格式
  • 內置測試腳本語言
    Postman支持編寫測試腳本,可以快速的檢查request的結果,並返回測試結果
  • 設定變量與環境
    Postman 可以自由設定變量與Environment,一般我們在編輯request,校驗response的時候,總會需要重復輸入某些字符,比如url,postman允許我們設定變量來保存這些值。並且把變量保存在不同的環境中。比如,我們可能會有多種環境, development 、 staging 或 local, 而這幾種環境中的 request URL 也各不相同,但我們可以在不同的環境中設定同樣的變量,只是變量的值不一樣,這樣我們就不用修改我們的測試腳本,而測試不同的環境。

二、postman工具介紹和應用

幾乎很多人都是從postman開始做接口測試的。所以,我們很有必要了解這個工具。我個人認為,postman是一個半自動化接口測試工具。因為功能和軟件本身限制,還是不能夠達到代碼自動化測試的效果。

1、postman的下載和安裝

在介紹這個工具之前,我們還是需要先安裝到本地,才開始學習postman。

官網是https://www.getpostman.com/。我個人習慣是在chrome瀏覽器上安裝postman的插件,方法就是chome瀏覽器上輸入chrome://extensions/,然后輸入postman進行搜索,遺憾的是,我們國內網絡連接不上google應用商店,所以無法直接下載安裝,我幫忙下載了一個postman的插件安裝程序,但是拖動到chrome瀏覽器內提示不能安裝這個擴展程序。如果沒辦法訪問google的朋友,就去安裝windows版本的安裝文件,點擊這里

2、postman軟件界面介紹

我這邊使用的是瀏覽器插件版,然后在桌面生成一個快捷方式。剛剛安裝的postman,打開需要你登錄或者創建一個賬號,這里我們點擊不創建,直接進來的界面如下圖。

這里不一一介紹每個按鈕的左右,還是粗略分為三大塊。

  1. 左邊這塊,主要是接口用例的管理和執行導出操作。
  2. 右邊上面部分這塊,表示接口輸入的區域,主要有接口地址,請求方式,參數設計。
  3. 第三部分是接口的響應顯示內容。

1、設置postman的主題

image

2、導出和導入接口集

postman支持非常方便的導入和導出接口集,繼續操作如下:

導出(數據一般以postman_collection.json結尾)

image

導入:

image

3、身份驗證Authentication

  1. Basic Auth
    是基礎的驗證,所以會比較簡單
    會直接把用戶名、密碼的信息放在請求的 Header 中
  2. Digest Auth
    要比Basic Auth復雜的多。使用當前填寫的值生成authorization header。所以在生成header之前要確保設置的正確性。如果當前的header已經存在,postman會移除之前的header。
  3. OAuth 1.0
    postman的OAuth helper讓你簽署支持OAuth1.0基於身份驗證的請求。OAuth不用獲取access token,你需要去API提供者獲取的。OAuth 1.0可以在header或者查詢參數中設置value。
  4. OAuth 2.0
    postman支持獲得OAuth 2.0 token並添加到requests中。

4、下載文件接口

按照一般請求接口,配置好接口地址以及參數,點擊Send and Download 按鈕,執行請求的同時會下載文件

3、postman接口測試舉例

還是以前面一篇文章介紹的新浪天氣舉例。

3.1 選擇請求方式是GET

3.2 輸入接口測試地址和輸入參數,如下圖,根據順序來填寫

3.3 確認填寫沒問題,點擊Send這個按鈕,查看response內容

上面可以看到接口響應的狀態碼是200 OK,接口得到response的時間是63毫秒。內容可以通過xml格式顯示天氣信息。你顯示格式方面,你可以點擊不同效果,例如當前是Pretty模式,你可以點擊Raw模式看看或者Preview模式。接口數據有的是xml格式,有的是json格式。

以下是http狀態碼以及對應的含義,可以作為測試過程中的參考:

4、postman進行接口自動化斷言

上面我們查看response信息是手工人眼去判斷,那么postman是不是可以支持自動化斷言呢,文章開頭提到postman是一個半自動工具,這里舉例來說明。

我們在Tests tab下設置了三個自動化斷言,一個是狀態碼是不是等於200,第二個是響應時間需要小於200ms,第三個是響應內容包含北京這個字段。我們可以在右側找到這三個函數,點擊就會自動化生成在代碼輸入區域。

查看測試結果是否通過。

上面可以看到自動化斷言測試通過,如果是失敗,會顯示紅色Fail按鈕。如果你需要保存這個接口,以便下次使用,你可以點擊右上角的Sava按鈕,彈出頁面,你需要創建一個集合,點擊保存到這個集合里。再回到postman頁面介紹左上角,有一個Run按鈕,左側我把接口保存到一個demo的集合里面。點擊Run,選擇demo集合,設置執行多少次,然后可以看見測試報告,一個很簡單的測試報告。

三、Postman 發送請求

安裝好之后,我們先打開Postman,可以看到界面分成左右兩個部分,右邊是我們后頭要講的collection,左邊是現在要講的request builder。在request builder中,我們可以通過Postman快速的隨意組裝出我們希望的request。一般來說,所有的HTTP Request都分成4個部分:URL、method、 headers和body。而Postman針對這幾部分都有針對性的工具。

1、URL

要組裝一條Request, URL永遠是你首先要填的內容,在Postman里面你曾輸入過的URL是可以通過下拉自動補全的哦。如果你點擊Params按鈕,Postman會彈出一個鍵值編輯器,你可以在哪里輸入URL的Parameter,Postman會幫你自動加入到URL當中,反之,如果你的URL當中已經有了參數,那Postman會在你打開鍵值編輯器的時候把參數自動載入

這里寫圖片描述

2、Headers

點擊’Headers’按鈕,Postman同樣會彈出一個鍵值編輯器。在這里,你可以隨意添加你想要的Header attribute,同樣Postman為我們通過了很貼心的auto-complete功能,敲入一個字母,你可以從下拉菜單里選擇你想要的標准atrribute

這里寫圖片描述

3、Method

要選擇Request的Method是很簡單的,Postman支持所有的Method,而一旦你選擇了Method,Postman的request body編輯器會根據的你選擇,自動的發生改變

這里寫圖片描述

4、Request Body

如果我們要創建的request是類似於POST,那我們就需要編輯Request Body,Postman根據body type的不同,提供了4中編輯方式:

  • form-data
  • x-www-form-urlencoded
  • raw
  • binary

1、form-data:

就是http請求中的multipart/form-data,它會將表單的數據處理為一條消息,以標簽為單元,用分隔符分開。既可以上傳鍵值對,也可以上傳文件。

當上傳的字段是文件時,會有Content-Type來表名文件類型;content-disposition,用來說明字段的一些信息;

由於有boundary隔離,所以multipart/form-data既可以上傳文件,也可以上傳鍵值對,它采用了鍵值對的方式,所以可以上傳多個文件。

2、x-www-form-urlencoded:

就是application/x-www-from-urlencoded,會將表單內的數據轉換為鍵值對拼接起來,比如,name=java&age = 23

3、raw

可以上傳任意格式的文本,可以上傳text、json、xml、html等

4、binary

相當於Content-Type:application/octet-stream,從字面意思得知,只可以上傳二進制數據,通常用來上傳文件,由於沒有鍵值,所以,一次只能上傳一個文件。

(我們這里是可以傳文件的哦)

四 、在test suite中運行test case

我們已經知道如何用Postman組裝並發送消息,那我們如何根據需求用Postman來做測試呢?在這開始之前,我們先來看看Postman的左邊面板:

這里寫圖片描述

這里包含了History和Collection,我們可以在History里面看到我們曾經發送過的HTTP Request, 我們可以很方便的通過點擊上面的項重新構建我們的request。而右邊的Request Builder面板上,還有兩個按鈕,Pre-request Script和Tests。

  • Pre-request Script
    定義我們在發送request之前需要運行的一些腳本,應用場景主要是設置全局變量和環境變量
  • Tests
    定義發送Request之后,需要用腳本檢測的內容,也就是Test case的內容。

這里的的Tests是我們關鍵。

1、Test

打開Tests,我們可以看到窗口分成兩部分,一部分是左邊的代碼窗口和右邊的Snippet窗口,點擊對應的snippet,postman會在左邊的窗口為我們生成對應的代碼,在下面的圖中,我選擇了“Response body: is equal to a String”和“Response time is less than 200ms”,可以看到Postman在代碼窗口為我加載對應的語句,這里我把希望的responseBody改成了“No valid parameters!!”.
這樣我就完成一條簡單的測試用例:

  • 當HTTP Get request沒有帶任何參數的時候,希望response的body返回字符串“No valid parameters!!”
  • responseTime小於200ms

這里寫圖片描述

2、Variables and Environment

變量

開發人員知道變量是符號名稱,代表您存儲在其中的信息。變量表示的信息可以更改,但變量上的操作保持不變。Postman中的變量以相同的方式工作。
您可以在多個位置重用變量的值。如果更改變量的值,則該變量的每個實例都將更改為新值。

環境

環境是一組鍵值對。鍵表示變量的名稱。您可以使用數據編輯器修改環境。
使用API​​時,通常需要為本地計算機,開發服務器或生產API提供不同的設置。環境允許您使用變量自定義請求,以便您可以在不更改請求的情況下輕松切換不同的設置。

全局變量

全局變量提供了一組在所有范圍內始終可用的變量。您可以擁有多個環境,但只有一個環境可以使用一組全局變量一次處於活動狀態,這些變量始終可用。

變量
我們可以分配五種類型的變量范圍:

  1. 全局
  2. 采集
  3. 環境
  4. 數據
  5. 本地
    他們的的優先級如下圖:

在這里插入圖片描述

官方文檔對變量定義的格式為{{variableName}}

另外,這里大家可以看到在URL輸入框中,我使用了{{myLocalHost}},那我們如何定義變量呢,首先,我們得創建一個Environment,點擊Environment那個button(在這里是“SampleEnv”那個button,因為我將其選擇我當前使用的Environment)

這里寫圖片描述

在Postman里面:

  • Environements包含global Environment,即全局的Environment,里面定義的變量在任何地方地方都可以看到
  • local Environment, 里面定義的變量只有在當前Environment里面才可以看到,這里,我定義了一個“SampleEnv”
  • Environment可以被share,通過你的postman賬號或者google賬號
  • Environment可以通過文件import

點擊之后,選擇Manage Environments。若要新建,選擇Add。若要編輯global Environment, 選擇Globals

這里寫圖片描述

我們來看看我已經創建好的SampleEnv,這里只創建了一個變量myLocalHost,也就是我們之前看到的在URL里的那個變量,這個變量在URL里可以用,在test script里面可以用,任何其他地方你都可以通過{{}}符號獲得它的值。

這里寫圖片描述

這里稍微舉例一下變量的好處,比如你把APP部署在自己的機器上時使用的域名是localhost,而部署在服務器上時,域名就是具體的服務器ip。為了在兩種不同環境上測試你的API,你在構建request的時候就需要輸入不同的url,但如果你使用了變量,你就可以使用變量來復用你的url,你只需在不同的environment里面給url賦不同的值,那你的request就完全不需要變。同理,在tests里面也是一樣的。這里就不贅述

3、Collection

如果我們將一個request看成一個測試用例,Collection可以看作是一個測試套件;

Collection可以一鍵運行Collection里的所有request請求;

Collection支持csv或者json格式的文件導入,官網有模板文件,json格式如下;

[{
  "path": "post",
  "value": "1"
}, {
  "path": "post",
  "value": "2"
}, {
  "path": "post",
  "value": "3"
}, {
  "path": "post",
  "value": "4"
}]

引用變量的語法有兩個:

data.username 或者data['username']

定義好了test case (寫好的Request和定義好結果檢查tests),我們就需要運行,你可以簡單點擊send按鈕查看結果,但這時候你不會明顯的看到測試的結果,你需要把這條request加入到collection當中。我們先創建一個collection:

這里寫圖片描述

在彈出的窗口中創建你的collection,命名為你test suite的名字:

這里寫圖片描述

創建collection之后,把已經寫好的request(test case)保存到collection(test suite)當中。

  • 點擊save,把Request Name改成你的test case的名字,比如“test_NoParameter_Expect_WarningInfo”;
  • save to exist collection,選擇之前創建好的collection, “TestParameters”;

這里寫圖片描述

點擊窗口中的save之后我們就可以在左界面上看到我們的這個collection和collection中的request了:

這里寫圖片描述

點擊 ‘>’按鈕(點擊了之后會變成 ‘<’),我們就會看到彈出的窗口中有一個‘Run’,運行一下,就會彈出一個collection runner的窗口。點擊一下start test,你就可以看到運行的結果,這里我選擇了運行100次,在左邊窗口你還可以看到之前的運行記錄:

這里寫圖片描述

加入我把App的接口改為:

@Override
    protected void doGet( HttpServletRequest request, HttpServletResponse response )
        throws ServletException,
            IOException
    {
        if( request.getParameter( "name" ) != null )
        {
            response.getWriter().print( "lex" );
        }
        else
        {
            response.getWriter().print( "No valid parameters???" );
        }
    }

這會導致response body的比較不匹配 No valid parameters??? != No valid parameters!!

這里寫圖片描述

那你就會看到 Body is correct case是FAIL的.

4、用Postman生成Request其他語言的代碼

Postman這款工具可以讓你很方便的測試你的Web API,那如果你實在是沒辦法用Postman,必須手寫代碼,又或者你有別的需求是Postman沒法實現的,你必須寫一個特殊的script或App來測試你的接口,那這時候是不是Postman就沒有用武之地了?我來個你share一個小技巧吧,管不管用你說的算。

假設我現在要這樣來測我的接口:我們要設置用戶名和密碼:
這里寫圖片描述
我們要設置參數和Header:
這里寫圖片描述
如果讓你寫代碼來生成這個HTTP Request是不是感覺有點麻煩? 如果你也是個懶人,就打開Postman,配好你想要的HTTP Request,然后點擊上圖中的Generate Code吧,在彈出的窗口里面,你可以看到這條Request在各種語言里面的對應寫法
這里寫圖片描述

比如Javascript AJAX:

var settings = {
  "async": true,
  "crossDomain": true,
  "url": "http://maps.googleapis.com/maps/api/geocode/json?Address=%E4%B8%AD%E5%9B%BD%E5%9B%9B%E5%B7%9D%E6%88%90%E9%83%BD%E5%B8%82%E5%A4%A9%E5%8D%8E%E4%B8%80%E8%B7%AF&sensor=true",
  "method": "GET",
  "headers": {
    "accept": "application/xml",
    "cache-control": "no-cache",
    "pragma": "text/cmd",
    "postman-token": "c7d566f4-0e21-9680-e47f-667b3e65280d"
  }
}

$.ajax(settings).done(function (response) {
  console.log(response);
});

五、Script腳本

1、postman中的script

postman集成了一個強大的,基於nodejs的script引擎,借助它,您可以為requests和collections添加動態的行為。
這樣就可以在編寫test suite時,構建可以包含動態參數的request,在request之間傳遞數據等等。您可以在流程中的兩個事件中添加要執行的JavaScript代碼:
1. 在發送request之前,編寫pre-request script,定制化request。
2. 收到response之后,用test script,處理返回的數據。

整個流大概是這樣的:
這里寫圖片描述

2、Pre-request scripts

pre-request script就是一段在發送request之前執行的代碼。大家可以自己腦補在什么場景可以用到它。比如,隨機的URL參數,變化的requst body等。
這里要注意的是,pre-request script和test scripts一樣,都是javascript,同時,和angular js一樣,可以用兩個{{}}訪問環境變量。

遞增的url參數

最近一直在玩elasticsearch,就用elasticsearch的API來作為例子吧。我們通過GET API,可以獲取ES中的數據。我現在從tushare上把新華保險的日線數據導出為json格式的文件,存儲到ES當中。每條記錄都有一個id。通過postman單個調用接口,大概是這樣的:(截圖中的url應該是localhost:9200/xhbx/stock-record/_search?q=_id:707)
這里寫圖片描述
但是如果我想通過run collections的方式,一次讀出100天的數據呢?那就是從712開始,每次request遞增1。查詢100次。
借助於pre-request script我們可以很方便的實現這個需求。
首先,查看當前的環境變量,點擊右上角的眼睛圖標:
這里寫圖片描述
你可以看到自定義的SampleHostGlobals

我們可以定一個global變量xhbxId,用於自增。點擊上圖的Edit。或者點擊眼睛圖標旁的齒輪圖標,添加一個global變量:
這里寫圖片描述

然后,配置我們的request使用xhbxId。點擊send,你會發現,能夠正確請求到id為707的數據:
這里寫圖片描述

點擊parameter下方的Pre-request scripts選項,編輯我們的腳本:

var temp = parseInt(postman.getGlobalVariable("xhbxId"));
temp += 1;
postman.setGlobalVariable("xhbxId", temp);

腳本的意思是給xhbxId自增1。前面已經說過,pre-request script會在request被發送之前運行,所以,所以每次我們點擊send,xhbxId都應該增加1。也就是下一次是708。
另外,這里要注意的是,所有的環境變量或者global變量,都是以字符串的形式存儲的,所以我們的自增操作需要先轉化為int。
運行結果如圖:
這里寫圖片描述

變化的request body

很多人也問我,request body的問題。其實和url參數一樣,直接引用就是了。
保持我們之前的Pre-request scripts不變。把request的類型改成POST,編輯我們的request body,使用{{xhbxId}}的方式獲取參數。本次調用正確的遞增了Id為709。
這里寫圖片描述

3、test script

接下來,通過test script測試結果。保持我們之前的Pre-request scripts不變。如果再按一次send,則返回的結果中,應該包含如下字符串:
"_id":"710"
那么,我們就應該在test script里面,測試response里面應該包含如上字符串。test script和pre-request script是一樣的,所以我們可以很方便的使用xhbxId作為判斷的比較值。

var temp = postman.getGlobalVariable("xhbxId");
tests["Body matches string"] = responseBody.has("\"_id\":\""+temp+"\"");

具體操作如下圖:
這里寫圖片描述

  • 選擇Tests
  • 讀出xhbxId
  • 放入response body: Contains strings的snippet
  • 運行之后,test的結果是OK的,1/1
  • 710被匹配上。

4、在test suite中運行

好了,准備好上面的條件,我們把test case保存到collection當中(我新建了一個叫test_script的collections,不知道怎么操作的話看我的教程2)。運行個100次。

這里寫圖片描述

測試通過,接口沒問題。這時,運行了100次,global的xhbxId應該從710增加到810了。

這里寫圖片描述

確實是這樣,postman正確運行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM