接口測試軟件測試的一種,它包括兩種測試類型:狹義上指的是直接針對應用程序接口(下面使用縮寫API指代,其中文簡稱為接口)的功能進行的測試;廣義上指集成測試中,通過調用API測試整體的功能完成度、可靠性、安全性與性能等指標。[1]

API的調用沒有用戶圖形界面(下稱GUI)操作,是一種發生在信息層的測試,[2] 在由於敏捷開發廣泛應用而使得GUI經常有變化的當下,利用GUI執行大批量自動化測試幾乎不可能,因而針對相對穩定不變的API進行的測試有着極高的重要性,將其自動化也是一個很重要的工作。[3][4]

API測試概述

編輯

API測試包括直接針對API本身進行的測試和將API置於實際應用環境,將API與其服務的用戶邏輯一同進行集成測試兩種。[1] 此類測試包括針對表現層狀態轉換(SOAP)應用程序接口、Web服務企業服務總線數據庫大型機網頁(及其UI),以及 企業資源計劃等相關系統的測試。

API測試的執行者除開發此API的開發人員外,還包括使用此API構建應用程序的人。[5]

API測試用於測試API收到合理參數,被調用後是否能夠以預期的格式返回正確的結果。在測試中尤其需要關注API對服務虛擬化英語Edge case是否能夠作出適當的處理:比如對一個不合理的輸入拋出合適錯誤、對極端的輸入也能夠在可以接受的響應時間內給出正確應答或是能夠妥善應對潛在安全攻擊(如XSS攻擊)。[1][4] 虛擬化則是在API測試中常用的一種模擬廣泛用戶場景的方法。[6]

API測試,GUI測試和測試自動化

編輯

相比於GUI測試,業界廣泛認為API測試更適合應用自動化測試持續測試英語Continuous testing連續測試方法(尤其與敏捷軟件開發方法和DevOps方法結合時)。[3] 原因如下:

  • 系統的複雜性: GUI測試無法充分驗證所有功能路徑及有着複雜結構的後端API/服務。
  • 發布周期、反饋周期短:採用敏捷開發和DevOps的團隊工作周期相對較短,經常按照客戶反饋修改產品,因而GUI變動可能比較頻繁,測試腳本無法固定。

由於這些原因,API被認為是待測系統中最穩定的界面,開發人員應當減輕他們對GUI測試的依賴,更多的向API測試中投入精力[4]

將API測試自動化的一大優點便是測試覆蓋面可以變得非常大,絕大多數的測試都可以自動化,這樣更多的邊緣就能被測試覆蓋到,可以有效地減輕邊緣缺陷造成的軟件問題。 這樣之後,也可以保留一部分GUI測試來針對系統級典型用戶場景進行遷移、可用性的測試。[3][4][7]

API測試應用場景

編輯

API測試通常應用在下列測試當中[7]

單元測試

編輯

計算機編程中,單元測試(英語:Unit Testing)又稱為模塊測試,是針對程序模塊軟件設計的最小單位)進行函數級正確性檢驗的測試工作[8]。程序單元是應用的最小可測試部件。在過程化編程中,一個單元就是單個程序、函數、過程等;對於面向對象編程,最小單元就是方法,包括基類(超類)、抽象類、或者派生類(子類)中的方法。

通常來說,程式設計師每修改一次程式就會進行最少一次單元測試,在編寫程式的過程中前後很可能要進行多次單元測試,以證實程式達到軟件規格書要求的工作目標——沒有程序錯誤

功能測試

編輯

功能測試是一種質量保證流程,是一種基於測試用例的軟件組件規範的黑盒測試[9]。在這種測試當中,被測函數是通過檢查輸入和輸出是否合理來測試的,很少考慮內部程序結構(不像白盒測試)。它是一種比單元測試規模更大的的測試,針對由多個單元構成的某一特定功能進行的測試, 包括測試用例的定義、執行、驗證和回歸測試[10]

負載測試

編輯

負載測試有時稱為極限測試(Extreme),這個術語在專業軟件測試社區中以不同的方式使用[11] 。它通常是指通過模擬多個用戶同時訪問軟件程序來模擬軟件實際使用場景中會遇到的情況並對其進行測試。因此,這種測試在測試多用戶系統時很常見。這種測試通常使用客戶機/服務器模型(如web服務器)構建。然而,其他軟件也可能需要進行負載測試。例如,文字處理器或圖形編輯器可能遇到讀取非常大文檔的情況;而一個金融方案可能會被要求按照總共幾年以上的數據生成一份報告。因此負載測試廣泛應用於各中軟件的開發中。負載測試最好模擬實際使用情況直接進行測試,而不是使用理論或分析模型「模擬」。

運行錯誤檢測

編輯

運行錯誤指的是儘管程序可以通過編譯開始執行,但是在執行過程中發生異常,提前退出程序。最常見的是指針越界,打開文件失敗繼續讀取文件,資源泄露(如內存泄漏死鎖)等。總而言之是讓計算機執行一些不能執行的語句時拋出的錯誤[12]

安全測試

編輯

包括 滲透測試模糊測試 以及驗證認證、加密和訪問控制API運行是否正常等測試內容,[13][14]

網頁UI測試

編輯

