前言
最近在找工作,因?yàn)槭亲黾兎?wù)端測試的,所以面試過程中面試官難免會問,怎么設(shè)計接口測試用例,怎么做接口自動化測試?會象征性的考一下基本功。
下面就接口測試,或者說服務(wù)端測試,梳理一下我的思路吧~
一、什么是接口
Q:什么是接口?
A:舉個例子吧,渴了想喝水,旁邊剛好有個飲水機(jī),水龍頭就是一個接口
那么在程序中道理也是一樣的,你在應(yīng)用程序上買衣服、訂餐、租房子、訂機(jī)票這些衣食住行,其實(shí)都在訪問對應(yīng)程序的接口。
以我下面要舉的例子說明:
有個登錄頁面,你要登上網(wǎng)站,就需要輸入你的賬號密碼,把賬號密碼作為請求參數(shù)打登錄接口,這時客戶端會給服務(wù)器發(fā)個登錄請求,服務(wù)器鑒權(quán)和校驗(yàn)通過之后,就登上去了。
到這里就完成了一次接口的請求,或者說跑完了一條接口測試用例。
二、常見的接口請求類型有哪些?
常用的接口請求類型有:post get put delete
平常面試會問到get和post的區(qū)別,不懂百度一下
那么,要設(shè)計接口測試用例,首先需要接口契約,也就是接口文檔。
接口文檔長啥樣,看下面~
三、接口文檔范例
測試功能為登錄頁面:https://xxx/account/signin(url我打碼了)
接口地址:https://xxx/account/signin(想了想接口也打碼吧,畢竟是要收費(fèi)的)
請求方式:POST
接口描述:某網(wǎng)站登錄接口
【接口入?yún)ⅰ?/p>

【接口返回】

【接口請求示例】
{
"account": "1801367@qq.com",
"password": "191004"
}
【接口返回示例】
{
"code": 0,
"msg": "",
"data": {
"name": null,
"avatar": null,
"id": "7",
"account": "18067@qq.com",
"role": 3
}
}
了解了接口契約,怎么設(shè)計接口測試用例呢,請繼續(xù)往下看。
四、怎么設(shè)計接口測試用例
首先你得有個框架
測接口也測了好幾年了,梳理一份用例模板,簡單參考下,不全的歡迎補(bǔ)充~

所以基于這套模板,我們可以設(shè)計一下接口契約中的登錄接口的用例
五、基于登錄接口設(shè)計測試用例
1.參數(shù)校驗(yàn)
-
account
- 必填:不填,空字符串,傳null,不傳該字段
- 字符串類型:傳int型或其他類型
- 長度校驗(yàn):假如范圍[1-20],小于1、大于20,在1-20范圍內(nèi),傳超長
- 枚舉:無
-
password
- 必填:不填,空字符串,傳null,不傳該字段
- 字符串類型:傳int型或其他類型
- 長度校驗(yàn):假如范圍[1-20],小于1、大于20,在1-20范圍內(nèi),傳超長
- 枚舉:無
2.參數(shù)組合
- 賬號密碼正確,登錄成功,返回數(shù)據(jù)拿到用戶角色及用戶信息
- 賬號錯,密碼對,登錄失敗,code1
- 賬號對,密碼錯,登錄失敗,code1
- 賬號錯,密碼錯,登錄失敗,code1
3.業(yè)務(wù)邏輯
- 數(shù)據(jù)流轉(zhuǎn):登錄賬號為數(shù)據(jù)庫成員,登上去后接口返回data為數(shù)據(jù)庫查到的數(shù)據(jù)
- 權(quán)限:管理員賬號、普通用戶賬號、運(yùn)營賬號
- 賬號類型:qq郵箱、企業(yè)郵箱或其他類型郵箱,正常登錄,手機(jī)號不支持
- 多端登錄是否有邏輯處理,要不要限制有最多幾個用戶登錄
4.安全性
- 密碼明文可見
- 抓包不能抓到
- 登錄鑒權(quán),前端和服務(wù)端都要做
- token時效性
- sql注入
5.性能
- 響應(yīng)時間200ms
- 并發(fā)數(shù)(登錄我感覺沒必要考慮高并發(fā),具體業(yè)務(wù)場景具體分析)
6.日志
- 測接口時,關(guān)注日志
7.監(jiān)控
- 接口功能上線了,要關(guān)注下業(yè)務(wù)請求和各種異常監(jiān)控
六、接口測試常用什么工具
- postman
- jmeter
- linux命令 curl 發(fā)一個接口請求
- python、java寫腳本
以上都可以,第四個用于做接口自動化測試
七、接口自動化測試思路
第一步:把手工case通過寫代碼的方式,轉(zhuǎn)成自動化測試的case,設(shè)置case的斷言,然后去跑這批case讓他自動執(zhí)行,先讓代碼可以粗陋的跑起來
第二步:減少重復(fù)性代碼,把測試數(shù)據(jù)整合做成參數(shù)化讀取,進(jìn)行數(shù)據(jù)驅(qū)動
第三步:優(yōu)化代碼可讀性,抽離通用模塊
八、接口自動化測試實(shí)戰(zhàn)演練
完成第一步,很簡單,寫出來一個,其他的復(fù)制粘貼,改斷言,改參數(shù)

那么問題是什么?
- 新增一條用例,我要在代碼里改一條,參數(shù)也放在代碼里,看起來累,改起來也很累。
完成第二步,把用例放在excel中,通過pytest自帶的裝飾器進(jìn)行參數(shù)化


這里解決了第一步改參數(shù)的問題,但是這里依然存在問題
- 代碼重復(fù)量大,后面再增加一條用例,那塊重復(fù)的要再寫一遍
- 獲取excel數(shù)據(jù)的方法放在測試用例中,代碼可讀性差,我們的測試用例最好不要包含前置條件。
完成第三步,提取讀excel數(shù)據(jù)部分,放在單獨(dú)的文件中,把參數(shù)轉(zhuǎn)換和發(fā)起請求這部分提起來。
同時優(yōu)化了一下獲取excel數(shù)據(jù)部分,上一步我們是讀區(qū)域,這樣可擴(kuò)展性差,如果后期我要在excel里加用例,就需要改這塊的區(qū)域,所以讓他直接讀這一列,這樣后期隨便加不影響。


這樣看著就清爽多了,加用例,只需要改excel,然后在testcase中加用例,而用例里基本上就實(shí)現(xiàn)斷言就行。
如果還想加一些日志,或者需要查庫做斷言等等,可以再優(yōu)化下。
碼字不易,轉(zhuǎn)載請注明出處,謝謝~
閱完可以留個小心心,關(guān)注一下,還有公眾號,謝謝~
說明一下文中用到的示例是「靈題庫」的接口,有前端刷題需要的可以關(guān)注下