接口測試指南
1.?接口測試的目的
l?相較手工測試的方式,提升測試效率和質(zhì)量,縮短測試周期 ??
l?更早的發(fā)現(xiàn)問題 ,減少終端問題
l?能發(fā)現(xiàn)前端無法測試到的更底層的問題
?
2.?接口測試類型
l?功能測試:對功能性的業(yè)務(wù)邏輯檢查和參數(shù)檢查
l?異常處理測試:對異常輸入/邏輯的檢查
l?兼容性測試:對輸入條件的各種組合和制約的關(guān)系進行檢查
l?接口文檔測試:對接口文檔規(guī)范的檢查,通常接口文檔應(yīng)該包含以下幾個部分的信息:請求方式、請求參數(shù)、返回參數(shù)以及描述信息等
?
例1:前端各個列表頁,統(tǒng)一使get接口,分頁展示,不滿足規(guī)范的接口就 需要整改
中臺獲取角色列表的接口/roles/getRoleList構(gòu)造是合理的,但需要對name 參數(shù)做解釋:
請求網(wǎng)址:
http://192.168.2.11:8086/api/v1/api/roles/getRoleList?pageNum=4 &pageSize=20&name=
反之業(yè)務(wù)端接口獲取新品開發(fā)接口/pdDeve/query構(gòu)造就是不合理的
請求網(wǎng)址:
http://192.168.2.11:8084/api/v1/pdDeve/query
請求方法:
POST

例2:新品開發(fā)-采購組長審批接口/pddvlp/pddvlp/purchaserApprove,接 口同時支持審批通過和不通過,所需要的參數(shù)各不相同。
不通過參數(shù):
dvlpId: 63
reason: "XXXXXX"
state: 0
在參數(shù)描述中則需要對所有參數(shù)都做說明:

l?安全測試:滿足OWASP TOP10的安全要求,列如失效的對象級別授權(quán)、失效的用戶身份驗證、SQL注入等
l?性能測試:1.關(guān)注于接口指標(biāo)的測試,如響應(yīng)時間、吞吐量等?2.壓力測試
3.?接口測試用例設(shè)計方法
可以從輸入、接口處理和輸出三方面考慮:?
針對輸入,可根據(jù)參數(shù)類型進行測試用例設(shè)計;?
常見的參數(shù)類型有:數(shù)字、字符串、數(shù)組、布爾值等。
針對數(shù)字:
等價類?
取值范圍內(nèi)、取值范圍外
邊界值?
取值范圍邊界:邊界值最大、最小、最大+1、最小-1
數(shù)據(jù)類型邊界:數(shù)據(jù)類型的最大值、最小值等
特殊值?
0、負(fù)數(shù)、空
遍歷法?
對取值范圍內(nèi)的所有值進行遍歷
針對字符串類型:
長度?
等價類:取值范圍內(nèi)、取值范圍外
邊界值:規(guī)定范圍邊界
特殊值:空格、空字符串
內(nèi)容?
特定類型:中文、英文、大小寫等
特殊字符:!@#¥%?&等
敏感字:英語法西斯等
針對數(shù)組:
數(shù)組成員個數(shù)
等價類:取值范圍內(nèi)、取值范圍外
邊界值:規(guī)定范圍邊界
數(shù)組成員內(nèi)容
等價類:合法和非法成員
重復(fù)值:重復(fù)的成員
例:新品詳情-詳情回顯(采購發(fā)起)的接口 /pddvlp/pddvlppurchaser/queryDvlpDetailsByPurchaser
參數(shù)只需要一個ID

則首先參數(shù)類型應(yīng)該為int型更佳
其次考慮測試參數(shù)值:
對應(yīng)token賬號的ID
其他賬號的ID
被刪除賬號的ID
0值,空,負(fù)數(shù)值,超大值,字符串類型值等
異常值不能統(tǒng)一報錯:

