如何進行接口測試?如何做好接口測試?API 測試該了解的技術細節

2020-12-05 博為峰網校

首先,我們想,什麼是 API ?

簡單來說,API,是應用程式接口(Application Programming Interface,又稱為應用程式編程接口),是軟體系統不同組成部分銜接的約定。一個軟體系統越龐大,需要用到的接口相對越多,同時接口的複雜度和接口的設計都需更好的設計和提升。

那麼,什麼是 API 測試?

API 測試其實是一種用程序或工具來發送數據,同時驗收系統的返回值的方法。這種測試更偏向於業務實現邏輯。常見的網絡協議有 TCP、Http、webservice、socket 等,http?和 webservice 都是基於 TCP/IP 協議的應用層協議,webservice 是基於 http 的 soap 協議傳輸數據。我們今天主要說最常見的基於 http協議的API 的測試。

一般來說,API 測試是除去單元測試和白盒測試之外最能夠從底層發現問題的測試方法。那麼,API 測試需要注意哪些技術細節呢?換句話說,怎麼做一個好的 API 測試呢?

我們從以下四點說起:

1 、用例設計

如果把 API 看作一個黑盒的話,那麼我們首先可以設計基於邊界值法、等價類劃分法等的黑盒用例,這些設計思想其實佔據很大成分。常見的比如參數值的邊界,參數缺失/多餘,參數空/非空,特殊字符等;對於複雜的參數,比如結構體/數組鍊表等,可以考慮其最大長度限制/內置特殊字符等。

其次,請求方式/不合法的數據格式/不合法的cookie 也會影響到一個接口的返回值。還有,有些接口涉及到加密解密,需要傳一些密鑰值,一些非合法密鑰的檢驗,來觀察 API 的響應情況。最後,如果手裡有很詳細的接口文檔,把每個 return code 都覆蓋到,很有必要。比如正常是 200 OK,此外還有400(不合法請求),401(未授權),429(太多請求)等,或其它一些自定義的 error code,覆蓋的過程,也是把工程代碼分支覆蓋的過程。

2 、請求工具

一般用 Chrome 瀏覽器的話,postman 的使用頻次應該是最多的了。也可以下載postman 等位客戶端。之前用 Firefox 瀏覽器的時候,還用過 HttpRequester。不管用哪種,方法一樣。

首先,填寫好測試 URL,選擇測試方法(GET/POST/PUT/DELETE),設置 Header(常用的有 content-type/Cookie 等),設置 authorization type(Basic Auth等),最後在 body 中填充測試數據。接下來,點擊 send 就好啦,這樣就發送了一個請求到你的目標 API 了。

這裡面比較複雜的可能就是 body 了,常用的格式有 form-data, x-www-form-urlencoded, applictaion/json 等。用哪種格式,正規的接口文檔裡開發同學就會註明。此外,postman 有一個功能很 nice,就是它可以配置環境變量。把配置信息抽象成類,不同環境對應不同的實例,初始化設定後,在 request 請求中通過實例成員變量來引用不同的值,從而在需要的時候通過切換環境來選擇不同的配置信息。比如:我配置了一個env1 環境,並添加了一組 key 和 value,那麼當我引用{{}}這個變量時,就會替換成你所配置的。

3 、程序設計

首先是選擇用哪種語言和相應的請求包,比如 python 的話常用的就是 requests 庫,而Golang 的話你可以使用 net/http 包或是 gorequest 包。拿 python 來說,短短十來行代碼就可以模擬發送一個請求。

但是難點並不於此。

如何組織用例?

一般來說,用例可以分為單個接口用例和場景用例,單個接口很簡單,針對一個接口的參數設置邊界值,對應校驗不同的返回;場景用例涉及到多個接口的調用,用以簡單模擬用戶行為。

測試數據應該放在哪裡?

測試數據可以放在用例裡,也可以放在 json/yaml 等配置文件中。如果涉及到圖片/視頻等比較大的測試文件,最好不要存在本地,可以在測試伺服器搭建一個簡單server,比如使用 ngnix,接下來只需要訪問這些測試文件的連結就好了。

使用哪種風格的測試框架?

現在基本有 BDD 和 TDD 兩種框架之分,我更傾向於使用 BDD,也就是「行為驅動測試」。這個風格有兩個優點:

1.場景分級,易讀清晰,方便定位失敗的用例

2.新手好上手,BDD 的過程就是寫 case 的過程。下面是它的一個流程圖。

4 、接口分析

如果你的團隊裡面,能夠維護一份完整細緻的接口文檔,當然是最好的。如果沒有的話,那麼,優先去推動開發生成一份合適的 API 說明文檔吧。如果達不到這個階段,但是也要做自動化,那麼你就要掌握基本的抓包分析工具,能夠自己去抓包分析形成API 文檔。

