Postman+Newman命令運行

Postman簡介

    通常簡單的接口測試咱們能夠直接在瀏覽器裏面進行調試,可是涉及到一些權限設置就沒法操做了,所以咱們須要接口測試的相關工具:postman是一個接口測試和HTTP請求的工具。html

postman的優勢:java

  • 支持各類請求類型:get、post、put、patch、delete等
  • 支持在線存儲數據,經過帳號就能夠進行遷移數據
  • 很方便的支持請求header和請求參數的設置
  • 支持不一樣的認證機制,包括 Basic Auth、 Digest Auyh 、 OAuth1.0、 OAuth2.0等
  • 響應數據時自動按照語法格式高亮的, 包括HTML、 JSON 和 XML

  

下載安裝

Postman有Windows,Mac,Liunx以及Chrome插件版本。這裏主要介紹win平臺版本的使用。node

 

Postman入門

發送第一個請求:python

一、啓動軟件後在引導界面點擊Request,給Request命名,而後建立文件夾並把該Request歸屬到該文件夾。web

二、在地址欄輸入postman-echo.com/get而後點擊send按鈕,能夠看到返回值。算法

 

Postman工做原理

以下圖所示,當你在Postman中輸入請求並單擊Send按鈕時,服務器將接收請求並返回Postman在接口中顯示的響應npm

 


 

發送不一樣的HTTP請求編程

GET

json

HTTP GET請求用於從服務器檢索數據,數據由統一的URI(統一資源標識符)標識,GET請求可使用Query String Parameters 將參數傳遞給服務器。api

 

請求說明:

  • Params下的Query Params是以鍵值對方式發送參數,
  • 在URL後面加 ?能夠添加發送參數,& 能夠鏈接多個參數
  • 例如:https://postman-echo.com/get?name=leesin&skill=qq2wrd

 

參數編輯:

  • 點擊params按鈕,postman能夠自動辦公們解析出對應的參數
  • 若是暫時不傳參數,能夠方便的經過不勾選方式去實現
  • 若是想要批量編輯參數,能夠點擊右上角的Bulk Edit,實現批量編輯

 

響應數據:

  • 在主頁下方一欄菜單爲響應菜單欄,能夠查看響應內容,Cookie、Headers、響應狀態碼等信息

 

POST

HTTP POST請求是將數據傳輸到服務器,返回 的數據取決於服務器的實現。

POST請求可使用query String Parameters以及body將參數傳遞給服務器。

案例1:

在下面的請求中,使用Query String Parameters傳遞參數。

https://postman-echo.com/post?param=test

 

返回值

{
    "args": {
        "param": "test"
    },
    "data": {},
    "files": {},
    "form": {},
    "headers": {
        "x-forwarded-proto": "https",
        "host": "postman-echo.com",
        "content-length": "0",
        "accept": "*/*",
        "accept-encoding": "gzip, deflate",
        "cache-control": "no-cache",
        "cookie": "sails.sid=s%3A57aLbjtudZ0eAUQPTGkyqZR-k148qAzN.tS52N8wbompQ8tzqpFZnu%2Bq4x5KLy1tR9g%2FhIn9Ss7s",
        "postman-token": "be4d5653-949f-4ea1-b63a-8572d1a8ffb5",
        "user-agent": "PostmanRuntime/7.13.0",
        "x-forwarded-port": "443"
    },
    "json": null,
    "url": "https://postman-echo.com/post?param=test"
}

 

案例2:

發送一個Request,其中body爲application/x-www-form-urlencoded類型,參數分別爲param1=zed和param2=jiawen,請求URL以下:

https://postman-echo.com/post

 

