說一下我所理解的接口測(cè)試

關(guān)于接口測(cè)試

“接口測(cè)試是測(cè)試系統(tǒng)組件間接口的一種測(cè)試。接口測(cè)試主要用于檢測(cè)外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個(gè)子系統(tǒng)之間的交互點(diǎn)。測(cè)試的重點(diǎn)是要檢查數(shù)據(jù)的交換,傳遞和控制管理過程,以及系統(tǒng)間的相互邏輯依賴關(guān)系等?!?/i>

為使得測(cè)試前移,在后臺(tái)接口完成后,在前端功能完成之前,進(jìn)行接口測(cè)試來驗(yàn)證功能性、可靠性、安全性和性能方面是否能達(dá)到預(yù)期。接口測(cè)試前置,很多bug在功能測(cè)試過程無(wú)法發(fā)現(xiàn),例如相同接口重復(fù)調(diào)用,會(huì)占用服務(wù)器資源,會(huì)占用帶寬;權(quán)限未處理,比如越權(quán)操作,更改參數(shù)后非管理員就可以控制;返回明文驗(yàn)證碼,導(dǎo)致秘密泄漏;前端沒有任何報(bào)錯(cuò),功能響應(yīng)正常,但是接口卻返回500,要判斷內(nèi)容是否正確,是否合理等。

反觀一下公司項(xiàng)目現(xiàn)狀,項(xiàng)目大多采用V模型,即需求分析→設(shè)計(jì)→代碼實(shí)現(xiàn)→單元測(cè)試→集成測(cè)試→系統(tǒng)測(cè)試→驗(yàn)收上線,RD跟QA串行,公司大部分的web/app測(cè)試也是需要全部開發(fā)完畢后RD才能進(jìn)行提測(cè),進(jìn)而QA進(jìn)行測(cè)試。若增加接口測(cè)試,V模型即變成W模型,既然開發(fā)前開發(fā)書已產(chǎn)生,W模型的方案就可以進(jìn)行(RD/QA并行,在需求設(shè)計(jì)過程輸出開發(fā)書跟產(chǎn)品說明書給QA;接口設(shè)計(jì)過程接口文檔輸出給QA進(jìn)行接口功能的case編寫;后端的老師們完成接口開發(fā)之后進(jìn)行接口測(cè)試;由于后端接口開發(fā)的過程,前端也在同步開發(fā),前端開發(fā)后提測(cè)QA,QA做集成測(cè)試),一方面,就目前前后端分離來言,后端提供數(shù)據(jù),不再渲染頁(yè)面,APP只搭建界面框架、UI設(shè)計(jì)、以及各種組件,從產(chǎn)品緯度還需要考慮用戶交互體驗(yàn)等等等,前后端耦合較低的項(xiàng)目進(jìn)行分離測(cè)試效果較好;另一方面,早介入測(cè)試,并行后,不僅縮短周期,也會(huì)在早期發(fā)現(xiàn)問題。

有同學(xué)就有疑問了,這樣搞,那會(huì)不會(huì)測(cè)試出現(xiàn)重復(fù)?理論上是不會(huì)的,只要Testcase設(shè)計(jì)合理,搞清楚接口跟功能的測(cè)試范圍,那就不僅不會(huì)不重復(fù),而且覆蓋點(diǎn)還會(huì)更全面。

如下圖,根據(jù)大類區(qū)分了一下app測(cè)試范圍與接口測(cè)試的范圍。

關(guān)于Http

概念

就是一種應(yīng)用層協(xié)議,跟“不能拿著前朝的劍殺本朝的官”道理一樣,以下是wiki中的講述:

超文本傳輸協(xié)議(英語(yǔ):HyperText Transfer Protocol,縮寫:HTTP)是一種用于分布式、協(xié)作式和超媒體信息系統(tǒng)的應(yīng)用層協(xié)議[1]。HTTP是萬(wàn)維網(wǎng)的數(shù)據(jù)通信的基礎(chǔ)。

設(shè)計(jì)HTTP最初的目的是為了提供一種發(fā)布和接收HTML頁(yè)面的方法。通過HTTP或者HTTPS協(xié)議請(qǐng)求的資源由統(tǒng)一資源標(biāo)識(shí)符(Uniform Resource Identifiers,URI)來標(biāo)識(shí)。

HTTP的發(fā)展是由蒂姆·伯納斯-李于1989年在歐洲核子研究組織(CERN)所發(fā)起。HTTP的標(biāo)準(zhǔn)制定由萬(wàn)維網(wǎng)協(xié)會(huì)(World Wide Web Consortium,W3C)和互聯(lián)網(wǎng)工程任務(wù)組(Internet Engineering Task Force,IETF)進(jìn)行協(xié)調(diào),最終發(fā)布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定義了HTTP協(xié)議中現(xiàn)今廣泛使用的一個(gè)版本——HTTP 1.1。

