在現(xiàn)代軟件開發(fā)中,API(應(yīng)用程序編程接口)作為連接不同系統(tǒng)和模塊的關(guān)鍵組件,其重要性日益凸顯。隨著軟件應(yīng)用的互聯(lián)性不斷增強(qiáng),API的數(shù)量和復(fù)雜度也在不斷增加。傳統(tǒng)的API測試方法面臨著諸多挑戰(zhàn):
1.手動測試效率低下:手動測試API接口耗時耗力,難以覆蓋所有可能的測試場景,容易遺漏潛在的缺陷。
2.數(shù)據(jù)一致性問題:研發(fā)和測試人員使用不同的數(shù)據(jù)源進(jìn)行操作,容易導(dǎo)致數(shù)據(jù)不一致,影響測試結(jié)果的準(zhǔn)確性。
3.測試覆蓋率不足:手動測試難以實(shí)現(xiàn)對大量API的全面測試,導(dǎo)致測試覆蓋率不足,無法充分驗證API的穩(wěn)定性和可靠性。
4.難以融入自動化工作流:傳統(tǒng)的測試工具難以與持續(xù)集成/持續(xù)部署(CI/CD)自動化工作流無縫對接,無法實(shí)現(xiàn)自動化的回歸測試。
一、Apipost自動化測試概況
使用Apipost可視化的API自動化測試功能,研發(fā)人員在「API管理」里設(shè)計、調(diào)試、維護(hù)接口文檔;測試人員無需編寫代碼,在「自動化測試」創(chuàng)建自動化測試腳本時可以直接導(dǎo)入接口,與研發(fā)人員基于同一數(shù)據(jù)源進(jìn)行自動化測試,且能生成功能全面清晰的測試報告。
導(dǎo)入后可以在接口編輯頁面選擇雙向同步或手動同步數(shù)據(jù)。
勾選雙向同步后無論在自動化測試還是API管理中修改接口另一方都會自動同步修改內(nèi)容;如不勾選,在API管理中修改后需要手動獲取最新數(shù)據(jù)。
1、控制器
Apipost提供了多種控制器用以覆蓋多種測試場景:
條件控制器:可以配置條件決定是否調(diào)用接口;
事務(wù)控制器:適用于需要使用測試數(shù)據(jù)的某個接口;
次數(shù)控制器:適用于場景中需要多次調(diào)用的接口;
forEach控制器:適用于循環(huán)獲取某個接口中的變量值的場景;
while循環(huán)控制器:循環(huán)調(diào)用某個接口直至達(dá)到設(shè)置的條件;
等待控制器:為步驟之間添加睡眠時間。
2、核心優(yōu)勢
零代碼:拖拽式編排,對新手友好;
全場景覆蓋:接口測試、性能壓測、數(shù)據(jù)驅(qū)動一應(yīng)俱全;
CI/CD集成:一鍵生成CLI命令,無縫對接Jenkins、GitLab!
二、快速上手
1、新建測試用例
打開Apipost,點(diǎn)擊「新建」,給測試任務(wù)起個名字,如「用戶登錄接口測試」。
2、編排測試用例
在測試用例中,可以直接把接口拖拽進(jìn)來,比如:先添加「用戶登錄接口」,再添加「獲取用戶信息接口」。
3、設(shè)置測試條件
測試環(huán)境:從下拉菜單中選擇你的測試環(huán)境(比如開發(fā)環(huán)境、預(yù)發(fā)布環(huán)境)。
執(zhí)行輪次:設(shè)置跑多少次測試,比如:跑5次驗證穩(wěn)定性。
間隔時長:每次測試之間隔多久,比如:設(shè)置為3秒。
4、生成測試報告
點(diǎn)擊「保存并執(zhí)行」,Apipost會自動生成一份詳細(xì)的測試報告,包括接口響應(yīng)時間、斷言結(jié)果、失敗原因等。
三、使用測試數(shù)據(jù)
(一)、測試數(shù)據(jù)的創(chuàng)建
1、上傳測試數(shù)據(jù)文件
打開 Apipost,進(jìn)入測試用例編輯頁面,點(diǎn)擊左側(cè)的「測試數(shù)據(jù)」。
點(diǎn)擊「新建測試數(shù)據(jù)」,選擇「上傳文件」,支持CSV和?TXT?格式。
示例:準(zhǔn)備一個 CSV 文件,包含用戶登錄所需的`username`?和`password`字段。
username,password
test01@apipost.cn,123456
test02@apipost.cn,789012
上傳后,Apipost 會自動解析文件內(nèi)容,可以在右側(cè)預(yù)覽數(shù)據(jù)。
2、環(huán)境隔離:不同環(huán)境不同數(shù)據(jù)
在 Apipost 中,支持為每個環(huán)境單獨(dú)配置測試數(shù)據(jù)。例如:
開發(fā)環(huán)境使用?`local_users.csv`。
生產(chǎn)環(huán)境使用?`prod_users.csv`。
切換環(huán)境時,系統(tǒng)會自動識別對應(yīng)環(huán)境的測試數(shù)據(jù)。
(二)、測試數(shù)據(jù)的使用
1、參數(shù)化接口請求
編輯接口時,將請求參數(shù)設(shè)置為變量,例如`{{username}}`和`{{password}}`。
在測試條件中選擇剛創(chuàng)建的測試數(shù)據(jù),Apipost 會自動將數(shù)據(jù)填充到接口中。
2、循環(huán)控制器與測試數(shù)據(jù)的結(jié)合
添加「循環(huán)控制器」,選擇「完成所有測試數(shù)據(jù)的迭代」模式。
設(shè)置循環(huán)間隔為 1 秒,確保每次請求之間有足夠的時間。
在循環(huán)體內(nèi)調(diào)用接口,使用`{{username}}`和`{{password}}`引用數(shù)據(jù)。
3、動態(tài)數(shù)據(jù)提取與再利用
如果接口返回的數(shù)據(jù)是數(shù)組格式(如用戶列表),可以通過 JSONPath
{
"code":200,
"success":true,
"msg":"Data generated successfully",
"timestamp":"2023-09-20T14:30:00Z",
"data":[
{?
"id":"e3f5a7b1-9c2d-4f8a-b6c0-1d8e9f2a7b3c",
"username":"alice_m2023",
"password":"Tp9@xQvL!",? ?
"created_at":"2023-09-20T14:00:00Z"
},
{? ?
"id":"a2b4c6d8-e0f1-4a3b-9c5d-7e9f1a2b3c4d",? ?
"username":"maxwell_7",? ?
"password":"8nG#r2sKd",?
"created_at":"2023-09-20T14:05:00Z"
},
{? ?
"id":"5d7f9a1b-3c8e-4a2d-9b0f-6e1a3b5c7d9e",? ?
"username":"zara.frost",?
"password":"qW6$bY9pA",?
"created_at":"2023-09-20T14:10:00Z"
},
{
? "id":"8e1a3b5c-7d9e-4f2a-b6c0-9d8e7f1a2b3c",? ?
"username":"t_robot92",? ?
"password":"Lm3^cF8zN",? ?
"created_at":"2023-09-20T14:15:00Z"
},
{? ?
"id":"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",? ?
"username":"kira_nexus",? ?
"password":"R@4vP7hXy",? ?
"created_at":"2023-09-20T14:20:00Z"
}
]
}
使用`$.data`提取數(shù)組。
然后在后續(xù)接口中通過使用`{{username}}`和`?{{password}}`引用數(shù)據(jù)。
四、性能測試
Apipost的性能測試功能能幫我們快速定位。
(一)、固定模式壓測
設(shè)置并發(fā)數(shù)為100,模擬100個用戶同時登錄。
查看壓測報告中的「平均響應(yīng)時間」和「失敗率」,判斷接口是否能扛住高并發(fā)。
(二)、爬坡模式壓測
從10個并發(fā)開始,逐步增加到100個并發(fā),觀察接口性能的變化趨勢。
如果響應(yīng)時間突然飆升,說明接口在某個并發(fā)點(diǎn)出現(xiàn)了性能問題。
五.CI/CD:從安裝到集成
(一)、Apipost CLI工具
1、安裝 CLI工具
打開終端,運(yùn)行以下命令安裝 Apipost CLI:
npm install -g apipost-cli-pro
如果你之前安裝過舊版本的 Apipost-cli,請先卸載:
npm uninstall -g apipost-cli
2、生成CICD命令
進(jìn)入測試用例頁面。
點(diǎn)擊「持續(xù)集成」,新建--Apipost Cli,系統(tǒng)會自動生成一個唯一的運(yùn)行鏈接和 Token。
復(fù)制生成的命令,例如:
apipost run
"https://open.apipost.net/open/ci/automated_testing?ci_id=xxx&token=xxx"
-r html
(二)、集成到CI/CD 流程
1、Jenkins集成
在 Jenkins 項目配置中,添加一個新的「執(zhí)行 shell」步驟。
粘貼剛才生成的 CI/CD 命令,確保在代碼提交后自動觸發(fā)測試。
示例配置:
pipeline {? ?
agent any? ?
tools {nodejs "node16.14"} //替換替換服務(wù)器支持的node版本。node版本>16? ?
stages {? ? ?
stage('Install Apipost CLI') {? ? ? ?
steps {? ? ? ? ?
sh 'npm install -g apipost-cli'
? ? ? }? ?
}? ? ?
stage('Running Test Scenario') {? ? ? ?
steps {? ? ? ? ?
sh 'apipost run "https://open.apipost.net/open/ci/automated_testing?ci_id=xxx&token=xxx" -r html'
? ? ? ? }?
? }?
? }?
}
2、GitHub Actions集成
在項目根目錄下創(chuàng)建`.github/workflows/test.yml`文件。
添加以下內(nèi)容:
name: Automated API Tests
on: [push, pull_request]
jobs:build:? runs-on: ubuntu-latest
? steps:
- uses: actions/checkout@v3
? - name: Setup Node.js environment
? uses: actions/setup-node@v2
? with:? ? ? node-version: '14'
? - name: Install Apipost CLI
? run: npm install -g apipost-cli
? - name: Running Test Scenario
? run: apipost run "https://open.apipost.net/open/ci/automated_testing?ci_id=xxx&token=xxx" -r html
六.實(shí)戰(zhàn):用戶充值系統(tǒng)查詢的API自動化測試
場景描述
假設(shè)我們有一個用戶管理系統(tǒng),包含以下四個接口:
1. 用戶注冊接口:允許新用戶注冊。
2. 用戶登錄接口:驗證用戶憑據(jù)并返回認(rèn)證token。
3. 用戶充值接口:允許用戶為賬戶充值。
4. 查詢賬戶信息接口:查詢用戶的賬戶余額和充值歷史。
我們將使用Apipost對這些接口進(jìn)行自動化測試,確保系統(tǒng)的穩(wěn)定性和可靠性。
自動化測試流程設(shè)計
(一)、創(chuàng)建測試用例
打開Apipost,點(diǎn)擊「新建測試用例」,給測試任務(wù)起個名字,比如「用戶完整流程測試」。
(二)、添加接口并編排順序
按照以下順序?qū)⒔涌谕献У綔y試用例中:
1. 用戶注冊接口;
2. 用戶登錄接口;
3. 用戶充值接口;
4. 查詢賬戶信息接口。
(三)、設(shè)置請求參數(shù)和動態(tài)數(shù)據(jù)提取
1、用戶注冊接口:
請求參數(shù):
{?
"username": "test_user",
"email": "test_user_@example.com",?
"password": "Test@123"
}
斷言:
響應(yīng)狀態(tài)碼為200。
響應(yīng)體中包含"status": "success"。
提取userId并存儲為全局變量.
2、用戶登錄接口
請求參數(shù):
{?
"username": "test_user",?
"password": "Test@123"
}
斷言:
響應(yīng)狀態(tài)碼為200。
響應(yīng)體中包含"token"字段。
提取token并存儲為全局變量。
3、用戶充值接口:
請求頭:
Authorization: Bearer {{token}}
請求參數(shù):
{
"userId": "{{userId}}",
"amount": 100.00,
"currency": "CNY"
}
斷言:
響應(yīng)狀態(tài)碼為200。
響應(yīng)體中包含"transactionId"字段。
4、查詢賬戶信息接口:
請求頭:
Authorization: Bearer {{token}}
查詢參數(shù)
userId={{userId}}
斷言:
響應(yīng)狀態(tài)碼為200。
充值金額是否為100。
4、設(shè)置測試條件
測試環(huán)境:選擇你的測試環(huán)境(如開發(fā)環(huán)境)。
執(zhí)行輪次:設(shè)置為1次(完整流程測試)。
間隔時長:設(shè)置為2秒(確保接口響應(yīng)穩(wěn)定)。
5、生成測試報告
點(diǎn)擊「保存并執(zhí)行」,Apipost會自動生成一份詳細(xì)的測試報告,包括接口響應(yīng)時間、斷言結(jié)果、失敗原因等。
動態(tài)數(shù)據(jù)提取與再利用
在測試過程中,我們使用了動態(tài)數(shù)據(jù)提取功能,將注冊接口返回的`userId`和登錄接口返回的`token`存儲為全局變量,并在后續(xù)接口中引用這些變量。這種方式不僅減少了重復(fù)輸入數(shù)據(jù)的工作量,還確保了測試數(shù)據(jù)的一致性和準(zhǔn)確性。
性能測試
為了驗證接口在高并發(fā)場景下的性能,我們可以在登錄接口上進(jìn)行性能測試:
1.?固定模式壓測:設(shè)置并發(fā)數(shù)為100,模擬100個用戶同時登錄。
2.?爬坡模式壓測:從10個并發(fā)開始,逐步增加到100個并發(fā),觀察接口性能的變化趨勢。
CI/CD集成
將測試用例集成到CI/CD流程中,確保每次代碼提交后自動觸發(fā)測試:
1.?Jenkins集成:在Jenkins項目配置中,添加執(zhí)行shell步驟,粘貼Apipost生成的CI/CD命令。
2.?GitHub Actions集成:在項目根目錄下創(chuàng)建.github/workflows/test.yml文件,添加安裝Apipost CLI和運(yùn)行測試命令的步驟。