針對接口處理,可按照邏輯進行測試用例設(shè)計;
針對業(yè)務(wù)邏輯:
約束條件:數(shù)值限制、狀態(tài)限制、權(quán)限限制等
操作對象:檢查是否能獲取、編輯其他用戶的數(shù)據(jù)
狀態(tài)轉(zhuǎn)換:檢查對象狀態(tài)的轉(zhuǎn)換,狀態(tài)改變后是否還可以繼續(xù)之前的操 作
時序分析:業(yè)務(wù)包含了多個接口,而這一系列接口通常需要按照指定的 順序來進行
針對輸出,可根據(jù)結(jié)果進行測試用例設(shè)計;
例:新品開發(fā)獲取產(chǎn)品類型的get接口/newProduct/list返回:

很明顯json的結(jié)構(gòu)并不統(tǒng)一,且字段children意義不明
接口用例設(shè)計多考慮以下幾點:
1.?是否滿足前提條件:有的接口需要首先滿足一定條件,才可成功獲取數(shù)據(jù),例如需要token
2.?是否攜帶默認(rèn)值參數(shù):存在默認(rèn)值的參數(shù)都不填寫、不傳參,必填參數(shù)都填寫正確并且存在正確的常規(guī)值。
3.?業(yè)務(wù)邏輯、功能需求:根據(jù)具體的業(yè)務(wù)需求設(shè)計用例
4.?參數(shù)是否必填:針對每個必填參數(shù)設(shè)計用例
5.?參數(shù)之間是否存在關(guān)聯(lián)
6.?參數(shù)數(shù)據(jù)類型限制
7.?參數(shù)自身的數(shù)據(jù)范圍值限制校驗
4.?接口測試流程
① 確定測試目標(biāo)和范圍:
確定要測試的接口和功能。
確定測試的重點和優(yōu)先級。
確定測試環(huán)境和配置項。
② 收集接口信息:
獲取接口文檔、API規(guī)范或Swagger文檔等。
確定接口的請求方式、請求參數(shù)、返回參數(shù)以及描述信息。
確定接口的身份驗證和授權(quán)方式。
③ 設(shè)計測試用例:
根據(jù)接口規(guī)范和功能需求編寫測試用例。
參照用例設(shè)計方法,確保測試用例全面覆蓋接口的正常、異常輸入和邊界條件。
④ 配置測試環(huán)境:
配置測試環(huán)境,包括服務(wù)器、數(shù)據(jù)庫和必要的測試數(shù)據(jù)。
確保測試環(huán)境的穩(wěn)定性和一致性。
⑤ 執(zhí)行接口測試:
使用接口測試工具或通過編程語言編寫測試腳本執(zhí)行接口用例并記錄測試結(jié)果。
⑥ 處理測試結(jié)果:
對失敗的測試用例進行分析,提交缺陷報告并跟蹤。
⑦ 接口缺陷驗證:
針對修復(fù)的缺陷重新執(zhí)行相關(guān)測試用例,確保修復(fù)不引入新的問題。
⑧ 回歸測試:
在接口或系統(tǒng)更新后,執(zhí)行回歸測試以確保接口功能穩(wěn)定。
根據(jù)需求或接口變更,同步更新接口測試用例。
⑨ 文檔編寫和總結(jié):
撰寫接口測試報告,記錄測試內(nèi)容、結(jié)果和缺陷統(tǒng)計。
總結(jié)接口測試經(jīng)驗和教訓(xùn),提出改進建議,以便在將來的項目中應(yīng)用。
?
5.?接口性能測試流程
① 確定性能測試目標(biāo)和范圍:
確定要測試的接口和功能。
定義性能測試的關(guān)注點和指標(biāo),如響應(yīng)時間、吞吐量、并發(fā)用戶數(shù)等。
確定性能測試的環(huán)境和配置項。
② 收集接口性能信息:
獲取接口文檔、API規(guī)范或Swagger文檔等。
確定接口的預(yù)期性能指標(biāo),如響應(yīng)時間的閾值。
確定接口的并發(fā)限制和性能約束。
③ 設(shè)計性能測試方案:
確定負(fù)載模型,包括并發(fā)用戶數(shù)、事務(wù)數(shù)和持續(xù)時間。
確定性能測試工具或框架,如JMeter、LoadRunner等。
創(chuàng)建性能測試腳本,模擬真實的用戶行為和流量模式。
確定性能測試的數(shù)據(jù)量和數(shù)據(jù)生成方式。
④ 配置性能測試環(huán)境:
配置性能測試環(huán)境,包括服務(wù)器、網(wǎng)絡(luò)和數(shù)據(jù)庫等。
確保性能測試環(huán)境的穩(wěn)定性和一致性。
⑤ 執(zhí)行性能測試:
配置性能測試工具,包括線程數(shù)、并發(fā)數(shù)和監(jiān)控指標(biāo)。
執(zhí)行性能測試并監(jiān)控系統(tǒng)性能和指標(biāo)。
收集性能數(shù)據(jù),包括響應(yīng)時間、吞吐量、錯誤率等。
⑥ 提交性能問題,分析和優(yōu)化性能:
生成性能測試報告,包括測試概述、結(jié)果摘要和性能指標(biāo),提交性能問 題。
配合開發(fā)分析性能測試結(jié)果,優(yōu)化接口性能,如代碼調(diào)優(yōu)、數(shù)據(jù)庫優(yōu)化 等。
⑦ 回歸測試:
在接口或系統(tǒng)更新后,執(zhí)行回歸測試以確保接口性能穩(wěn)定。
更新性能測試方案和負(fù)載模型。
⑧ 性能監(jiān)控和警報(運維):
配置性能監(jiān)控工具,設(shè)置性能警報和閾值,實時監(jiān)測服務(wù)的性能指標(biāo), 及時發(fā)現(xiàn)并解決性能問題。
?
6.?接口自動化測試流程
① 確定自動化測試目標(biāo)和范圍:
自動化測試用例來自于功能測試用例,從用例中選擇需要轉(zhuǎn)換成自動化 腳本的功能用例。
② 選擇適當(dāng)?shù)臏y試工具和框架:
選擇適合項目的自動化測試工具,如Python、SoapUI、Apifox 等。
根據(jù)項目需求選擇適當(dāng)?shù)臏y試框架,如pytest、JUnit、TestNG等。
③ 編寫測試腳本:
使用選定的測試工具和框架編寫自動化測試腳本,實現(xiàn)測試腳本中的測 試步驟并配置測試數(shù)據(jù)、斷言和預(yù)期結(jié)果。
④ 執(zhí)行自動化測試:
運行自動化測試腳本并記錄測試結(jié)果,針對異常收集測試日志和錯誤報 告以便排查問題。
⑤ 處理測試結(jié)果:
分析和記錄自動化測試結(jié)果,對失敗的測試用例進行缺陷跟蹤和報告, 缺陷修復(fù)后重新執(zhí)行測試。
⑥ 持續(xù)集成:
將自動化測試腳本集成到持續(xù)集成(CI)工具中,如Jenkins,在每次 代碼提交后執(zhí)行自動化測試或定期執(zhí)行自動化測試。
⑦ 維護與更新:
定期審查功能測試用例,同步更新對應(yīng)自動化測試腳本,跟隨接口和功 能的變化進行相應(yīng)的調(diào)整和改進,以確保自動化測試的可維護性和可持 續(xù)性。
?
7.?接口測試用例設(shè)計實例
例1:
針對新品開發(fā),新品審批詳情查看接口GET /pddvlp/pddvlppurchaser/queryDvlpDetailsByPurchaser
只有一個參數(shù)