Postmam Body 數據類型數碼:

  • form-data multipart/form-data是Web表單用於出書數據的默認編碼。這模擬了在網站上填寫表單並提交它,表單數據編輯器容許咱們爲數據設置鍵-值對。咱們也能夠爲文件設置一個鍵,文件自己做爲值進行設置。
  • x-www-form-urlencoded該編碼與URL參數中使用的編碼相同。咱們只需輸入鍵-值對,postman會正確編碼鍵和值,請注意,咱們沒法經過次編碼模式上傳文件。表單數據和urlencoded之間可能存在一些差別,所以請務必檢查Api的編碼實現,確認是否可使用這種方式發送請求。
  • raw請求能夠包含任何內容,除了替換環境變量以外,Postman不觸碰在編輯器中輸入的字符串。不管你在編輯區輸入什麼內容,都會隨請求一塊兒發送到服務器。編輯器容許咱們設置格式類型,以及使用原始主體發送的正確請求頭。咱們也能夠手動設置Content-Type標題,這將覆蓋Postman定義的設置
  •  binary二進制數據可讓咱們發送Postman我i發輸入的內容,例如圖像,音頻或視頻文件

PUT

HTTP PUT請求主要是從客戶端向服務器傳送的數據取代指定的文檔的內容,PUT請求可使用Query String Parameters以及body請求體將參數傳遞給服務器。

發送PUT請求,並傳遞字符參數「hello postman」

 

DELETE

HTTP DELETE方法用於刪除服務器上的資源,DELETE請求可使用Query string parameters以及body請求體將參數傳遞給服務器

DELETE請求

https://postman-echo.com/delete

 

返回值

{
    "args": {},
    "data": {},
    "files": {},
    "form": {},
    "headers": {
        "x-forwarded-proto": "https",
        "host": "postman-echo.com",
        "accept": "*/*",
        "accept-encoding": "gzip, deflate",
        "cache-control": "no-cache",
        "cookie": "sails.sid=s%3A-PlKnJ5cqYk6Uqz9tVwj-4o1lr5LZWrg.NRSWI4CcrBfKDAGgoUszOojVC%2F5v%2FY0YqZPFrRxaavg",
        "postman-token": "e8737025-ca4c-4b2c-91ef-338de8fd1f09",
        "user-agent": "PostmanRuntime/7.13.0",
        "x-forwarded-port": "443"
    },
    "json": null,
    "url": "https://postman-echo.com/delete"
}

 

Request Header

請求頭-用來講明服務器要使用的附加信息,比較重要的信息由Cookie、Referer、User-Agent等,在postman中能夠在請求下方的Heafers欄目中設置,以下圖所示

 

Response Header 

響應頭-其中包含了服務器對請求的應答信息,如Content-Type、Server、Set-Cookie等,在postman主界面下方Heerders或者Postman Console界面均可以查看Response Heaader信息

 

Tips: 經過控制檯能夠看到每次請求的Request Header詳細信息


受權設置

不少時候,出於安全考慮咱們的接口並不但願公開。這是就須要使用受權(Authorization)機制,受權過程驗證您是否具備訪問服務器所需數據的權限。當您發送請求是,您一般必須包含參數,以確保請求具備訪問和返回所需數據的權限。Postman提供受權類型,能夠輕鬆的在Postman本地程序中處理生髮驗證協議。

Postman支持的受權協議類型以下:

  • No Auth
  • Bearer Token
  • Basic auth
  • Digest Auth
  • OAuth 1.0
  • OAuth 2.0
  • Hawk Authentication
  • AWS Signature
  • NTLM Authentication [Beta]

這裏主要介紹加粗的受權協議

 

Basic auth

基自己份驗證是一種比較簡單的受權類型,須要通過驗證的用戶名和密碼才能訪問數據資源。這就須要咱們輸入用戶名和應對 的密碼。

 

案例:請求URL以下,受權帳號爲:

用戶名:postman

密碼:password

受權協議爲:Basic auth

https://postman-echo.com/basic-auth

若是不輸入用戶名密碼,直接用GET請求,則返回提示:Unauthorized

 

若是輸入用戶密碼,選擇Basic auth受權類型,則返回以下結果

 

 

Digest Auth