原理

web端也好,app端也好,舉個(gè)簡(jiǎn)單的登陸例子,例如賬號(hào)登陸,在輸入賬號(hào)密碼的過程,點(diǎn)擊提交,服務(wù)器處理,直到返回登陸成功。這一切的幕后,中間http做了什么工作呢?(使用Wireshark,借助Wireshark可直觀的發(fā)現(xiàn)各網(wǎng)絡(luò)層的關(guān)系,不僅僅Charles所捕捉的應(yīng)用層,還包含物理層、數(shù)據(jù)鏈路層、傳輸層TCP UDP等等,徹底打開數(shù)據(jù)傳輸?shù)拇箝T,等我吃透了拿實(shí)例再給大家講)

輸入賬號(hào)、密碼點(diǎn)擊提交時(shí),請(qǐng)求的接口地址會(huì)經(jīng)過DNS服務(wù)器解析

DNS解析層層解析后,建立Socket鏈接(三次握手,四次揮手

鏈接建立成功后,客戶端向服務(wù)器發(fā)起Http請(qǐng)求

服務(wù)器響應(yīng)并返回給客戶端數(shù)據(jù),關(guān)閉TCP鏈接

客戶端解析數(shù)據(jù)后呈現(xiàn)給前端頁(yè)面

構(gòu)成部分

請(qǐng)求報(bào)文(Request)

請(qǐng)求行(request line):請(qǐng)求方法(Method)、URL和HTTP協(xié)議版本(HTTP-Version)

例如:

POST /api/v1/thing/device/1218/w/properties/0/1000 HTTP/1.1(打開1218工位的燈光)

請(qǐng)求頭(request header):

例如:

Host? ? smart-office.yeedev.com

Content-Length? ? 37

Accept? ? application/json, text/plain, /

Authorization? ? Basic eWVlbGlnaHRfcG9ydGFsOkdKSzIzNEhKS0xTKkhKSzIzI1BMUQ==

User-Agent? ? Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36

Content-Type? ? application/json;charset=UTF-8

Origin? ? http://smart-office.yeedev.com

Referer? ? http://smart-office.yeedev.com/QRCode.html?deviceId=1218

Accept-Encoding? ? gzip, deflate

Accept-Language? ? zh-CN,zh;q=0.9

Connection? ? keep-alive

空行:請(qǐng)求頭之后是一個(gè)空行,發(fā)送回車符和換行符,通知服務(wù)器之后不再有請(qǐng)求頭

請(qǐng)求體(body):

例如:

post請(qǐng)求方式,請(qǐng)求體就會(huì)有具體的請(qǐng)求參數(shù),比如上述開燈的

{

? ? ? ? "delay": 0,

? ? ? ? "duration": 1000,

? ? ? ? "on": true

}

get請(qǐng)求方式,參數(shù)會(huì)拼接在URL后,?接參數(shù),&對(duì)不同參數(shù)進(jìn)行拼接,比如獲取1218的燈光狀態(tài)

http://smart-office.yeedev.com/QRCode.html?deviceId=1218

響應(yīng)報(bào)文(Response)

響應(yīng)行(response line)

例如:

HTTP/1.1 200

響應(yīng)頭(response header)

Server? ? nginx/1.16.1

Date? ? Thu, 20 Aug 2020 11:08:31 GMT

Content-Type? ? application/json

Content-Length? ? 87

Proxy-Connection? ? keep-alive

響應(yīng)體()

例如:服務(wù)器返回打開1218的響應(yīng)結(jié)果

{

? ? ? ? "code":"200",

? ? ? ? "data":{},

? ? ? ? "errorMsg":null,

? ? ? ? "msg":"處理成功",

? ? ? ? "success":true

}

文檔先行

接口文檔一般是后端定義,并且是在理清需求規(guī)范、業(yè)務(wù)邏輯基礎(chǔ)之上開始編寫的。

開發(fā)提供接口文檔后,先看一下提供的后臺(tái)接口功能

如下面的例子,創(chuàng)建房屋(接口描述)

版本號(hào)、版本修改內(nèi)容、版本修改時(shí)間、修改人需要提供

查看請(qǐng)求的地址、請(qǐng)求方式以及請(qǐng)求的參數(shù)(下面文檔如果補(bǔ)全的話,參數(shù)是否必填、參數(shù)說明也需要提供,以及返參說明。像這樣較簡(jiǎn)單的接口文檔,測(cè)試起來確實(shí)很麻煩,接口文檔未寫清楚或接口設(shè)計(jì)評(píng)審階段QA未參與的話,理解起來確實(shí)很費(fèi)力)

例如對(duì)內(nèi)文檔:

創(chuàng)建房屋

URL/project/house/add

請(qǐng)求類型POST

參數(shù)說明參數(shù)名參數(shù)類型示例值

projectId項(xiàng)目id{

? ? "projectId":5,

? ? "name":"房屋①",

? ? "layout":"兩室一廳",

? ? "area":"100㎡"

}

name房屋名稱(50字以內(nèi))

layout房屋戶型

area房屋面積

響應(yīng)字段參數(shù)名含義

id房屋id

例如對(duì)外文檔:

新零售8/18需求,百度短信接口文檔的調(diào)整,后臺(tái)hotfix,驗(yàn)證直接上線

簡(jiǎn)單消息服務(wù)SMS

接口測(cè)試工具

Postman

“The Collaboration Platform for API Development,Postman is a collaboration platform for API development. Postman's features simplify each step of building an API and streamline collaboration so you can create better APIs—faster.”? ? ? ——摘自Postman官網(wǎng)

下載Postman,https://www.postman.com/downloads/

安裝后建立一個(gè)新的鏈接

選擇請(qǐng)求方式,輸入請(qǐng)求的URL

輸入上文中的headers,輸入請(qǐng)求的body(token可能會(huì)過期,這個(gè)以實(shí)際token生成規(guī)則為主)

點(diǎn)擊Send,查看響應(yīng)結(jié)果,查看燈是否變亮

Save后可保存當(dāng)前接口到指定目錄,用作一條記錄

Postman擴(kuò)展

可根據(jù)多個(gè)服務(wù)器通過改變地址切換測(cè)試環(huán)境,即在dev/test/stage/pro之間進(jìn)行切換

可進(jìn)行批量接口測(cè)試

可對(duì)測(cè)試的接口用例集進(jìn)行導(dǎo)入、導(dǎo)出

可捕獲web端跟移動(dòng)端請(qǐng)求(android6.0以下)

可通過使用Newman腳本生成測(cè)試報(bào)告

抓包工具

Charles

有些情況下,在被測(cè)接口不完整,比如上述的接口文檔,或沒有明確的接口文檔給出時(shí),需要我們借助抓包工具來幫助測(cè)試,利用抓包工具可以獲得業(yè)務(wù)過程中所有的項(xiàng)目接口以及包含調(diào)用的第三方接口,進(jìn)而通過截取請(qǐng)求和請(qǐng)求結(jié)果來達(dá)到分析抓包的目的。常見的抓包工具有Charles和Fiddler, Fiddler只能用在Windows平臺(tái), 而Charles可用于Windows、 Mac、iOS以及Android等多平臺(tái)。

Charles原理(以下是Https,Http無(wú)需進(jìn)行設(shè)置,三次握手四次揮手理解后,Http+s(ssl),就可以理解成Https了,Charles可以設(shè)置SSL代理)

客戶端向服務(wù)器發(fā)起Https請(qǐng)求

服務(wù)器向“客戶端”(實(shí)際上是Charles)返回服務(wù)器的CA證書

Charles攔截服務(wù)器的響應(yīng),獲取服務(wù)器證書公鑰,然后自己制作一張證書,將服務(wù)器證書替換后發(fā)送給客戶端。(這一步,Charles拿到了服務(wù)器證書的公鑰,相當(dāng)于套牌復(fù)制)

客戶端接收到“服務(wù)器”(實(shí)際上是Charles)的證書后,生成一個(gè)對(duì)稱密鑰,用Charles的公鑰加密,發(fā)送給“服務(wù)器”(Charles)

Charles攔截客戶端的響應(yīng),用自己的私鑰解密對(duì)稱密鑰,然后用服務(wù)器證書公鑰加密,發(fā)送給服務(wù)器。(這一步,Charles拿到了對(duì)稱密鑰)

服務(wù)器用自己的私鑰解密對(duì)稱密鑰,向“客戶端”(Charles)發(fā)送響應(yīng)

Charles攔截服務(wù)器的響應(yīng),替換成自己的證書后發(fā)送給客戶端

至此,連接建立,Charles拿到了服務(wù)器證書的公鑰和客戶端與服務(wù)器協(xié)商的對(duì)稱密鑰,之后就可以解密或者修改加密的報(bào)文了

最后,再回顧一下,Charles模擬了中間人(SSL層)的角色,就好比A有一個(gè)帶密碼的保險(xiǎn)箱,需要通過郵局郵寄到B,Charles就充當(dāng)了郵局的角色,將密碼跟保險(xiǎn)箱轉(zhuǎn)換成自己的的密碼跟保險(xiǎn)箱,然后把保險(xiǎn)箱里面的文件也重新放到了自己的保險(xiǎn)箱里,最后再寄到B

Charles下載

根據(jù)系統(tǒng)下載https://www.charlesproxy.com/download/

Charles基本配置

進(jìn)入Proxy--macOS Proxy勾選,查看本地請(qǐng)求

配置代理服務(wù)器,查看移動(dòng)端請(qǐng)求

進(jìn)入Proxy--Proxy Settings,設(shè)置HTTP Proxy端口號(hào),勾選 Enable transparent HTTP proxying

手機(jī)端與PC處于同一局域網(wǎng),在iPhone上找到當(dāng)前網(wǎng)絡(luò)并設(shè)置HTTP代理,設(shè)置為[手動(dòng)],服務(wù)器填寫PC的IP地址,端口寫Charles配置的代理端口(設(shè)置好之后,打開 iPhone 上的任意聯(lián)網(wǎng)的程序,就可以看到 Charles 彈出 iPhone 請(qǐng)求連接的確認(rèn)菜單,點(diǎn)擊 “Allow” 即可完成設(shè)置。)

若抓取Https,手機(jī)端需要安裝證書,步驟參考Help--SSL Proxying--Install Charles Root Certificate on a Mobile Device or Remote Browse

設(shè)置好證書后,重啟Charles,就OK了

Charles擴(kuò)展

可以打斷點(diǎn),在請(qǐng)求的任意列表數(shù)據(jù)右擊選擇breakpoints

可以模擬網(wǎng)速請(qǐng)求,Proxy--Throttle Settings進(jìn)行設(shè)置,可以保存模版下次繼續(xù)使用

可以修改服務(wù)器返回內(nèi)容,在修改基礎(chǔ)上發(fā)送

可以查看接口的性能體現(xiàn),選擇Structure--Chart

可以進(jìn)行簡(jiǎn)單的壓力測(cè)試,Tools--Advanced Repeat(并發(fā)測(cè)試還是推薦Jmeter/QTP,怎么專業(yè)怎么來,怎么有效怎么來)

接口測(cè)試

接口文檔評(píng)審

QA參與需求評(píng)審后,與case不一樣,QA充當(dāng)了參與者身份,參與接口文檔評(píng)審,評(píng)審角度也不一樣

接口文檔是否規(guī)范(上述已講述,像設(shè)計(jì)原則是開發(fā)的事兒了)

接口文檔是否閱讀方便

接口文檔是否易用

接口文檔的業(yè)務(wù)邏輯對(duì)比需求文檔是否清晰

接口是否覆蓋異常情況

接口測(cè)試用例

為了大家混淆測(cè)試類型,優(yōu)先引入兩個(gè)概念,分別是并發(fā)測(cè)試、壓力測(cè)試。

壓力測(cè)試:

打個(gè)比方,一個(gè)橋在要求滿足100個(gè)人來回走10年也不會(huì)跨,橋的繩子的承受力、地面的質(zhì)量是否可以滿足。

壓力測(cè)試更多的是指的是性能指標(biāo),在持續(xù)的請(qǐng)求過程中,服務(wù)端是否能穩(wěn)定、可靠。

并發(fā)測(cè)試:

打個(gè)比方,2個(gè)人同時(shí)上橋,不擁擠,很快上橋;3個(gè)人同時(shí)上橋,并排走,同時(shí)上橋;10個(gè)上橋,有一個(gè)可能就在別人屁股后面了(這里會(huì)引入一個(gè)MQ消息隊(duì)列的概念,并發(fā)測(cè)試會(huì)遇到,以后會(huì)講),100個(gè)人上橋就更擁擠了,可能第10分鐘后才能完全都上橋。

并發(fā)更多的是查看能否在一定時(shí)間內(nèi)把所有的事件都處理完畢,查看服務(wù)端的吞吐量、內(nèi)存CPU是否正常,是否在高并發(fā)的情況下負(fù)載均衡,響應(yīng)時(shí)間是否及時(shí)。

測(cè)試用例模版(待補(bǔ)充)

Testcase包含兩部分內(nèi)容

編號(hào)、用例名稱、用例標(biāo)題、優(yōu)先級(jí)、模塊

接口地址、請(qǐng)求方式、前置條件、請(qǐng)求頭、請(qǐng)求參數(shù)、狀態(tài)碼、期望結(jié)果

Testcase根據(jù)需求文檔、業(yè)務(wù)邏輯編輯,與正常寫case是一樣的,如模版中“工位控制”模塊中的Control1、Control2、Ccontrol3

需要覆蓋逆向的Testcase,請(qǐng)求為空,或者請(qǐng)求超出正常范圍,例如Control4、Control5

根據(jù)實(shí)際業(yè)務(wù)需求,可進(jìn)行并發(fā)請(qǐng)求,當(dāng)然這個(gè)case沒有必要測(cè)試并發(fā),例如Control6

根據(jù)實(shí)際業(yè)務(wù)需求

進(jìn)行并發(fā)測(cè)試(在評(píng)估的并發(fā)用戶后,可測(cè)試并發(fā)數(shù)是否能滿足業(yè)務(wù)要求)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容