官术网_书友最值得收藏!

1.2 接口基礎知識

進行接口測試,首先需要了解什么是接口,下面將詳細講解接口的基礎知識。

1.2.1 接口的定義

兩個不同的系統或者一個系統中兩個不同的功能,它們之間相互連接的部分稱為接口。

在軟件測試中,常說的接口一般有兩種:圖形用戶接口(Graphical User Interface,GUI),它是人與程序的接口;應用程序編程接口(Application Programma Interface,API),本書中提到的接口特指API。

API是一組定義、程序及協議的集合,API可實現計算機軟件之間的相互通信。API的一個主要功能是提供通用功能集。程序員通過使用API函數開發應用程序,從而可以避免編寫無用程序,減輕編程任務。很多公司將開發崗位分為前端工程師和后端工程師,他們之間相互配合完成工作。一般來說,他們會協商接口的定義方式,其中一方定義接口(一般由后端工程師定義接口),另一方來調用接口,以實現預期功能。

前后端分離是近年來Web應用開發的一個發展趨勢。這種模式具有以下優勢。

① 后端工程師不用精通前端技術(如HTML、JavaScript或CSS),只專注于數據的處理,對外提供API即可。

② 前端工程師的專業性越來越強,其通過API獲取數據,并專注于頁面設計。

③ 前后端分離可擴大接口的應用范圍,開發的接口可以應用到Web頁面上,也可以應用到App上。

1.2.2 接口的分類

依據所遵循協議的不同,常見接口可以分為以下3類。

(1)HTTP接口,它是基于超文本傳輸協議(HyperText Transfer Protocol,HTTP)開發的接口,但并不能排除沒有使用其他協議。

(2)Web Service接口,它是系統對外的接口,比如你要從別的網站或服務器上獲取資源,一般來說,別人不會把數據庫共享給你,他們會提供一個他們寫好的方法,讓你用來獲取數據,你使用他們寫好的方法就能引用他們提供的接口,從而達到同步數據的目的。

(3)RESTful接口,簡稱為REST,其描述了一個架構樣式的網絡系統,核心是面向資源。REST專門針對網絡應用設計和開發方式,降低開發的復雜性,提高系統的可伸縮性。

基于瀏覽器/服務器模式(Brower/Server,B/S)的軟件系統接口大多數為HTTP接口,因此,本書將重點介紹HTTP接口的測試方法。要測試HTTP接口,首先需要了解HTTP、HTTP請求和響應的相關知識。

1.2.3 HTTP

HTTP是應用最為廣泛的網絡協議之一,所有的萬維網文件都必須遵守這個標準。設計HTTP的目的是為了提供一種發布和接收HTML頁面的方法。1960年德特·納爾遜(Ted Nelson)構思了一種通過計算機處理文本信息的方法,并稱之為超文本(HyperText),這成為HTTP標準架構的發展根基。Ted Nelson組織協調萬維網聯盟(World Wide Web Consortium,W3C)和互聯網工程任務組(The Internet Engineering Task Force,IETF)共同合作研究,最終發布了一系列請求評議(Request For Comments,RFC),其中著名的RFC 2616定義了HTTP 1.1。

HTTP的主要特點可概括為如下幾點。

(1)支持客戶端/服務器模式。客戶端向服務器請求服務時,只需傳送請求方法和路徑。常用的請求方法有GET、POST。每種方法規定的客戶端與服務器聯系的類型不同。

(2)簡單。由于HTTP簡單,服務器的程序規模小,因而通信速度比較快。

(3)靈活。HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由ContentType加以標記。

(4)無連接。限制每次連接,使其只處理一個請求。服務器處理完客戶端的請求,并收到客戶端的應答后,即斷開連接。采用這種方式可以節省傳輸時間。

(5)無狀態。HTTP是無狀態協議,無狀態是指協議對于事務處理沒有記憶能力。缺少狀態意味著如果后續處理需要前面的信息,則必須重新上傳,這樣可能導致每次連接傳送的數據量增大,如果服務器不需要前面的信息,則應答就會比較快。

1.2.4 HTTP請求

HTTP請求包含4個部分,分別是統一資源定位符、方法(Method)、頭(Headers)和體(Body)。

