本文將會通過java和python編碼的方式來幫助大家實現(xiàn)接口測試悉尾。另外讀者還可以通過這篇文章了解到什么是接口測試、工作中接口測試的主要分類挫酿、接口測試優(yōu)勢构眯、接口測試的評估標(biāo)準(zhǔn)、開展接口測試的通用過程等入門接口測試必備知識點早龟。如果你想上手接口測試惫霸,她一定會幫到你!無論你的接口項目編碼使用的是java還是python葱弟,看這篇文章就夠了壹店!
接口測試必備知識點
接口測試概念
接口測試是測試系統(tǒng)組件間接口的一種測試。接口測試主要用于檢測外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個子系統(tǒng)之間的交互點芝加。測試的重點是要檢查數(shù)據(jù)的交換茫打,傳遞和控制管理過程,以及系統(tǒng)間的相互邏輯依賴關(guān)系等妖混。
工作中接口測試的主要分類
1.模塊接口測試(開發(fā)人員)
模塊接口測試是單元測試的基礎(chǔ)老赤。它主要測試模塊的調(diào)用與返回。類似于JUnit或者unittest中的單元測試制市。
2.Web接口測試(測試工作重點)
web接口測試又可分為兩類:服務(wù)器接口測試和外部接口測試抬旺。
服務(wù)器接口測試:
是測試前端與服務(wù)器的接口(最常用的接口測試場景)。
外部接口測試:
這個很典型的例子就是第三方登錄祥楣,比如你做的新系統(tǒng)免于新用戶重新注冊的麻煩會提供第三方登錄开财,那用戶在登錄的時候調(diào)用的就是第三方登錄的接口汉柒,由第三方驗證用戶名和密碼并且返回給當(dāng)前系統(tǒng)。
接口測試優(yōu)勢
1.接口測試相對容易實現(xiàn)自動化持續(xù)集成责鳍,且相對UI自動化也比較穩(wěn)定
2.測試可以更早的介入
3.可以發(fā)現(xiàn)功能測試覆蓋不到的服務(wù)端問題
接口文檔
接口文檔是接口測試的依據(jù)碾褂,在接口文檔不完善的情況下不主張開展接口測試
接口文檔不管以什么形式存在,需要包含的內(nèi)容有:
a.接口名稱以及業(yè)務(wù)描述
b.接口類型(http\webservices等等)
c.輸入?yún)?shù)
? ? ? ? ? ? ? ? ?每個參數(shù)名历葛;
? ? ? ? ? ? ? ? ?每個參數(shù)類型正塌;
? ? ? ? ? ? ? ? ?每個參數(shù)業(yè)務(wù)含義;
? ? ? ? ? ? ? ? ?每個是否可空恤溶;
? ? ? ? ? ? ? ? ?每個字段長度(可選乓诽,一般需要提供,有嚴格要求的字段需特別注明)咒程;
? ? ? ? ? ? ? ? ?每個參數(shù)的單位(可選鸠天,金額類字段需注明);
d.輸出結(jié)果
? ? ? ? ? ? ? ? ? 每個參數(shù)名帐姻;
? ? ? ? ? ? ? ? ? ?每個參數(shù)類型稠集;
? ? ? ? ? ? ? ? ? ?每個參數(shù)業(yè)務(wù)含義;
接口測試介入階段
接口測試應(yīng)該在程序的開發(fā)階段就開始饥瓷,具體的時間點應(yīng)該是在后臺接口開發(fā)基本完畢之后巍杈,需要開始接口測試,在前端寫功能之前對接口進行測試扛伍,能夠在早期就把接口層的問題暴露出來筷畦,后續(xù)前端在寫功能時能夠減少很多由于接口問題導(dǎo)致返工的工作量。
接口測試評估標(biāo)準(zhǔn)
業(yè)務(wù)功能覆蓋是否完整
業(yè)務(wù)規(guī)則覆蓋是否完整(與業(yè)務(wù)相關(guān)的操作規(guī)范刺洒、管理章程鳖宾、規(guī)章制度、行業(yè)標(biāo)準(zhǔn)等)
參數(shù)驗證是否達到要求(邊界逆航、業(yè)務(wù)規(guī)則)
返回數(shù)據(jù)正確性與格式
接口異常場景覆蓋是否完整
接口覆蓋率是否達到要求
性能指標(biāo)是否滿足要求(接口的響應(yīng)時間鼎文、處理能力)
安全指標(biāo)是否滿足要求(一般接口都不會暴露在網(wǎng)上任意被調(diào)用,需要做一些限制因俐,比如鑒權(quán)或認證拇惋。)
開展接口測試的過程
確認接口文檔(接口測試依據(jù))
準(zhǔn)備數(shù)據(jù)(往往耗費很多精力)
構(gòu)建接口(根據(jù)接口文檔,使用代碼或者工具)抹剩,代碼選擇java或者python,工具選擇postman撑帖、jmeter等
校驗接口請求(根據(jù)接口文檔,使用代碼或者工具)
http接口實戰(zhàn)
接口項目介紹
使用http協(xié)議是目前最常用的接口調(diào)用方式澳眷,她的本質(zhì)是通過http請求調(diào)用后端的api胡嘿,具體過程如下圖所示:
關(guān)于http知識的詳細內(nèi)容在這里就不做詳細介紹了,作為一個tester钳踊,http請求是必會的知識點之一衷敌,請大家自己查閱學(xué)習(xí)勿侯,重點關(guān)注如下內(nèi)容:
請求方法(重點關(guān)注get和post)
請求頭參數(shù)含義
響應(yīng)頭參數(shù)含義
響應(yīng)代碼含義
我們這里重點講解如何通過java和python代碼的方式進行http接口測試,主要就兩步(比大象放冰箱里還簡單)
1.http請求構(gòu)建
2.http請求的解析
舉一個get接口請求的例子
接口描述:判斷獲取用戶的姓名和年齡是否成功
http://rap2.taobao.org:38080/app/mock/85630/getinfo
類型:get
參數(shù):name(String)必選缴罗,age(Number)必選
返回值信息說明
參數(shù)傳入正確
{
? "code": 0-10之間的數(shù)字,
? "msg": "OK"
}
參數(shù)缺失
"errMsg":"必選參數(shù)name或者age未傳值
Python方式實現(xiàn)
Python使用requests模塊進行接口測試
安裝pip install requests
核心代碼如下:
import requests
正確的調(diào)用
response=requests.get("http://rap2.taobao.org:38080/app/mock/85630/getinfo?name=kevin&age=40")
print(response.text)
輸出:
{
? "code": 10,
? "message": "ok"
}
異常調(diào)用
response=requests.get("http://rap2.taobao.org:38080/app/mock/85630/getinfo?age=25")
print(response.text)
輸出:
{"isOk":false,"errMsg":"必選參數(shù)name未傳值助琐。Required parameter name has no value."}
Java方式實現(xiàn)
使用httpclient jar包
下載地址:http://hc.apache.org/downloads.cgi
我這里使用的是4.5.12版本,把下圖的所有jar包導(dǎo)入到eclipse中面氓。
核心代碼如下:
正確的調(diào)用
importorg.apache.http.client.fluent.Request;
String rsp1=Request.Get("http://rap2.taobao.org:38080/app/mock/85630/getinfo?name=kevin&age=40")????
????????? .execute().returnContent().asString();
????????????? ? System.out.println(rsp1);
輸出:
{
?"code": 4,
?"msg": "OK"
}
異常調(diào)用
?Stringrsp2=Request.Get("http://rap2.taobao.org:38080/app/mock/85630/getinfo?age=40")????
????????????? ????????? .execute().returnContent().asString();
??????????????????????????? ? System.out.println(rsp2);
輸出:
{"isOk":false,"errMsg":"必選參數(shù)name未傳值兵钮。Required parameter name has no value."}
通過java和python對同一個接口調(diào)用的實現(xiàn),我們很容易發(fā)現(xiàn)二者的實現(xiàn)差別不大侧但,只要掌握了一門語言,使用另一門語言做接口測試也只不過是換了一種調(diào)用形式而已航罗!核心就是:
使用合適的包或者模塊
發(fā)送http請求
獲取http請求
接口測試在unittest中的應(yīng)用
在實際工作中禀横,我們利用上面的核心代碼+單元測試框架就可以完全搞定接口測試
Python unittest單元測試源碼如下:
接口測試在junit4中的應(yīng)用
Java Junit4源碼如下:
總結(jié)
接口自動化測試的本質(zhì)總結(jié)為以下兩點:
通過使用requests或者httpclient提供的api,發(fā)送接口請求
解析接口響應(yīng)判斷接口發(fā)送成功與否粥血;
大家可以看到發(fā)送接口請求的api要比ui自動化涉及的api少很多柏锄,也簡單很多,因此更適合大家進行代碼入門复亏!關(guān)于ui自動化測試大家可以關(guān)注我的另一篇文章:
一文搞定Java和Python在Selenium3中的應(yīng)用
隨著大家接口測試經(jīng)驗的不斷積累趾娃,在工作中可能還會遇到webservice、或者dubbo類型的接口缔御,其實無論對于哪種接口進行測試抬闷,其本質(zhì)和方法與我們文章中介紹的都是一致的!不同的接口會涉及使用不同的第三方j(luò)ar包或者模塊中的api來構(gòu)建接口而已耕突。個人經(jīng)驗笤成,接口測試的難點不在于技術(shù)手段,而是前期的溝通工作眷茁!想要做好接口測試的重點是接口文檔的詳盡程度以及文檔變更后及時通知的管理策略炕泳。各位同學(xué)可以在實際工作中多總結(jié)、多體會上祈、找出一條適合自己公司的接口測試開展方案培遵。真的寫了很多也非常地辛苦,原創(chuàng)不易登刺,如果文章幫到了你籽腕,歡迎轉(zhuǎn)發(fā),讓更多的朋友受益纸俭!