首先從接口文檔測試角度出發(fā),
1.?沒有對接口參數(shù)做說明
2.?沒有對返回響應(yīng)做設(shè)置和說明
其次接口功能測試,我們可以通過下面幾種情況進行驗證:

例2:
轉(zhuǎn)運中心,查看某條轉(zhuǎn)運操作詳情接口GET
/pdTransfer/getInfoBySerialNumber
定義有3個參數(shù)

我們需要對各個參數(shù)分別做單獨的測試以及交集測試,下面列舉一些用例:

例3:
轉(zhuǎn)運中心,審批轉(zhuǎn)運信息接口PUT
/pdTransfer/checkFee
Body參數(shù)是個JSON

我們可以從2塊來考慮
1.?參數(shù)
列舉一些用例:

2.?業(yè)務(wù)邏輯(對同一個id不能反復(fù)修改參數(shù)多次通過審批)
經(jīng)過測試本例接口可以反復(fù)執(zhí)行成功,就有問題
例4:
轉(zhuǎn)運中心,查詢轉(zhuǎn)運列表接口POST(實際可以直接用GET)
/pdTransfer/getPage
Body參數(shù)是個JSON

首先一點,從線上測試環(huán)境可以發(fā)現(xiàn),很明顯前端在接口對接過程中并不清楚sort正確的取值