1. 統一資源定位符

統一資源定位符(Uniform Resource Locator,URL)是用于完整地描述互聯網上網頁和其他資源地址的一種標識方法。URL給資源的位置提供一種抽象的表示方法,并用這種方法給資源定位。只要能夠對資源定位,用戶就可以對資源進行各種操作,如存取、更新、替換和查看屬性等。這里的“資源”是指在互聯網上可以被訪問的任何對象,包括目錄、文件、圖像、聲音等,URL相當于文件名在網絡范圍的擴展。由于訪問不同資源所使用的協議不同,所以URL還給出了訪問某個資源時所使用的協議。URL的一般形式為“<協議>://<主機>:<端口>/<路徑>/<文件名>”。

其中,“<協議>”指出獲取該互聯網資源所使用的協議,HTTP請求使用的是HTTP,除此之外,還有文件傳輸協議(File Transfer Protocol,FTP);在“<協議>”后面必須寫上“://”,不能省略;“<主機>”指出萬維網文檔是在哪一個主機上,可以給出域名,也可以給出IP地址;“<端口>”為服務器監聽的端口,HTTP默認為80端口,FTP默認為21端口;“<路徑>”和“<文件名>”進一步給出資源在服務器上的位置,但是它們的名稱是虛擬的,和服務器上的物理名稱可能不同。

對于動態網頁,用戶通常還需要給服務器提供訪問動態網頁的參數。因此,URL后面還可以跟上一個英文問號,問號的后面以“參數名稱=參數值”的形式給出多組參數,每組之間用符號“&”分隔,稱之為查詢串(Query String)。具體形式為“<協議>://<主機>:<端口>/<路徑>/<文件名>?<參數1>=<值1>&<參數2>=<值2>”,如https://www.baidu.com/s?×××=top1000&wd=postman&rsv_idx=2(虛擬地址)。

打開百度瀏覽器,在搜索框中輸入“Postman”,搜索后的界面如圖1-2所示。此界面地址欄中的內容與上述虛擬地址相似。

圖1-2 接口請求結果

2. Method

HTTP定義了與服務器交互的不同方法(Method),基本方法有4種,分別是GET、POST、PUT和DELETE。可以這樣理解:URL地址用于描述一個網絡上的資源,而HTTP中的GET、POST、PUT和DELETE方法對應著這個資源的“查”“改”“增”“刪”操作,即GET一般用于獲取、查詢資源信息,而POST一般用于更新資源信息等。

除了上面介紹的4種方法,HTTP請求還包含PATCH、COPY、HEAD、OPTIONS、LINK、UNLINK、PURGE、LOCK、UNLOCK、PROPFIND、VIEW等方法,至于這些方法的具體含義,讀者可自行查閱相關資料,因為在進行接口測試的時候,遇到這些接口方法的概率非常小,而且即便遇到了,也可以借助Postman工具(后面章節將詳細介紹)構造出相應請求。

關于HTTP請求,GET方式和POST方式有什么區別呢?這一點在面試中也經常會遇到,具體如下。

(1)提交數據的方式不同

① GET。請求的數據會附在URL之后(即把數據放置在HTTP協議頭<requestline>中),以“?”(英文問號)分隔URL和傳輸數據,多個參數用“&”連接,如login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD(某個URL的其中一部分)。如果數據是英文字母、數字,則直接發送;如果是空格,則轉換為“+”后發送;如果是中文、其他字符,則會用Base64加密字符串,得出“%E4%BD%A0%E5%A5%BD”后發送。

② POST。把提交的數據放置在HTTP包的請求體<request-body>中。

因此,使用GET方式提交的數據會在地址欄中顯示出來,而使用POST方式提交的數據不會在地址欄中顯示。

(2)傳輸數據的大小不同

雖然HTTP沒有對傳輸的數據大小進行限制,HTTP規范也沒有對URL的長度進行限制,但是在實際開發中還會存在一些限制。

① GET。特定瀏覽器和服務器對URL的長度有限制,如IE對URL長度的限制是2 083Byte。其他瀏覽器,如FireFox,其限制取決于操作系統。因此,使用GET方式提交時,傳輸的數據就會受到URL長度的限制。