是集成測試的一部分,也涵蓋API測試的內容[15]

互操作性測試

編輯

互操作性(英文:Interoperability;中文又稱為:協同工作能力互用性)作為一種特性,它指的是不同的系統和組織機構之間相互合作,協同工作(即互操作)的能力。系統工程設計方面常常會用到這條術語。通過測試在不同環境下調用API時,API給出的功能反饋是否符合預期來測試待測系統的兼容性則是互操作性測試側重的內容[16]

Web服務規範測試(WS-*)

編輯

測試待測系統(一般針對應用SOAP協議的系統)是否符合WS-*規範[17]

滲透測試

編輯

滲透測試是指一個具備資安知識與經驗、技術人員受僱主所託,為雇主的網路設備、主機,模擬駭客的手法對網路或主機進行攻擊測試,為的是發掘系統漏洞、並提出改善方法。這種攻擊通常是出於善意的。對於API而言,這種測試則指的是通過滲透手段測試某個API中是否有可以利用漏洞[18]

模糊測試

編輯

模糊測試 (fuzz testing, fuzzing)是一種軟件測試技術。其核心思想是將自動或半自動生成的隨機數據輸入到一個程序中,並監視程序異常,如崩潰,斷言(assertion)失敗,以發現可能的程序錯誤,比如內存泄漏。模糊測試常常用於檢測軟件或計算機系統的安全漏洞。對於API而言,模糊測試指的是將大量隨機數據(或稱「噪聲」或「模糊」)強制輸入到API中以試圖引起系統崩潰、內存溢出或者其他負面情形來測試API應對「最壞的情況」時的極限處理能力[19]

API測試軟件

編輯

參見

編輯

外部連結

編輯

參考文獻

編輯
  1. ^ 1.0 1.1 1.2 Testing APIs protects applications and reputations頁面存檔備份,存於網際網路檔案館), by Amy Reichert, SearchSoftwareQuality March 2015
  2. ^ All About API Testing: An Interview with Jonathan Cooper頁面存檔備份,存於網際網路檔案館), by Cameron Philipp-Edmonds, Stickyminds August 19, 2014
  3. ^ 3.0 3.1 3.2 The Forrester Wave™ Evaluation Of Functional Test Automation (FTA) Is Out And It's All About Going Beyond GUI Testing 網際網路檔案館存檔,存檔日期2015-05-28., by Diego Lo Giudice, Forrester April 23, 2015
  4. ^ 4.0 4.1 4.2 4.3 Produce Better Software by Using a Layered Testing Strategy頁面存檔備份,存於網際網路檔案館), by SEAN Kenefick, Gartner January 7, 2014
  5. ^ Onus for third-party APIs is on enterprise developers頁面存檔備份,存於網際網路檔案館), by Amy Reichert, SearchSoftwareQuality July 2014
  6. ^ Accelerate Development with Automated Testing, by Nathan Wilson, Gartner December 30, 2013
  7. ^ 7.0 7.1 Cohn, Mike. Succeeding with Agile: Software Development Using Scrum. Addison-Wesley Professional. 2009: 312. ISBN 978-0321579362. 
  8. ^ 孫立財; 尹海波; 張巍. 软件的单元测试方法. 光電技術應用. 2006, 21 (2): 36–38 [2019-08-02]. (原始內容存檔於2019-08-02). 
  9. ^ Prasad, Dr. K.V.K.K. (2008) ISTQB Certification Study Guide, Wiley, ISBN 978-81-7722-711-6, p. vi
  10. ^ API/接口测试的目的与意义-软件功能测试自动化实战教程(3) - 51Testing软件测试网. www.51testing.com. [2019-08-02]. (原始內容存檔於2019-08-02). 
  11. ^ Wescott, Bob. The Every Computer Performance Book, Chapter 6: Load Testing. CreateSpace. 2013. ISBN 978-1482657753. 
  12. ^ 什么是编译错误,运行时错误及逻辑错误? - 云+社区 - 腾讯云. cloud.tencent.com. [2019-08-02]. (原始內容存檔於2019-08-02). 
  13. ^ 浅谈安全测试. www.51testing.com. [2019-08-02]. (原始內容存檔於2020-09-21). 
  14. ^ IBM Knowledge Center. www.ibm.com. [2019-08-02]. (原始內容存檔於2019-08-02) (中文(中國大陸)). 
  15. ^ Postman——API测试工具 - 先知社区. xz.aliyun.com. [2019-08-02]. (原始內容存檔於2019-08-02). 
  16. ^ Main Articles: 'Interoperability', Ariadne Issue 24. web.archive.org. 2008-09-19 [2019-08-02]. (原始內容存檔於2008-09-19). 
  17. ^ SOAP-over-UDP v1.1. docs.oasis-open.org. [2019-08-02]. (原始內容存檔於2010-07-07). 
  18. ^ 为什么要进行安全性测试? - 51Testing软件测试网. www.51testing.com. [2019-08-02]. (原始內容存檔於2020-09-21). 
  19. ^ Barton Miller (2008). "Preface". In Ari Takanen, Jared DeMott and Charlie Miller, Fuzzing for Software Security Testing and Quality Assurance, ISBN 978-1-59693-214-2