所以接口分析是很必要的,也屬於接口測試的高階提升。比如接口定義是否冗餘,接口的請求欄位是否冗餘,接口調用是否得到了所有期望的信息,接口調用是否合理方便,接口是否做到最資料庫進行了正確的變更,接口的平均響應速度是否在可接受範圍等。這些指標的分析,有時候可以反饋給開發同學,對優化整體性能也是有益處的。同時,這些分析可以幫助你更好理解這個過程的來龍去脈,理解這些 API 做了什麼,又產生了什麼影響。

總之,API 測試上手很簡單,但做得好,做成工程化還真需要費一點力氣,一些技術細節的把控和提升,會無形中提升整體的測試水準;而如何讓 API 測試真正在我們的日常工作中發揮出最大作用,也需慢慢研究和調整的。

相關焦點

  • python 如何使用HttpRunner做接口自動化測試
    前言原始測試包含 3 層,分別是:UI 自動化測試、接口服務測試、單元測試其中,單元測試是對軟體的最小可測試單元進行檢查和驗證,也是產生效率最大的一項測試接口服務測試分為模塊接口測試和協議接口測試UI 測試主要是為了取代人力操作,通過 UI 自動化去模擬操作,降低回歸測試的成本考慮到投入產出率,大部分企業都會將測試重點放在接口自動化測試這一項上
  • 乾貨丨Python接口測試自動化實戰及代碼示例:含get、post等方法
    對於接口來說,往往需要傳入很多參數,並且這每個參數又有很多取值,如果不對原先的 unittest 框架做改變,不僅無法用來進行接口測試,而且一個個結合參數取值去寫測試代碼,工作量極其龐大,也沒有實現測試數據與腳本沒有分離。基於此,我們對該框架做出一下兩點優化。
  • 研究人員制定了規範神經接口性能測試的準則
    美國看病服務機構和生元國際了解到,如果沒有統一的標準,科學家們如何測量和定義神經電極的性能?弗萊堡微系統工程師瑪麗亞莉蓮一起基督教銀亮鋼博士博士和教授託馬斯·施蒂格利茨博士和教授盧西亞諾Fadiga博士和斯特凡諾Carli義大利費拉拉大學理工學院,義大利已經制定了指導方針,規範測試電極的性能的神經接口和bioelectronic系統。研究人員在《自然協議》上發表了他們的教程。
  • 如何進行CAN通信設備的批量老化測試
    老化測試是產品生產中必不可少的環節,對於CAN通信設備如何進行批量高效的老化測試呢?本文將從成本及方案優化兩方面簡述測試方法。
  • IT職業新方向」技術大牛獨家繪製的接口測試學習路線圖…
    所以為了很大程度上減少返工,針對系統內部以及外部的接口進行測試,一方面測試工作可以介入的更早一些,另一方面接口測試與界面是無關的。所以鑑於此,接口測試的優勢就越來越被企業所重視。2.隨著系統跨平臺的發展趨勢愈演愈烈,以及不同系統之間數據交換的頻率越來越高,接口的設計和存在也越來越廣泛了。所以在一個系統中存在多種多樣的接口就演變為一種必然的技術架構模式。
  • 什麼是API(應用程式編程接口)?
    如果按照PC Mag的定義,這個術語是應用程式編程接口的縮寫 - 但這並不能解釋任何事情。為了幫助你理解API是什麼以及它是如何工作的,我們將用任何人都可以理解的語言來解釋APIS的細節。什麼是應用程式編程接口?從嚴格的技術角度來看,API是一組訪問基於Internet的服務或應用程式的標準和說明。
  • tp5.1的RestApi風格接口
    最近在一個thinkphp的項目,想著目前一直很流行的restful接口風格的api接口,就嘗試用tp5.1的restful接口風格寫了一套demo示例,並包括版本控制的接口示例,demo項目可以通過gitee或github下載。
  • 如何保障 API 接口的安全性?
    個人覺得安全措施主要體現在兩個方面,一個是如何保證數據在傳輸過程中的安全性,另一個是如何在數據已經到達服務端後,服務端如何識別數據,保證不被攻擊。下面我們一條一條來聊:1.想要調用我們的 API 接口,必須通過線下的方式像我申請一個 AppID ,只有當這個 AppID 開通後,才能對我的接口進行合法的訪問,在進行接口訪問的時候,這個 AppID 需要添加到請求參數中,與其他數據一起提交。
  • BitCherry測試網第一輪「Bug懸賞活動」正式開啟
    為了使BitCherry測試網絡的功能和服務得到不斷優化,創建更多的優質應用,壯大BitCherry技術社區,BitCherry發布了「1000萬開發者獎勵計劃」,面向全球招募優秀的測試開發者,開發者用戶們可以參與到BitCherry網絡測試的環境中,並通過BitCherry發布的開發者任務,贏取高達1000萬BCHC的任務獎勵。
  • 馬斯克的腦機接口最快今年人體測試 最終目標是下載大腦數據
    據外媒報導,埃隆·馬斯克旗下腦機接口初創公司Neuralinkyou有望於今年展開人體測試,Neuralink是馬斯克於2016年成立,該公司正在探索人腦如何與計算機連接,旨在解決腦部、神經等疾病。不過,馬斯克的終極目標是將人腦下載到電腦中,實現腦機融合。
  • API接口對接第三方及開發者API接口調用
    了解API接口基本知識,日常工作者可以更清楚需要輸出什麼樣的接口,什麼是關鍵接口,才能更好地進行功能規劃的提前布局和後續的壓力測試。我們基本遇到的API接口的使用場景分為下面三個場景:01-公司內部前後端數據交互前端想要獲得某些數據,將傳入參數通過URL接口地址,傳遞給伺服器,伺服器根據傳入的參數了解到前端要獲得什麼數據,去資料庫查詢獲取數據,然後將所需數據返回給前端,前端拿到數據做相應的頁面展示。
  • 馬斯克公布腦機接口系統:可iPhone控制,明年人體測試
    馬斯克宣布該公司已經開發出一套腦機接口系統:利用一臺神經手術機器人向大腦內植入4-6微米粗細的線,就可以直接通過USB-C接口讀取大腦信號,甚至可以通過iPhone進行控制。據介紹,該技術有望在2020年開始進行人體測試。當天,馬斯克在視頻網站Youtube上進行了直播演示,並稱「猴子已經能用大腦控制電腦了。」
  • 基於CPCI總線接口和LVDS接口的接收和傳輸測試數據實驗設計
    基於CPCI總線接口和LVDS接口的接收和傳輸測試數據實驗設計 李金焦新泉劉東海 發表於 2020-01-26 16:08:00 0 引言 隨著科學技術的迅猛發展
  • 西安Python測試開發全棧核心課程
    鑑於以上的種種方面,我們此次課程中給大家提供了各種不同協議,不同類型的接口項目,帶領大家一起進行接口測試的實戰。不光只是完成接口測試,而是要掌握全套的接口測試工作流程。通過實際的接口項目讓大家親身學習並完成所有接口測試所需要的成果物,從接口的測試需求分析、接口冒煙測試、接口自動化測試直到接口測試框架的設計和實踐。
  • 軟體測試中的性能測試 負載測試 壓力測試
    負載測試計劃多少用戶數量、使用什麼類型的機器、以及在什麼環境下進行。主要基於兩個重要的文檔,任務分布圖和事務信息,任務分布圖告訴我們在負載時間段內,某一個事務使用的用戶數,高峰使用率及低峰使用率均來自該文檔;事務信息告訴我們事務名及優先級,在設計場景時可以參考。
  • 如何設計restful風格接口
    restful風格接口URL定位資源,用HTTP動詞(GET,POST,DELETE,DETC)描述操作。識別(identify)、 表示(represent) 、交互(interact with)。看Url就知道要什麼看http method就知道幹什麼看http status code就知道結果如何1.
  • MDO3000示波器在通信和 I/O接口測試中的用途
    (2)I/O接口控制卡 由若干個集成電路按一定的邏輯組成為一個部件,或者直接與CPU同在主板上,或是一個插件插在系統總線插槽上。 按照接口的連接對象來分,又可以將他們分為串行接口、並行接口、鍵盤接口和磁碟接口等。
  • ...VS 實時示波器:實時示波器在新一代光接口時域測試上的應用
    挑戰:長久以來,工程師們在進行光接口測試(尤其是光模塊測試)時都不擔心同步觸發時鐘,要麼從碼型發生器(Pattern Generator)引過來、要麼使用時鐘恢復單元(Clock Recovery)從被測信號上恢復時鐘。
  • 開發三年轉測試,除了Python基礎外,還需哪些必備測試技能?
    --hard HEAD^Q3: gitlab如何進行分支保護和代碼審查Gitlab是部署在自己伺服器的一套git代碼版本管理系統,部署完畢後讓自己的成員在該網址上註冊好帳號,管理員建立對應的項目組並且拉相關成員進組,需要給對應的成員設置好角色,因為角色不同決定了對整個項目的操作權限不同。
  • IntelliJ IDEA 的這個接口調試工具真是太好用了!
    工作照常幹,領導需要幾個新功能接口開發。以前在公司辦公,通常開發完的功能沒什麼問題,暴露出 Swagger 接口文檔,直接找旁邊的前端大人聯調測試了。當下,君在長江頭,我在長江尾,夜夜思君不敢出門見君啊,一切測試全交給自己吧:雖然想念前端,但是在家辦公也絕對是和在公司辦公一樣一樣的,高效不(qu)摸魚。