一文搞定Java和Python在接口測(cè)試中的應(yīng)用

本文將會(huì)通過java和python編碼的方式來幫助大家實(shí)現(xiàn)接口測(cè)試。另外讀者還可以通過這篇文章了解到什么是接口測(cè)試、工作中接口測(cè)試的主要分類、接口測(cè)試優(yōu)勢(shì)、接口測(cè)試的評(píng)估標(biāo)準(zhǔn)、開展接口測(cè)試的通用過程等入門接口測(cè)試必備知識(shí)點(diǎn)。如果你想上手接口測(cè)試,她一定會(huì)幫到你!無論你的接口項(xiàng)目編碼使用的是java還是python,看這篇文章就夠了!

接口測(cè)試必備知識(shí)點(diǎ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)系等。

工作中接口測(cè)試的主要分類

1.模塊接口測(cè)試(開發(fā)人員)

模塊接口測(cè)試是單元測(cè)試的基礎(chǔ)。它主要測(cè)試模塊的調(diào)用與返回。類似于JUnit或者unittest中的單元測(cè)試。

2.Web接口測(cè)試(測(cè)試工作重點(diǎn))

web接口測(cè)試又可分為兩類:服務(wù)器接口測(cè)試和外部接口測(cè)試。

服務(wù)器接口測(cè)試:

是測(cè)試前端與服務(wù)器的接口(最常用的接口測(cè)試場(chǎng)景)。

外部接口測(cè)試:

這個(gè)很典型的例子就是第三方登錄,比如你做的新系統(tǒng)免于新用戶重新注冊(cè)的麻煩會(huì)提供第三方登錄,那用戶在登錄的時(shí)候調(diào)用的就是第三方登錄的接口,由第三方驗(yàn)證用戶名和密碼并且返回給當(dāng)前系統(tǒng)。

接口測(cè)試優(yōu)勢(shì)

1.接口測(cè)試相對(duì)容易實(shí)現(xiàn)自動(dòng)化持續(xù)集成,且相對(duì)UI自動(dòng)化也比較穩(wěn)定

2.測(cè)試可以更早的介入

3.可以發(fā)現(xiàn)功能測(cè)試覆蓋不到的服務(wù)端問題

接口文檔

接口文檔是接口測(cè)試的依據(jù),在接口文檔不完善的情況下不主張開展接口測(cè)試

接口文檔不管以什么形式存在,需要包含的內(nèi)容有:

a.接口名稱以及業(yè)務(wù)描述

b.接口類型(http\webservices等等)

c.輸入?yún)?shù)

? ? ? ? ? ? ? ? ?每個(gè)參數(shù)名;

? ? ? ? ? ? ? ? ?每個(gè)參數(shù)類型;

? ? ? ? ? ? ? ? ?每個(gè)參數(shù)業(yè)務(wù)含義;

? ? ? ? ? ? ? ? ?每個(gè)是否可空;

? ? ? ? ? ? ? ? ?每個(gè)字段長(zhǎng)度(可選,一般需要提供,有嚴(yán)格要求的字段需特別注明);

? ? ? ? ? ? ? ? ?每個(gè)參數(shù)的單位(可選,金額類字段需注明);

d.輸出結(jié)果

? ? ? ? ? ? ? ? ? 每個(gè)參數(shù)名;

? ? ? ? ? ? ? ? ? ?每個(gè)參數(shù)類型;

? ? ? ? ? ? ? ? ? ?每個(gè)參數(shù)業(yè)務(wù)含義;

接口測(cè)試介入階段

接口測(cè)試應(yīng)該在程序的開發(fā)階段就開始,具體的時(shí)間點(diǎn)應(yīng)該是在后臺(tái)接口開發(fā)基本完畢之后,需要開始接口測(cè)試,在前端寫功能之前對(duì)接口進(jìn)行測(cè)試,能夠在早期就把接口層的問題暴露出來,后續(xù)前端在寫功能時(shí)能夠減少很多由于接口問題導(dǎo)致返工的工作量。

接口測(cè)試評(píng)估標(biāo)準(zhǔn)

業(yè)務(wù)功能覆蓋是否完整

業(yè)務(wù)規(guī)則覆蓋是否完整(與業(yè)務(wù)相關(guān)的操作規(guī)范、管理章程、規(guī)章制度、行業(yè)標(biāo)準(zhǔn)等)

參數(shù)驗(yàn)證是否達(dá)到要求(邊界、業(yè)務(wù)規(guī)則)

返回?cái)?shù)據(jù)正確性與格式

接口異常場(chǎng)景覆蓋是否完整

接口覆蓋率是否達(dá)到要求