② POST。此方式由于不是通過URL傳值,理論上數據不受限制。但實際上,各個Web服務器會規定對使用POST方式提交的數據大小進行限制,Apache、IIS 6.0都有各自的配置。

(3)安全性不同

POST方式比GET方式的安全性更高。例如,通過GET方式提交數據,用戶名和密碼將以明文的形式出現在URL上,由于登錄頁面有可能被瀏覽器緩存,因此,其他人通過查看瀏覽器的歷史記錄,就可能知道你的賬號和密碼。

3. Headers和Body

HTTP報文是面向文本的,報文中的每一個字段都是ASCII碼串,各個字段的長度是不確定的。HTTP請求報文由請求行、頭、空行和請求數據4個部分組成,請求報文的一般格式如下。

  <request-line>
  <headers>
  <blank line>
  [<request-body>]

1.2.5 HTTP響應

將HTTP請求發送到服務器后,服務器會給出相應的應答,服務器返回的應答消息稱為HTTP響應。

1. HTTP響應報文

HTTP響應報文由3個部分組成,分別是狀態行、消息報頭和響應正文。HTTP響應的格式與請求的格式十分類似,具體格式如下。

  <status-line>
  <headers>
  <blank line>
  [<response-body>]

響應報文和請求報文的區別在于第一行中用狀態信息代替了請求信息。狀態行通過提供一個狀態碼來說明所請求的資源情況。

狀態行格式為HTTP-Version Status-Code Reason-Phrase CRLF。其中,HTTPVersion表示服務器HTTP的版本;Status-Code表示服務器返回的響應狀態代碼;Reason-Phrase表示狀態代碼的文本描述;CRLF表示一個回車符和一個換行符。狀態代碼由3位數字組成,第一個數字定義了響應的類別,它有如下5種取值可能。

1××:指示信息,表示請求已接收,繼續處理。

2××:成功,表示請求已被成功接收、理解和接受。

3××:重定向,要完成請求必須進行更進一步的操作。

4××:客戶端錯誤,請求有語法錯誤或請求無法實現。

5××:服務器錯誤,服務器未能實現合法的請求。

以下對常見狀態代碼和狀態描述進行說明。

200 OK:客戶端請求成功。

400 Bad Request:客戶端請求有語法錯誤,不能被服務器所理解。

401 Unauthorized:請求未經授權。

403 Forbidden:服務器收到請求,但是拒絕提供服務。

404 Not Found:請求資源不存在,如輸入了錯誤的URL。

500 Internal Server Error:服務器發生不可預期的錯誤。

503 Server Unavailable:服務器當前不能處理客戶端的請求,一段時間后可能恢復正常。

圖1-3為一個HTTP響應報文示例。

圖1-3 響應報文

2. JSON

(1)JS對象標記的定義

JS對象標記(JavaScript Object Notation, JSON)是一種輕量級的數據交換格式。它基于ECMAScript(W3C制定的JavaScript規范)的子集,采用完全獨立于編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得JSON成為理想的數據交換語言,其易于閱讀和編寫,同時也易于機器解析和生成,并能有效地提升網絡傳輸效率。因此,HTTP接口響應一般為JSON格式。

(2)JSON語法規則

JSON語法規則包括用大括號保存對象、用鍵值對表示對象、用逗號分隔每個對象、用中括號保存數組。

(3)JSON示例

  {"name": "storm", "age": "32", "sex": "male"}
主站蜘蛛池模板: 东乡族自治县| 十堰市| 昌邑市| 连州市| 綦江县| 安远县| 迭部县| 永胜县| 广安市| 常德市| 秭归县| 平乡县| 泰州市| 巴里| 普安县| 门头沟区| 大安市| 青州市| 油尖旺区| 连城县| 旺苍县| 壶关县| 福建省| 武隆县| 博白县| 龙陵县| 资兴市| 辽阳县| 襄樊市| 永靖县| 桑植县| 泗水县| 宜宾县| 于都县| 宝清县| 科技| 盘山县| 财经| 乐昌市| 涿鹿县| 无为县|