下面列舉一些用例:

例5:
業(yè)務(wù)端轉(zhuǎn)運中心,接口串聯(lián)測試,從產(chǎn)品列表選擇第一件產(chǎn)品發(fā)起1件的轉(zhuǎn)運,并在轉(zhuǎn)運列表檢查生成的轉(zhuǎn)運單詳情是否一致

首先在APIfox自動化測試中新建一個發(fā)起轉(zhuǎn)運的場景

添加需要串聯(lián)測試的幾條用例,其中登錄接口用于獲取token

細(xì)節(jié):
在獲取產(chǎn)品列表后,添加后置條件獲取第一個商品的PDSKU存為臨時變量


在確認(rèn)轉(zhuǎn)運接口將json數(shù)據(jù)中對應(yīng)參數(shù)改成變量,如果是字符串類型就在兩頭加上””

在轉(zhuǎn)運列表獲取最新的一條數(shù)據(jù)的serialNumber,并通過get接口獲取轉(zhuǎn)運詳情


添加后置斷言,對應(yīng)的PDSKU是否一致,發(fā)貨數(shù)量是否是1

8.?接口測試計劃
1.?接口文檔在Apifox上持續(xù)維護,需要保證接口內(nèi)容與develop環(huán)境中一致,否則測試即視為缺陷處理。
2.?單接口功能測試,在Apifox上進行用例創(chuàng)建與維護,保證所有情況都有用例覆蓋,例:

3.?串聯(lián)接口功能測試,在Apifox上通過添加不同的測試場景,關(guān)聯(lián)多條測試用例來實現(xiàn)。
4.?接口自動化測試,計劃使用開源框架:基于 Python + pytest + allure + log + yaml + mysql + redis + 企業(yè)微信通知 + Jenkins 實現(xiàn)的接口自動化框架。
可以通過將接口用例按規(guī)定格式稍作轉(zhuǎn)換成yaml文件,即可自動生成腳 本并執(zhí)行。例:
編寫Ymal文件

Yaml文件生成對應(yīng)的test_的py文件,包含對應(yīng)條數(shù)的測試用例

點擊執(zhí)行,會遍歷執(zhí)行所有用例,生成對應(yīng)的測試報告并發(fā)送結(jié)果通知。

9.?tips
連接開發(fā)本地環(huán)境進行接口測試,暫時無法正常注冊登錄,拿不到token時
找到密碼模式獲取token的接口,執(zhí)行

"token_type": "Bearer",
"access_token": "cc523de4-ff74-4a3c-8711-c0a155031101"
獲得上面2個字段的信息
將其拼接后賦值給Authorization即可