Digest Auth是一個簡單的認證機制,最初是爲HTTP協議開發的,所以也常叫作HTTP摘要。其身份驗證機制很是簡單,它採用哈希加密方法,以免銘文傳輸用戶的口令。摘要認證就是要合適參與通訊的兩方都知道雙方共享的口令。

當server想要查證用戶的省份,它產生體個摘要盤問(Digest challenge),併發送給用戶。典型的摘盤問用例如如下:

Digest realm = 「iptel.org」, qop="auth,auth-int", nonce="dcd98b7102dd3f0e8b11d0f600bfb0c093",opaque=""

,algorithm=MD5

 

這裏包含了一組參數,也要發送給用戶。用戶使用這些參數,來產生正確的摘要回答,併發送給server。再要盤問中的各個參數,其意義以下:

realm(領域):領域參數是強制的,在所有的盤問中都不準。它的目的是鑑別SIP消息中的機密。在SIP實際引應用中,它一般設置爲SIP代理所負責的域名。

nonce(現時):這是由server規定的數據字符串,在server每次產生一個斬妖盤問時,這個參數都是不同的(與前面所產生的不會雷同)。「現時」通常是由一些數據經過MD5雜湊運算構造的。這種數據一般包含時間標識和server的機密短語。這確保每個「現時」都有一個有限的生命期(也就是過了一段時間會失效,而且之後不會使用),而且時獨一無二的(即不論什麼其餘的server都不能產生一個一樣的「現時」)。

algorithm(算法):這是用來計算的算法。當前僅僅支持MD5算法。

qop(保護的質量):這個參數規定server支持那種保護方案。client可以從列表中選擇一個。值auth表示僅僅進行身份查驗,auth-int表示進行查驗外,另外一些完整性保護。 

案例

請求URL以下

https://postman-echo.com/digest-auth

摘牌配置信息以下:用戶密碼和basic auth同樣

Digest username=「postman」, realm=「Users」, nince=「ni1LiL0037PRRhofwdCLmwFsnEtH1lew」,uri=「?digest-auth」, opaque=「」

 

 

執行結果以下

{
    "authenticated": true
}

Hawk Auth

Hawk Auth是一個HTTP認證方案,使用MAC(message authentication code,消息認證算法),它提供了對請求進行部分加密的認證HTTP請求的方法。hawk方案要求提供一個共享對稱密匙在服務器與客戶端之間,一般這個共享的憑證在初試TLS(安全傳輸層協議)保護階段創建的,或者是從客戶端和服務器均可用的其餘一些共享機密信息中得到的。

案例

請求URL以下:

https://postman-echo.com/auth/hawk

密匙信息以下:

  • Hawk Auth ID:dh37fgj492je
  • Hawk Auth Key:werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn
  • Algorithm:sha256

 

執行結果:

{
    "message": "Hawk Authentication Successful"
}

若是將Key改爲其餘任意的字符則返回以下結果:

{
    "statusCode": 401,
    "error": "Unauthorized",
    "message": "Bad mac",
    "attributes": {
        "error": "Bad mac"
    }
}

 

OAuth 1.0

OAuth(開放受權)是一個開放標準,容許客戶讓第三方應用訪問該用戶在某一網站上存儲的私密的資源(如照片,視頻,聯繫人列表),而無需將用戶名和密碼提供給第三方應用。

案例

請求URL以下:

https://postman-echo.com/oauth1

請求方式爲GET,Add authorization data to 設置爲:Request Headers

參數配置爲:

Consumer Key:RKCGzna7bv9YD57c

Consumer Sceret:D+EdQ-gs$-%@2Nu7

發送請求結果以下:

{
    "status": "pass",
    "message": "OAuth-1.0a signature verification was successful"
}

若是Consumer Secret錯誤則返回以下結果:

{
    "status": "fail",
    "message": "HMAC-SHA1 verification failed",
    "base_uri": "https://postman-echo.com/oauth1",
    "normalized_param_string": "oauth_consumer_key=RKCGzna7bv9YD57c&oauth_nonce=lBeuZSBkUw1&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1558957675&oauth_version=1.0",
    "base_string": "GET&https%3A%2F%2Fpostman-echo.com%2Foauth1&oauth_consumer_key%3DRKCGzna7bv9YD57c%26oauth_nonce%3DlBeuZSBkUw1%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1558957675%26oauth_version%3D1.0",
    "signing_key": "D%2BEdQ-gs%24-%25%402Nu7&"
}

 

 擴展資料:各個受權協議文檔

 


Cookie設置

Cookie是存儲在瀏覽器中的小片斷信息,沒次請求後都將其發送會服務器,以便在請求之間存儲有用的信息。好比不少網站登陸界面都有保留帳號密碼,以便下次登陸。

因爲HTTP是一種無狀態的協議,服務器從網絡鏈接上無從知道客戶身份。怎麼辦呢?就給客戶端們頒發一個通行證,沒人一個,不管誰訪問都必須攜帶本身通訊證。這樣服務器就能從通行證上確認客戶身份了。這就是Cookie的工做原理。

Cookie是有服務端生成,儲存在響應頭中,返回客戶端,客戶端會將cookie存儲下來,在客戶端發送請求時,user-agent會自動獲取本地存儲的cookie,將cookie信息存儲在請求頭重,併發送給客戶端。postman也能夠設置、獲取、刪除cookie。

Set Cookies

在send按鈕下方點擊Cookies文字菜單,彈出以下界面,而後能夠設置Cookie。

請求URL以下:

http://www.baidu.com/

請求方式爲GET,添加Cookie值爲hobby:rubikcube

 

  打開Console找到Request Header能夠看到自定義設置的Cookie內容

Get Cookies

Cookie獲取比較簡單,直接獲取Response Headers裏面的 set-cookie值便可,或者在主界面下方Cookie菜單欄裏面也能夠查看。

Delete Cookies

點擊Cookies文字菜單,而後能夠根據需求去清除對應的Cookie。

 

 


 變量

咱們在開發不一樣階段可能存在不一樣的環境,好比測試環境和是生產環境。

測試環境API以下( 不是真實,用來玩的):

https://dev.postman.com/get
https://dev.postman.com/post
https://dev.postman.com/put

 

生產環境以下:

https://postman-echo.com/get
https://postman-echo.com/post
https://postman-echo.com/put

 

在這種狀況下,按照常規思路要麼維護兩套環境的API,要麼每次手動一個個去修改URL,兩種方法都低效且麻煩,設置變量就能夠很好的解決這個問題。

Postman變量類型

經過比較咱們能夠發現,以上兩組API除了host不一樣以外其餘都同樣,其實吧host用變量替代,這樣就能夠靈活切換環境。

Postman提供了變量設置,有4種變量類型:

  • 本地變量(Local Variable)
  • 全局變量(Global Variable)
  • 環境變量(Enviroment Variable)
  • 數據變量(Data Variable)

Tips:數據變量結合Collection介紹,不在此處介紹

環境變量

環境變量指在不一樣環境,同一個變量值隨着環境不一樣而變化,好比咱們上面舉例場景就可使用環境變量,當在測試環境時,host值爲:dev.postman.com,當切換到生產環境時,host值變爲:postman-echo.com。

 環境變量設置:在postman界面點擊右上角眼睛圖標,便可開始設置環境變量和全局變量。環境變量設置過程以下圖所示:能夠設置兩種環境dev和release,dev是開發測試環境;release是正式生產的生產環境。host環境變量,根據不一樣的環境值而改變。

 

引用變量格式爲{{varname}},以下圖所示:

 

本地變量

本地變量主要是針對單個URL請求設置的變量,做用域只侷限在請求範圍內。如請求URL:https://postman-echo.com/post,設置兩個本地變量(user,passwd)做爲參數。請求方式爲post。

設置本地變量:

pm.variables.set("user","yi");
pm.variables.set("passwd","aeaqaaa");

 

 引用本地變量格式:{{variable_name}}

 

全局變量

全局變量是指在全部環境裏面,變量值都是同樣的,全局變量的做用域是全部請求。

全局變量設置有兩種方式:

  • 頁面設置
  • 腳本設置

頁面設置

點擊右上角設置變量的圖標,在Global選項菜單點擊Edit菜單便可設置全局變量,以下圖所示。全局變量的引用方式和環境變量同樣。

注意:當環境變量和全局變量名稱同樣,切換到某個環境時,環境變量會覆蓋全局變量。

 

腳本設置

在 Pre-request Script 編寫以下代碼能夠設置全局變量:

pm.globals.set("variable_key","variable_value");

variable_key表示變量名稱,variable_value表明變量值。

 

案例實踐

在實際接口測試中,接口常常會有關聯。好比須要取上一個接口的某個返回值,而後做爲參數傳遞到下一個接口做爲參數。假設如今要獲取A接口返回的userid值做爲B接口的請求參數。

A、B接口請求URL以下:

A:https://postman-echo.com/post
B:
https://postman-echo.com/get

 


 

斷言

通常來講執行完測試,咱們須要對測試結果來進行校驗,判斷結果是否符合咱們的預期,也就是斷言。在街口測試中通常會根據響應狀態碼或者返回的數據來進行斷言。

postman提供一個測試沙盒(postman sandbox)測試沙盒是一個JavaScript執行環境,能夠經過JS腳原本編寫pre-request Script 和 test Script。

  • pre-request Script(預置腳本)能夠用來修改一些默認參數,在青丘發送以前執行。有點相似unittest框架中的seUP()方法。
  • test Script(測試腳本)當接收到響應以後,在執行測試腳本。

 

案例

請求接口以下:

postman-echo.com/post

斷言規則:

響應狀態碼:200

斷言內容:返回的user參數值與定義的一致

響應時間:小於0.5s

 

測試腳本:

在pre-request Script定義變量user

pm.variables.set("user","zed");

 

在Test編寫斷言腳本

//判斷響應狀態碼
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});


//獲取發送的參數值
username = pm.variables.get("user");
console.log(username)

//校驗響應內容是否和請求一致
pm.test("Check username", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.json['user']).to.eql(username);
});

//檢測響應時間是否小於0.5s
pm.test("Response time is less than 500ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(500);
});

 

 引用本地變量

斷言結果

 


批量執行

Collection

當咱們想批量測試某個集合裏面的各個API時,能夠試用Collection Runner 來批量運行API,同時能夠進行環境變量,迭代執行冊數,延遲時間設置。

Collection入口

 Collection執行前選項

執行結果

 

 數據驅動

有時咱們針對一個接口須要測試不少不一樣的參數,若是每次一個個去修改參數值來進行測試這樣效率確定比較低下。所以須要每次迭代執行傳入不一樣的參數進行測試,那麼須要導入外部數據文件進行參數化,也就是數據驅動。

 數據導入(此連接跳轉Newman命令說明)

以下圖所示,data選擇json數據文件:data.json,文件類型選擇application/json Json數據內容以下:

[{
    "username":"Jack",
    "passwd":"6666"
},{
    "username":"Bob",
    "passwd":"5555"
},{
    "username":"Marry",
    "passwd":"8888"
}]

 

 

 

 執行結果

 


 構建工做流

再使用"Collection Runner"的時候,集合中的請求執行順序就是在請求Collection中的顯示排列順序。可是,有的時候咱們不但願按照這樣的方式去執行,多是執行完第個請求,再去執行第五個請求,而後再去執行第二個請求這樣的順序;那麼在"Collection Runner"中如何去構建不一樣的執行順序呢?

設置方法

最直接的方法就是在集合中拖動順序,可是每次去拖動比較麻煩,特別是當請求比較多的時候。這時最高效的方法就是經過腳本設置。首先下載官方提供的案例文件:collection.json導入到postman,運行Collection結果如圖所示: 

 