性能指標(biāo)是否滿足要求(接口的響應(yīng)時(shí)間、處理能力)

安全指標(biāo)是否滿足要求(一般接口都不會(huì)暴露在網(wǎng)上任意被調(diào)用,需要做一些限制,比如鑒權(quán)或認(rèn)證。)

開展接口測(cè)試的過程

確認(rèn)接口文檔(接口測(cè)試依據(jù))

準(zhǔn)備數(shù)據(jù)(往往耗費(fèi)很多精力)

構(gòu)建接口(根據(jù)接口文檔,使用代碼或者工具),代碼選擇java或者python,工具選擇postman、jmeter等

校驗(yàn)接口請(qǐng)求(根據(jù)接口文檔,使用代碼或者工具)

http接口實(shí)戰(zhàn)

接口項(xiàng)目介紹

使用http協(xié)議是目前最常用的接口調(diào)用方式,她的本質(zhì)是通過http請(qǐng)求調(diào)用后端的api,具體過程如下圖所示:


關(guān)于http知識(shí)的詳細(xì)內(nèi)容在這里就不做詳細(xì)介紹了,作為一個(gè)tester,http請(qǐng)求是必會(huì)的知識(shí)點(diǎn)之一,請(qǐng)大家自己查閱學(xué)習(xí),重點(diǎn)關(guān)注如下內(nèi)容:

請(qǐng)求方法(重點(diǎn)關(guān)注get和post)

請(qǐng)求頭參數(shù)含義

響應(yīng)頭參數(shù)含義

響應(yīng)代碼含義

我們這里重點(diǎn)講解如何通過java和python代碼的方式進(jìn)行http接口測(cè)試,主要就兩步(比大象放冰箱里還簡(jiǎn)單)

1.http請(qǐng)求構(gòu)建

2.http請(qǐng)求的解析

舉一個(gè)get接口請(qǐng)求的例子

接口描述:判斷獲取用戶的姓名和年齡是否成功

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方式實(shí)現(xiàn)

Python使用requests模塊進(jìn)行接口測(cè)試

安裝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方式實(shí)現(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對(duì)同一個(gè)接口調(diào)用的實(shí)現(xiàn),我們很容易發(fā)現(xiàn)二者的實(shí)現(xiàn)差別不大,只要掌握了一門語言,使用另一門語言做接口測(cè)試也只不過是換了一種調(diào)用形式而已!核心就是:

使用合適的包或者模塊

發(fā)送http請(qǐng)求

獲取http請(qǐng)求

接口測(cè)試在unittest中的應(yīng)用

在實(shí)際工作中,我們利用上面的核心代碼+單元測(cè)試框架就可以完全搞定接口測(cè)試

Python unittest單元測(cè)試源碼如下:


接口測(cè)試在junit4中的應(yīng)用

Java Junit4源碼如下:

總結(jié)

接口自動(dòng)化測(cè)試的本質(zhì)總結(jié)為以下兩點(diǎn):

通過使用requests或者h(yuǎn)ttpclient提供的api,發(fā)送接口請(qǐng)求

解析接口響應(yīng)判斷接口發(fā)送成功與否;

大家可以看到發(fā)送接口請(qǐng)求的api要比ui自動(dòng)化涉及的api少很多,也簡(jiǎn)單很多,因此更適合大家進(jìn)行代碼入門!關(guān)于ui自動(dòng)化測(cè)試大家可以關(guān)注我的另一篇文章:

一文搞定Java和Python在Selenium3中的應(yīng)用

隨著大家接口測(cè)試經(jīng)驗(yàn)的不斷積累,在工作中可能還會(huì)遇到webservice、或者dubbo類型的接口,其實(shí)無論對(duì)于哪種接口進(jìn)行測(cè)試,其本質(zhì)和方法與我們文章中介紹的都是一致的!不同的接口會(huì)涉及使用不同的第三方j(luò)ar包或者模塊中的api來構(gòu)建接口而已。個(gè)人經(jīng)驗(yàn),接口測(cè)試的難點(diǎn)不在于技術(shù)手段,而是前期的溝通工作!想要做好接口測(cè)試的重點(diǎn)是接口文檔的詳盡程度以及文檔變更后及時(shí)通知的管理策略。各位同學(xué)可以在實(shí)際工作中多總結(jié)、多體會(huì)、找出一條適合自己公司的接口測(cè)試開展方案。真的寫了很多也非常地辛苦,原創(chuàng)不易,如果文章幫到了你,歡迎轉(zhuǎn)發(fā),讓更多的朋友受益!

最后編輯于
?著作權(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)容