序章
說到web服務接口,目前主流已經從SOAP的Web Service接口轉為RESTful API接口了,所以我們主要就是講解對REST API服務接口的測試椎眯。實際上眾多開發(fā)者對REST的理解程度不同,設計出來的系統(tǒng)有的并非完全遵循REST風格規(guī)范。由于REST是如此的火熱缓待,大家都聲稱自己的系統(tǒng)是RESTful的。許多系統(tǒng)前后端接口其實就是基于HTTP的CRUD(增查改刪)操作渠牲,分別使用了HTTP的POST旋炒、GET、UPDATE签杈、DELETE方法的請求瘫镇,就號稱是RESTful的,我們也不必深究芹壕。只要能較好的滿足目前系統(tǒng)的需求就行汇四。目前支持REST API測試的工具很多。我們選取其中一種用的比較多的Postman和大家講解一下怎樣使用工具進行REST API的自動化測試踢涌。
安裝和打開1.1
Postman有兩種形式的產品:一種是本地應用程序通孽,還有一種是Chrome瀏覽器的插件。官方推薦大家使用本地應用程序睁壁,我們也以本地應用程序Posman進行講解背苦。Postman的Window應用程序安裝包,可以到Posman官方網站下載https://www.getpostman.com/downloads/
點擊選擇相應操作系統(tǒng)上的安裝包后潘明,就可以下載了行剂。下載下來就是一個安裝包,大家雙擊安裝即可钳降,安裝好后厚宰,會在桌面上生成相應的圖標,雙擊即可打開遂填。圖標如下
Postman提供了一個多窗口多標簽的界面铲觉。瀏覽界面很簡單∠偶幔看下面的圖
Posman分為3個部分
上面的Headerbar(表頭欄)
左邊的sidebar
側邊欄可以讓你查找和管理請求和集合撵幽。側邊欄分為兩個主要便簽History和Collections。
我們在Postman應用程序中發(fā)送的每個請求都保存在“History”標簽窗口中右邊的Request Builder
Request Builder 窗口是我們用來管理API請求的礁击,構建HTTP請求消息的地方
一個簡單的例子1.2
Request Builder就是用來讓我們發(fā)送基于HTTP的API請求盐杂,并查看服務器的響應內容的逗载。我們在url編輯框中輸入百度的網址,如下所示
然后链烈,點擊Send按鈕厉斟。隨后,我們可以看到界面如下:
大家注意强衡,紅色線上方是HTTP請求消息捏膨,下方是響應消息。我們可以看出食侮,下方給出的就是http響應的消息體內容何恶,也就是網頁顯示的html文檔內容瓶蝴。當我們點擊發(fā)送按鈕的時候晓猛。Postman就發(fā)出請求給百度網站服務器翩伪,百度網站服務器隨后就響應了這個請求,給我們返回響應消息眉尸。Postman接收到響應消息后域蜗,顯示出消息的結構給我們看。
構建http請求消息1.3
Request Builder可以幫助我們快速的構建HTTP請求噪猾。前面我們學習過HTTP請求的消息構成霉祸。HTTP請求消息中,我們可以構造的部分主要就是URL袱蜡,Method(請求方法)Headers(請求頭)丝蹭,消息體。Postman可以讓我們方便的構建這些內容坪蚁。
選擇請求方法1.3.1
Postman里面可以非常方便的選擇HTTP請求的方法奔穿。我們可以根據接口定義,選擇不同的HTTP請求的方法敏晤。如下圖所示
url參數的構建1.3.2
很多的時候贱田,我們的url請求是有參數的,這里我們運行下restapi-teach系統(tǒng)嘴脾,用管理員賬號登錄男摧,進入課程管理界面。打開chrome瀏覽器的開發(fā)者工具欄译打,然后點擊添加課程耗拓,在界面上輸入一門課程信息。我們在開發(fā)者工具欄的網絡包標簽頁里面可以發(fā)現扶平,列出課程管理時帆离,瀏覽器會發(fā)出一個請求如下:http://localhost/api/mgr/sq_mgr/?action=list_course&pagenum=1&pagesize=20
也可以用Fiddler
看請求消息點擊
Inspectors
蔬蕊,Haders看頭如果要看整個消息點擊Raw
(原始的消息格式)
這個就是REST API的調用结澄,用來列出課程信息的哥谷。大家注意,這url中麻献,問號后面的部分action=list_course&pagenum=1&pagesize=20 術語叫做query string们妥。而這里面用&符號隔開就是一個個參數。這里包括pagenum(它的值為1)勉吻、pagesize(它的值為20)监婶。我們可以把這個http請求直接拷貝到Postman Builder Req的地址欄里面,點擊send得到如下結果:
說明我們可以直接用Postman直接發(fā)送該http請求給后端的web服務齿桃,web服務會給出響應消息惑惶,返回課程信息列表。
如果我們點擊Params
按鈕短纵,就可以看到Postman把url請求的參數顯示在下面的表格中带污,如下圖所示
在表格中編輯更加清晰一些。參數值是字符串香到,而有些字符出現在參數字符串中會有問題鱼冀,比如&、空格悠就、百分號等等千绪,如果出現了這樣的字符,我們必須要將這些字符替換成相應的轉義字符梗脾,我們可以用Postman的encodeURIComponent荸型。比如‘a b’經過轉換后,就變成了‘a%20b’炸茧,也可以直接寫在Params
里面帆疟,比如剛剛說的例子pagesize=20&,這樣寫就可以了他會自動轉義
如果有些字符它不進行轉義的話比如=
可以強制的讓他轉義宇立,選中右鍵點擊它選擇 encodeURIComponent
就可以了
請求頭的構建1.1.3
有些消息需要特殊的請求頭在里面踪宠,有些消息的請求頭會存放session、token數據在里面妈嘹,放在請求頭里面的柳琢,這個時候我們可以自己構建請求頭,不是所有的請求頭都需要構建润脸,常見的請求頭不需要構建柬脸,比如說我們剛才發(fā)送了的幾個。下面再給大家介紹一個Posman 的小技巧毙驯,點擊View
-->Show Postman Console
他會新打開一個窗口
這個時候你發(fā)送消息點擊Send
他會把消息以一種好看的方式顯示在這里面
比如你點Raw
他也可以看到原始的消息倒堕,原始的消息里面有一部分請求的請求信息,這個請求頭我并沒有在Postman里面填寫這些請求頭爆价,
比如accept
垦巴、host
這些都不是我選的媳搪,他是自動添加上去的不需要你寫
假如說根據接口文檔我們要添加一個username
的請求頭值是ql
,然后添加一個password
骤宣,假如必須要這兩個字段在請求頭里面秦爆,那你就根據文檔把他加上去,編輯好以后憔披,點擊send等限,發(fā)送http請求中就會攜帶這些添加的頭部
就會看到這里面多了username和password
請求體的構建1.1.4
有的時候,我們發(fā)送HTTP請求需要攜帶消息體芬膝。最常見的就是POST請求望门。restapi-teach系統(tǒng),用管理員登錄賬號锰霜,進入課程管理頁面怒允。打開chrom瀏覽器的開發(fā)者工具欄,然后點擊添加課程锈遥,在界面上輸入一門課程的信息纫事。
點擊創(chuàng)建后,我們在開發(fā)者工具欄的網絡包標簽頁里面可以發(fā)現所灸,瀏覽器會發(fā)出一個POST請求丽惶。這個請求也是一個REST API,用來添加一門課程的爬立。
Content-Length
消息體字節(jié)的個數钾唬。注意他的消息體格式叫From Data
就是URL encoded
,決定消息體是什么格式通常在消息頭里面有一個字段跟他對應的Content-Type
侠驯,比如這里就是application/x-www-from-urlencoded
抡秆,這種格式非常常見的請求體類型。這種格式其實跟大家講就是他這里面消息體的格式內容如果點擊view source
(看原始的內容)
這個格式內容其實跟那天講的URL參數是一樣的吟策。參數之間
&
隔開儒士,然后參數名等于參數值。其實urlencoded就是我們那天講的URL參數的格式(參數名等于參數值)檩坚,只是把這個位置從URL這邊移到了消息體里面了(Form Data)着撩,根據消息格式我們可以在Postman里面構建一模一樣的請求,填入如下URL和Body信息匾委,點擊發(fā)送
隨后刷新網頁拖叙,可以發(fā)現,也能添加一門課程信息赂乐,界面如下:
Content-Type為application/x-www-from-urlencoded的這種類型的消息體薯鳍,其實和前面的querystring的格式是一樣,通暢挨措,攜帶參數的在消息體中的REST API請求挖滤,其頭部的Content-Type字段除了application/x-www-from-urlencoded外崩溪,比較常見的還有application/json(序列化)和application/xml,分別對應json格式的文本和xml格式的文本壶辜。這種情況下,用Request Builder來構造消息體担租,需要選擇類型為raw砸民,并且在text下拉框中選擇相應的類型,并且在body編輯框中直接輸入相應格式的文本奋救。如下圖所示
Collection 和 Folder作用
Web API接口是有n多個API請求和響應組成的岭参。而這些API請求往往可以根據他們的功能相關進行分類。比如我們教管系統(tǒng)中的API就可以分為:課程管理API尝艘,包括課程的增刪改查演侯。老師管理API,包括老師的增刪改查背亥,培訓班管理API秒际,包括培訓班管理的增刪改查。學生管理API狡汉,包括學生的增刪改查等娄徊。
Postman中,我們可以用Collection 和 Folder對API進行分類存放和管理盾戴。如果我們創(chuàng)建的API請求不存放在Collection中寄锐,缺省會放在History欄目里面,這樣不是很好尖啡,不方便我們進行管理
Collection 和 Folder
在左側邊欄中橄仆,點擊Collection標簽,隨后點擊創(chuàng)建圖標衅斩,如下圖所示
隨后輸入Collection的名稱即可盆顾。創(chuàng)建好的Collection會出現在下方,如下所示
我們可以在創(chuàng)建好的Collection畏梆,一層層的建立Folder椎扬。只需右鍵點擊那個Collection,在彈出的菜單中選擇Add Folder即可具温。如果要在某個Folder中建立子Folder蚕涤,只需右鍵點擊那個Folder,在彈菜單中選擇Add Folder即可铣猩。通常一個產品的API接口測試揖铜,我們可以創(chuàng)建一個Collection和其對應。然后根據各個API的功能达皿,分成不同的Test Suite天吓,對應到不同的Folder中贿肩。
現在我們已經創(chuàng)建好文件夾了,下面我們把請求保存到文件夾中龄寞,點擊save
點擊之后會又API的目錄讓你選
這里我們可以給API起名字汰规,比如這里我們命名為“添加課程”。缺省的話是已URL為名字物邑,這個名字不直觀溜哮。
然后點擊保存,我們可以看到就保存到里面了
API還有導入導出功能色解,這里我們大概介紹一下
什么時候會用到導入導出呢茂嗓?比如我們API請求都構建好了Collection寫了很多,我們寫好之后測試人員可能不止一個科阎,假如有一天我們請假休息了述吸,需要同事去測試,這個時候同事不需要在他的Postman重新寫一遍锣笨,這個時候就需要導出來Export
可以導出到一個目錄里面去蝌矛,這個地方不要動他,就選擇最新的就可以了错英,
然后點擊Export
選擇目錄就可以朴读,下面說下怎么導入點擊Import
然后點擊Choose Files
選擇需要導入的文件就可以了。
Postman還有一個共享的功能特別是自己共享走趋。比如說你兩個工作環(huán)境下衅金,比如你在實驗室里有一臺機器,辦公區(qū)域也有臺機器簿煌。你在辦公區(qū)域開發(fā)了一些內容氮唯,這個時候你可能帶去實驗室里面去用,這個時候怎么弄呢姨伟,直接拷出來放在U盤里面或者通過網絡發(fā)過去這樣太麻煩惩琉,這個時候可以注冊一個賬號,有了賬號之后只要你登錄同一個賬號夺荒,你這個賬號里面曾經創(chuàng)建的數據都會自定的保存起來瞒渠。
點擊登錄
沒有賬號點擊Create Account
創(chuàng)建
登錄之后這個賬號曾經用過的信息他會同步過來