接口測試是軟件測試中的一項重要工作,它涉及到系統與系統之間的交互點。接口可以是外部接口,也可以是內部接口,包括上層服務與下層服務接口以及同級接口。在接口測試中,我們需要確保接口能夠按照預期的方式進行通信和交互,并且能夠正確處理輸入和輸出數據。
什么是接口?
接口是具有特定輸入和輸出的一套邏輯處理單元,它不需要了解內部的實現邏輯,可以看作是黑盒處理邏輯。接口可以是外部系統與系統之間的交互點,也可以是系統內部不同子系統之間的交互點。
如果模塊請求由?HTTP?改為 HTTPS,測試方案應該如何制定和修改?
首先,嘗試使用 HTTP 和 HTTPS 分別進行登錄。如果使用 HTTPS 可以正常登錄,并且瀏覽器地址欄顯示一個鎖頭圖標,說明該網站已經部署了 SSL。如果 HTTP 和 HTTPS 都可以正常登錄,進一步說明該網站沒有設置強制使用 HTTPS 登錄,或者沒有設置 HTTP 自動跳轉到 HTTPS。
如果使用 HTTP 登錄后跳轉到 HTTPS 頁面,說明該網站已經部署了 SSL,并且設置了 HTTP 自動跳轉到 HTTPS。
根據實際情況和需求,可以調整測試方案并相應地修改模塊的請求方式。
常用的 HTTP?協議調試代理工具有哪些?詳細說明抓取 HTTPS 協議的設置過程。
常用的 HTTP 協議調試代理工具包括 Fiddler、Charles、Postman 等。以下以 Fiddler 為例,詳細說明抓取 HTTPS 協議的設置過程:
打開 Fiddler 工具,在菜單欄選擇 “Tools”,然后選擇 “Options”。
在 “Options” 窗口中,選擇 “HTTPS” 選項卡,并勾選 “Capture HTTPS CONNECTs” 和 “Decrypt HTTPS traffic” 選項。
根據需要選擇要解密的來源,可以選擇 “All Processes” 或者手動添加需要解密的進程。
可選擇是否忽略服務證書錯誤,根據測試需求進行設置。
完成以上設置后,可以在瀏覽器中設置代理地址為 “IP:8888”,然后安裝 Fiddler 提供的證書,即可在瀏覽器中抓取 HTTPS 協議的數據流量。
接口產生的垃圾數據如何清理?
利用數據庫操作進行數據的增刪改查,通過造數據和數據清理來處理垃圾數據。
在測試用例的前置操作中,可以使用 setUp 方法進行數據準備。
在后置操作中,可以使用 tearDown 方法進行數據清理。
在執行測試前整庫備份,測試完畢,備份還原(不推薦)
依賴第三方接口的處理方法是什么?
搭建一個模擬服務,以模擬第三方接口的返回數據。例如,可以使用 Moco 這樣的開源框架來搭建模擬服務。搭建模擬服務需要熟悉相關工具和框架,并能夠掌握如何模擬返回的數據、數據格式以及請求方式等。
利用一些模擬工具(如 JSON Server、EasyMock)來模擬第三方接口的數據返回,以盡可能減少對第三方數據接口的依賴。
測試數據應該放在哪里?
測試數據的存放位置可以根據實際情況和需求來決定。以下是一些常用的測試數據存放方法:
對于登錄賬戶數據、注冊賬戶數據、接口參數以及郵箱配置數據等不同類型的數據,可以根據其特點進行存放。例如,登錄賬戶數據和注冊賬戶數據可以使用配置文件(如 INI 文件)存放;接口參數可以使用 YAML、JSON、Excel 等格式進行存放。
對于一些需要多組測試參數的接口,可以采用參數化的方式進行數據存放。可以使用 YAML、文本、JSON、Excel 等文件來管理參數化數據。
對于需要反復使用的數據,例如訂單狀態數據,可以將其存放到數據庫中,在每次數據初始化之后使用,并在使用完畢后進行清理。
對于少量的靜態數據,如單個接口的測試數據,可以將其寫入到腳本的開頭部分,或者使用全局變量進行存儲。
什么是數據驅動,如何進行參數化?
數據驅動是一種測試方法,通過將測試數據和測試邏輯分離,實現對測試數據的靈活管理和重復使用。參數化是數據驅動的一種常見方式,它通過在測試用例中引入參數,根據不同的參數生成多個測試用例。
在接口測試中,數據驅動和參數化的概念非常重要,可以提高測試效率和覆蓋率。以下是一些常用的數據驅動和參數化的實現方式:
在 Python 的 unittest 框架中,可以使用 ddt 模塊來實現數據驅動和參數化。通過使用 @ddt 和 @data 這兩個裝飾器,可以在測試用例中傳入不同的參數,并生成對應的測試用例。
在 pytest 框架中,可以使用 @pytest.mark.parametrize 裝飾器實現參數化。通過傳入不同的參數組合,生成對應的多個測試用例。
如何處理下一個接口請求參數依賴上一個接口的返回數據?
將不同的接口封裝為不同的函數或方法,讓其返回所需的數據。使用一個中間變量來接收上一個接口返回的數據,并將其傳遞給下一個接口。可以使用全局變量或者測試類的屬性來保存中間數據或者數據庫等等。
對于單接口測試中,如果依賴接口只需要在測試開始執行一次,可以將依賴接口的請求放在類級別的前置方法中,并通過全局變量或者當前用例類的屬性來傳遞依賴數據。例如,使用類屬性 cls.token = data[‘token’] 來保存依賴的 token 數據。
對于單接口測試中,如果依賴接口需要在每個用例前執行,可以將依賴接口的請求放在方法級別的前置方法中,并通過用例對象的屬性來傳遞依賴數據。例如,使用實例屬性 self.order_id= res[‘id’] 來保存依賴的 ID 數據。
對于多接口的業務流測試,可以通過當前用例類的屬性來傳遞下一個接口所需的依賴數據。例如,使用類屬性 self.class.order_id = self._response.json()[‘data’][‘id’] 來傳遞下一個接口需要的數據。
如何處理依賴登錄狀態的接口?
對于需要 token 的登錄接口,可以在登錄后將 token 存儲到一個 YAML、JSON 文件中,或者直接使用全局變量或測試類的屬性進行保存。后續的請求可以從存儲的位置獲取 token 并使用。
對于需要 cookies 參數的接口,可以使用 requests.session() 創建一個會話對象,并在后續的請求中使用該會話對象進行自動關聯 cookies。通過 s.get() 和 s.post() 方法發送請求,會話對象會自動關聯 cookies。
接口測試的步驟有哪些?
發送接口請求:使用合適的工具或框架發送請求,并攜帶請求參數。
測試接口獲取返回值:獲取接口返回的數據,包括響應狀態碼、響應頭和響應體等。
斷言:根據預期結果,對接口返回的數據進行斷言判斷,驗證實際結果是否符合預期。
如何測試依賴登錄狀態的接口?
在測試開始前先進行登錄操作,獲取有效的登錄憑證(如 token 或 cookies)。
在每個需要登錄狀態的接口測試用例中,先進行登錄操作,并獲取登錄憑證。
將獲取的登錄憑證保存在全局變量、測試類的屬性或者配置文件中,以便在后續的請求中使用。
在發送請求時,將登錄憑證作為請求參數或者請求頭的一部分進行攜帶。
在接口返回結果中驗證登錄狀態相關的信息,確保接口正確處理了登錄狀態。
解釋什么是 SOAP?
SOAP代表簡單對象訪問協議(Simple Object Access Protocol),它是一種基于XML的協議,用于在計算機之間交換結構化信息。SOAP被設計用于不同的應用程序和操作系統之間的通信,它使用XML格式來定義消息的結構和內容,并使用HTTP、SMTP等協議進行消息的傳輸。SOAP通常用于Web服務之間的通信,通過SOAP協議,應用程序可以以標準的方式進行遠程過程調用(RPC)。
解釋什么是 REST API?
REST API是一組用于實現網絡應用程序之間通信的功能集合。REST代表表現層狀態轉移(Representational State Transfer),它是一種基于HTTP協議的設計風格,被廣泛應用于構建分布式系統和互聯網應用。REST API使用HTTP方法(GET、POST、PUT、DELETE等)來實現對資源的訪問和操作,并使用URL來定位資源。相比于SOAP等復雜的協議,REST API更加簡單、輕量且易于理解,它已成為創建Web服務和移動應用程序的常用標準。
API測試發現的Bug類型是什么?
缺少或重復的功能:API未實現某些功能或存在重復的功能。
無法正常處理錯誤條件:API未能正確處理錯誤情況,如無效的輸入、異常情況等。
可靠性:API在高負載、并發或異常網絡情況下的表現不穩定或不可靠。
安全:API存在安全漏洞,如未經身份驗證的訪問、敏感數據泄露等。
未使用的標志:API中存在未使用或廢棄的標志或參數。
未實現錯誤:API中存在未實現或未正確實現的功能。
錯誤處理不一致:API對不同的錯誤條件沒有統一的處理方式或錯誤信息不一致。
性能:API在處理大數據量或高并發情況下性能下降或出現延遲。
多線程問題:API在多線程環境下出現數據競爭、同步問題等。
錯誤不正確:API返回的錯誤信息或狀態碼與預期結果不符。
你測試的接口屬于哪一類?
測試的接口屬于服務器接口,即基于HTTP協議的接口。這類接口通常是B/S架構的,由客戶端(如瀏覽器)調用或模擬客戶端調用服務器提供的請求接口,服務器完成處理并返回響應。例如,Web服務接口、HTTP接口、JMS接口、Hessian接口等都屬于這一類別。
Cookie 保存在哪里?
Cookie可以保存在不同的位置,具體取決于是否設置了過期時間:
如果設置了過期時間,Cookie將保存在客戶端的硬盤中,即存儲在瀏覽器的Cookie文件中。
如果沒有設置過期時間,Cookie將保存在客戶端的內存中,即存儲在瀏覽器的內存中。這種類型的Cookie通常稱為會話Cookie,它只在瀏覽器會話期間有效,關閉瀏覽器后會被刪除。
HTTP 有哪些請求方法?
GET:用于請求獲取指定資源的表示。通過URL傳遞參數,通常用于獲取數據。
POST:用于向指定資源提交數據,通常用于提交表單或進行資源創建。
PUT:用于向指定資源位置上傳新的表示,通常用于資源的更新。
DELETE:用于請求刪除指定的資源。
OPTIONS:用于獲取目標資源所支持的通信選項。
HEAD:類似于GET請求,但只返回響應頭部信息,不返回響應體。
PATCH:對資源進行部分修改。
接口自動化測試的流程?
需求分析:了解接口的功能和需求,明確測試的目標和范圍。
用例設計:根據需求編寫測試用例,包括正向測試、邊界測試、異常測試等不同場景的測試用例。
腳本開發:使用合適的編程語言和測試框架編寫自動化測試腳本,實現接口的請求和響應驗證等功能。
測試執行:執行自動化測試腳本,發送接口請求并獲取響應結果。
結果分析:對測試結果進行分析和比對,判斷接口是否符合預期結果。
缺陷跟蹤:如果發現接口存在缺陷,及時記錄并跟蹤缺陷,確保問題得到解決。
報告生成:生成測試報告,包括測試覆蓋率、測試結果、缺陷統計等信息,供團隊和管理層查閱。
接口測試用例的編寫要點有哪些?
必填字段:測試請求參數的必填項和可選項。
合法性:驗證輸入和輸出數據的合法性,包括合法的參數值、數據類型等。
邊界:測試請求參數的邊界值,例如最大值、最小值、臨界值等。
容錯能力:測試接口在大容量數據、頻繁請求、重復請求等異常情況下的處理能力。
響應數據校驗:對接口的響應數據進行斷言和校驗,驗證返回結果是否符合預期。
邏輯校驗:測試不同接口之間的邏輯關系,如某些請求需要按嚴格的先后順序調用。
性能:進行接口的并發測試,逐步增加負載,分析系統的性能瓶頸點。
安全性:測試接口的安全性,如輸入惡意字符、注入攻擊、敏感信息泄露等。
異常處理:測試接口在各種異常情況下的處理能力,如網絡異常、服務器錯誤等。
UI 級別測試和 API 測試之間的關鍵區別?
目標、方法、技術。
UI級別測試(User Interface Testing)關注于測試應用程序的用戶界面,驗證用戶如何與應用程序進行交互,測試應用程序元素的外觀和行為,例如按鈕、表單、布局等。UI級別測試主要關注應用程序的外觀和用戶體驗。
API測試(Application Programming Interface Testing)關注于測試應用程序接口,驗證接口的功能、性能、可靠性等。API測試主要關注應用程序的功能和內部邏輯,獨立于用戶界面。API測試可以通過直接調用接口發送請求并驗證響應結果來進行,無需依賴UI界面。
UI級別測試和API測試是在不同層面上進行的測試,UI級別測試更加關注應用程序的外觀和用戶交互,而API測試更加關注應用程序的功能和內部實現。
最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:
這些資料,對于【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴上萬個測試工程師們走過最艱難的路程,希望也能幫助到你!?