接下看要調整執行順序圍爲:Request1->Request3->Request2->Request4

首先在第一個請求Request1中Test代碼欄中編輯以下代碼,表示下一個請求爲Request3

postman.setNextRequest('Request 3')

而後在Request3中Test代碼欄中編輯以下代碼,表示下一個請求爲Request2

postman.setNextRequest('Request 2')

而後在Request2中Test代碼欄中編輯以下代碼,表示下一個請求爲Request4

postman.setNextRequest('Request 4')

注意:首個執行的請求要排在第一位

執行結果

 

 

相關資料:collection runs 官方文檔

 


  命令執行

在以前咱們都是在postman圖形界面工具裏面進行測試,可是有時候須要把測試腳本集成到CI平臺,或者在非圖形界面的系統環境下測試,此時就須要用到Newman。

 

Newman簡介

Newman時一款基於Node.js開發的能夠運行postman的工具,使用Newman能夠直接從命令行運行和測試postman集合。

 

Newman應用

環境準備

  • Node.js
  • cnpm或者npm

配置好環境後,執行以下命令安裝newman

cnpm install newman -- global

輸入以下命令檢測安裝是否成功

C:\Users\ccl>newman -v
4.4.1

 

執行測試

首先將postman的集合導出到桌面新建文件夾pmtest,以下圖所示:

打開cmd進入pmtest目錄,輸入以下命令:

newman run setNextRequest.postman_collection.json -d data.json -r html

 

命令說明

  • run 表明要執行的postman腳本,即爲導出的集合。
  • -d 表示要執行的數據,也就是執行 Collection數據驅動的data.json 的數據
  • -r 生成測試報告類型,這裏生成html格式報告

 更多方法請輸入newman -h 便可查看

 

報告查看

在測試文件pmtest裏面能夠看到自動生成的newman文件夾,打開就能夠看到生成的測試報告

Html報告樣式:newman-run-report

newman不只支持生成html報告,還支持其餘報告類型:

  • JSON reporter
  • JUNT/XML repoter
  • Client report
  • Html report

 

 


集成Jenkins

Jenkins介紹

jenkins是一個開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重複的工做,旨在一共一個開放易用的軟件平臺,使軟件的持續集成變成可能。

 

下載與安裝

 

下載地址:https://jenkins.io/download/

 

下載後安裝到指定的路徑便可,默認啓動也買你爲localhost:8080,若是8080端口被佔用沒法打開,能夠進入到jenkins安裝目錄,找到jenkins.xml配置文件,修改以下代碼的端口號便可。

<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments>

 

集成步驟

集成到jenkins的思路其實很簡單,就把以前執行測試的cmd命令放到jenkins裏面去執行,集成步驟也很簡單:

  • 首先新建一個項目:postman_api_test
  • 而後再構建欄目下拉菜單選擇 執行批處理命令(Execute Windows batch command)
cd C:\Users\ccl\Desktop\postman_api_test
newman run setNextRequest.postman_collection.json -d data.json -r html

Tips:個人文件夾中的文件與Newman應用的文件時同樣的

 

 如此保存後再jenkins主頁進行構建任務便可,其餘的設置如:定時執行,發送郵件報告等功能後期再Jenkin使用手冊中詳細介紹。


 

 

導出不一樣腳本語言

 雖然Postman功能比較強大,但畢竟時一款商業工具,多少會有些限制。好比只支持JS腳本運行,若是享用本身熟悉的編程語言(如:python,java等)來作接口自動化測試就須要導出對應的語言腳本了。

操做步驟

Postman支持導出不一樣語言版本的腳本,到一個接口調試好以後,點擊右側的code字樣即彈出圖下界面能夠選擇語言。最後你須要選擇語言版本便可生成對應的代碼。

 

 生成的代碼片斷能夠點擊Copy to Clipboard 複製。 

相關文章
相關標籤/搜索