接口自動化精選面試干貨,助你離Offer又近一步!
只要技術過硬,準備充分,任何時候都是找工作的黃金時期。
請問你是如何做接口測試的?
大體來說,經(jīng)歷以下過程:接口需求調(diào)研、接口測試工具選擇、接口測試用例編寫、接口測試執(zhí)行、接口測試回歸、接口測試自動化持續(xù)集成。具體來說,接口測試流程分成以下九步:
第一步:分析出測試需求,并請開發(fā)提供接口說明文檔;
第二步:從接口說明文檔中整理出接口測試用例,里面要包括詳細的入?yún)?span style="max-width: 100%;color: rgb(61, 70, 77);font-family: -apple-system, system-ui, 'Helvetica Neue', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei UI', 'Microsoft YaHei', Arial, sans-serif;letter-spacing: 0.12px;background-color: rgb(255, 255, 255);box-sizing: border-box !important;overflow-wrap: break-word !important;">(正常情況,異常情況包括輸入?yún)?shù)個數(shù),類型,可選/必選,考慮參數(shù)有互斥或關聯(lián)的情況)和出參數(shù)據(jù)(符合接口文檔需求)以及明確的格式和檢查點;
第三步:與開發(fā)一起對接口測試用例進行評審;
第四步:結(jié)合開發(fā)庫,準備接口測試用例中的入?yún)?shù)據(jù)和出參數(shù)據(jù),并整理成Excel格式的文件;
第五步:結(jié)合接口測試用例文檔和Excel格式的數(shù)據(jù)文檔,編寫接口自動化測試的業(yè)務邏輯代碼;
第六步:開始執(zhí)行接口自動化測試用例;
第七步:執(zhí)行如有bug,提交至缺陷管理平臺;
第八步:開發(fā)修改完成后,回歸bug,跟蹤狀態(tài);
第九步:完成后進行自動化持續(xù)集成;
接口測試如何設計測試用例?
主要從四個方面來設計接口用例:功能,業(yè)務邏輯,異常,安全。
功能:是否符合需求
1)從用戶角度出發(fā)看接口能否實現(xiàn)業(yè)務需求,功能是否正常;
2)功能是否按照接口文檔實現(xiàn);
舉例:比如博客園添加隨筆,需要登錄才能添加。也就是業(yè)務要求不支持游客添加隨筆功能,如果設計一個沒有登錄的用戶,然后去測試添加隨筆接口,結(jié)果接口能添加到隨筆,說明功能不正常,不符合需求和接口文檔描述。
業(yè)務邏輯:是否依賴業(yè)務
1)接口實現(xiàn)邏輯;
2)業(yè)務邏輯覆蓋(語句/條件/分支/判定/…);
舉例:該接口調(diào)用之前,需要調(diào)用登錄接口,如果不登錄也能請求數(shù)據(jù),不符合業(yè)務邏輯。
異常:參數(shù)異常和數(shù)據(jù)異常
1)參數(shù)異常:關鍵字參數(shù),參數(shù)為空,多,少參數(shù),錯誤參數(shù);
2)數(shù)據(jù)異常:關鍵字數(shù)據(jù),數(shù)據(jù)為空,長度不一致,錯誤數(shù)據(jù);
舉例:不管數(shù)據(jù)異常還是參數(shù)異常,測試點差不多,一個參數(shù)有key和value,key表示參數(shù),value表示數(shù)據(jù)。第一,看看參數(shù)和數(shù)據(jù)能不能支持關鍵字,例如Java中的保留關鍵字等等;第二就是參數(shù)和數(shù)據(jù)都為空,看看是否做了判斷;第三,參數(shù)多和少,例如有兩個參數(shù)的接口,需要設計一個包含三個參數(shù)的用例,一個只有一個參數(shù)的用例。數(shù)據(jù)長度不一致,例如設計很長的字符串是否支持,因為數(shù)據(jù)庫創(chuàng)建表過程都設置好了每個字段的長度。輸入錯誤的參數(shù)和數(shù)據(jù),如故意輸錯單詞等等。
安全測試用例設計:
1)cookie:有cookie才能獲取數(shù)據(jù),如果不帶cookie還有信息返回,說明有問題;
2)header:正常接口帶header信息,刪除header看是否能夠返回數(shù)據(jù);
3)唯一識別碼:app手機識別碼,一般是唯一的;
4)文本輸入框sql注入和xss攻擊。
接口測試執(zhí)行中需要比對數(shù)據(jù)庫嗎?
接口的返回關鍵字段和字段值是需要校驗的,不然接口測試就沒有意義了。
一般有兩種方式:
1)數(shù)據(jù)庫預置數(shù)據(jù),接口校驗返回;
2)接口調(diào)用,比對數(shù)據(jù)庫查詢結(jié)果。
接口測試質(zhì)量評估標準是什么?
一般來說,從以下八個方面評估:
1) 業(yè)務功能覆蓋是否完整;
2) 業(yè)務規(guī)則覆蓋是否完整;
3) 參數(shù)驗證是否達到要求(邊界、業(yè)務規(guī)則);
4) 接口異常場景覆蓋是否完整;
5) 接口覆蓋率是否達到要求;
6) 代碼覆蓋率是否達到要求;
7) 性能指標是否滿足要求;
8) 安全指標是否滿足要求;
接口產(chǎn)生的垃圾數(shù)據(jù)如何清理
造數(shù)據(jù)和數(shù)據(jù)清理,需用Python連數(shù)據(jù)庫了,做增刪改查的操作測試用例前置操作。
setUp做數(shù)據(jù)準備后置操作;
tearDown做數(shù)據(jù)清理;
其他接口要先獲取接口信息,如何讓登錄的接口只在其他接口調(diào)用一次?
解決方法如下:
使用單例模式;
使用自定義緩存機制;
使用測試框架中的 setup 機制;
pytest 中 fixture 機制;
接口測試斷言從哪些方面去設計?
接口測試斷言可以從以下五個方面進行設計:
1)響應碼:檢查響應碼是否符合預期,用來判斷測試用例是否執(zhí)行成功(針對http接口);
2)關鍵字:驗證關鍵字是否符合預期,用來判斷測試用例是否執(zhí)行成功;
3)正則匹配:當一個接口返回的內(nèi)容較多,并且有一定規(guī)律時,可通過正則表達式來校驗接口返回的信息來判定測試用例是否執(zhí)行成功;
4)數(shù)據(jù)庫匹配核對:比如對查詢一個接口返回的數(shù)據(jù)進行驗證時,可通過編寫sql語句查詢結(jié)果,然后將sql語句執(zhí)行后數(shù)據(jù)庫返回的結(jié)果與接口返回的結(jié)果進行核對,以此來判定測試用例是否執(zhí)行成功;
5)通過相關接口進行輔助驗證:比如,當測試一個刪除接口時,刪除一條記錄后,想驗證這條記錄真的被刪除,可調(diào)用查詢接口,若刪除的記錄沒被查詢到,則說明刪除這條記錄成功。
依賴于第三方數(shù)據(jù)的接口如何進行測試?
可以利用一些Mock工具(如:JSON Server、Easy Mock)來模擬第三方的數(shù)據(jù)返回,最大限度的降低對第三方數(shù)據(jù)接口的依賴。Mock服務是指在測試過程中對于某些復雜(或者不太好構造)的對象,用一個虛擬的對象替代它。如現(xiàn)在有A和B兩個接口, A需要調(diào)用接口B才能完成業(yè)務需求。這個時候B接口有如下三種情況:
1)B接口還沒有開發(fā)完成:需要等待接口的數(shù)據(jù)來進行開發(fā),這時候完善的接口Mock服務能大大縮短開發(fā)聯(lián)調(diào)等待時間。
2)B的某些場景很難去模擬:比如超時、未知錯誤或者不穩(wěn)定的第三方接口。
3)性能測試中隔離B接口(第三方接口):在進行壓測的時候就會遇到問題。
API測試有哪些優(yōu)勢?
API是(Application Programming Interface),即應用程序編程接口。API是一組用于構建軟件應用程序的規(guī)程,協(xié)議和工具。API充當軟件應用程序之間的接口,并允許兩個軟件應用程序相互通信。API是一組軟件功能,可以由其他軟件執(zhí)行。API測試具備如下優(yōu)勢:
更快及更高的測試覆蓋率。
API測試有助于我們降低測試成本。通過API測試,我們可以在GUI測試之前找到小錯誤。在GUI測試期間,這些小錯誤將變得更大。因此,在API測試中發(fā)現(xiàn)這些錯誤將對公司具有成本效益。
API測試與語言無關。
API測試在測試核心功能方面非常有用。我們可以在沒有用戶界面的情況下測試API。在GUI測試中,我們需要等到應用程序可用于測試核心功能。
API測試有助于我們降低風險。
接口調(diào)不通,如何去排查?
接口調(diào)不通的原因:
1)接口沒有任何響應
很多時候在做接口測試時,會發(fā)現(xiàn)接口沒有任何返回,比如瀏覽器一直在轉(zhuǎn)圈,或者返回一個空白頁面。用接口測試工具時,工具報錯,提示“no response”。
??排查思路:
1.先檢查接口ip是否正確,可以通過在本機ping 接口的ip,檢查網(wǎng)絡是否通暢;
2. 檢查接口的端口號是否正確,可以通過在本機telnet接口的ip和端口號,檢查端口是否能連通;
3.檢查項目是否啟動或者部署成功,可以找研發(fā)確認,或者自己登錄到服務器上,通過ps命令檢查項目的進程是否存在,然后用tail命令查看部署日志;
4.檢查服務器防火墻是否關閉,如果因為安全或者權限問題不能關閉,需要找運維進行策略配置,開放對應的ip和端口號;
5.檢查你的客戶端(瀏覽器/測試工具),是否設置了網(wǎng)絡代理,網(wǎng)絡代理可能會造成請求失??;
6.檢查操作系統(tǒng)的host文件,是否綁定了一個錯誤的ip映射;
2)接口有響應但是返回了錯誤的狀態(tài)碼
有些時候接口會返回一些錯誤的HTTP狀態(tài)碼,需要根據(jù)不同的狀態(tài)碼來確定具體的原因。
??排查思路:
400:客戶端請求錯誤,比如請求參數(shù)格式錯誤(如json字符串不合法);
401:未授權,比如在請求header里,缺乏必要的信息頭(如token、auth等字段);
403:禁止,常見的原因是用戶的賬號沒有對應的url權限,還有就是項目所用的中間件,不允許遠程訪問(比如Apache);
404:資源未找到,導致這種情況的原因很多,比如:
url拼寫錯誤;
url后有空格;
項目沒有啟動成功;
請求協(xié)議不對,如http/https;
405:方法不允許,常見的原因是請求方式不正確,比如GET類型接口,使用POST方式去請求;
415:不支持的媒體類型,常見原因是請求數(shù)據(jù)的類型和服務端支持的類型不匹配,比如json接口,需要添加一個信息頭Content-type:application/json;
500:服務器內(nèi)部錯誤,出現(xiàn)這種情況,說明服務端內(nèi)部報錯了,需要登錄到服務器上,檢查錯誤日志,根據(jù)具體的提示信息再進行排查;
502/503/504(Bad Gateway/錯誤的網(wǎng)關、Service Unavailable/服務無法獲得、Gateway Timeout/網(wǎng)關超時)。從以下兩種情況分析:
如果單次調(diào)用接口就報該錯誤,說明是后端服務器配置有問題,或者服務不可用,掛掉了;
如果并發(fā)壓測時出現(xiàn)此錯誤,說明是后端壓力太大,出現(xiàn)異常,此問題一般是后端出現(xiàn)響應時間過長或者無響應造成。
