如何做好接口測(cè)試?
sgbtmy:基于selenium的自動(dòng)化框架開發(fā),我主要是想問一下,你的框架除了前臺(tái)的自動(dòng)化,后臺(tái)的數(shù)據(jù)的測(cè)試是否集成在你的測(cè)試框架中?
小刀:你好,個(gè)人理解的你所說的后臺(tái)的數(shù)據(jù)的測(cè)試是指的是對(duì)數(shù)據(jù)的校驗(yàn),不知理解的是否正確,那么根據(jù)這個(gè)理解,我的解釋是,在我們框架中,增加了很多的功能方法用來幫助進(jìn)行自動(dòng)化腳本的編寫和結(jié)果校驗(yàn),其中就包括后臺(tái)數(shù)據(jù)校驗(yàn)方法,當(dāng)我們的測(cè)試用例需要在后臺(tái)進(jìn)行數(shù)據(jù)校驗(yàn)的時(shí)候,調(diào)用這些數(shù)據(jù)校驗(yàn)方法即可。相當(dāng)于是,前臺(tái)頁(yè)面操作的自動(dòng)化是封裝selenium的方法去操作頁(yè)面,而對(duì)后臺(tái)數(shù)據(jù)的校驗(yàn)是通過增加功能方法來實(shí)現(xiàn)的,可以理解為不同的兩部分,但是在編寫測(cè)試腳本的似乎,根據(jù)測(cè)試用例的設(shè)計(jì),這兩部分都可以拿過來使用。
不知道是否解答了你的疑問,如果沒有,請(qǐng)你指出,謝謝你。
tjy688:你們做接口測(cè)試的流程一般是怎么樣的?
小刀:接口測(cè)試的流程其實(shí)和功能測(cè)試的流程類似,因?yàn)榻涌跍y(cè)試依賴的主要對(duì)象也是需求說明書,所以,最初的流程就是參與需求討論,評(píng)審需求。
需求確定以后,開發(fā)會(huì)根據(jù)需求進(jìn)行接口設(shè)計(jì),會(huì)產(chǎn)出接口定義,在開發(fā)設(shè)計(jì)過程中,有能力的話,可以給出一些針對(duì)設(shè)計(jì)的建議,提高可測(cè)性,針對(duì)需求及設(shè)計(jì),進(jìn)行測(cè)試計(jì)劃,測(cè)試設(shè)計(jì),然后還需要和配管確定測(cè)試環(huán)境相關(guān)的事情。
在開發(fā)完成接口定義之后,就根據(jù)需求文檔及接口定義進(jìn)行測(cè)試用例設(shè)計(jì),測(cè)試用例設(shè)計(jì)主要從業(yè)務(wù)場(chǎng)景,功能,以及異常測(cè)試幾個(gè)方面考慮。
測(cè)試用例設(shè)計(jì)完成后,針對(duì)測(cè)試用例進(jìn)行評(píng)審,然后,如果開發(fā)代碼部分可測(cè)時(shí),即可進(jìn)入測(cè)試了,因?yàn)槭遣糠挚蓽y(cè),可能會(huì)使用到mock方法。
已有測(cè)試代碼時(shí),就要進(jìn)行測(cè)試代碼的持續(xù)集成了,我們是使用hudson來進(jìn)行持續(xù)集成的
在項(xiàng)目結(jié)束后,會(huì)對(duì)每個(gè)項(xiàng)目進(jìn)行總結(jié)。
如果有問題,請(qǐng)指出,我們一起討論。
xinhuayw:我想了解一下你們現(xiàn)在是怎樣保證項(xiàng)目測(cè)試用例的重復(fù)運(yùn)行的。
小刀:對(duì)于接口測(cè)試來說,項(xiàng)目測(cè)試用例的重復(fù)運(yùn)行首先是表現(xiàn)在單個(gè)測(cè)試用例的獨(dú)立性方面的,也就是說,每一個(gè)測(cè)試用例的運(yùn)行除了依賴被測(cè)對(duì)象和對(duì)應(yīng)的數(shù)據(jù)庫(kù)環(huán)境外,是不依賴于其他任何測(cè)試用例的,并且這個(gè)測(cè)試用例執(zhí)行完畢后,對(duì)系統(tǒng)來說,也是沒有任何痕跡的,這樣就保證了每個(gè)測(cè)試用例運(yùn)行時(shí),都在一個(gè)干凈的環(huán)境中運(yùn)行。要實(shí)現(xiàn)測(cè)試用例的獨(dú)立性,就必須對(duì)被測(cè)系統(tǒng)的設(shè)計(jì)有詳細(xì)的了解,這樣,不會(huì)出現(xiàn)測(cè)試用例執(zhí)行后遺漏數(shù)據(jù),環(huán)境未改變,另外,還需要對(duì)測(cè)試用例進(jìn)行詳細(xì)的設(shè)計(jì)。另外,要保證測(cè)試用例的重復(fù)使用,還需要做到測(cè)試用例的及時(shí)更新,在這個(gè)方面,我們是做接口測(cè)試的人會(huì)維護(hù)對(duì)應(yīng)的系統(tǒng)的接口測(cè)試用例,要保證,代碼每次更新,測(cè)試用例都必須全部執(zhí)行通過。
csun888:什么是接口測(cè)試,基礎(chǔ)知識(shí)什么的講講吧!
小刀:你好,接口可以分下面幾種
1、系統(tǒng)與系統(tǒng)之間的調(diào)用,比如銀行會(huì)提供接口供電子商務(wù)網(wǎng)站調(diào)用,或者說,支付寶會(huì)提供接口給淘寶調(diào)用
2、上層服務(wù)對(duì)下層服務(wù)的調(diào)用,比如service層會(huì)調(diào)用DAO層的接口,而應(yīng)用層又會(huì)調(diào)用服務(wù)層提供的接口,一般會(huì)通過
3、服務(wù)之間的調(diào)用,比如注冊(cè)用戶時(shí),會(huì)先調(diào)用用戶查詢的服務(wù),查看該用戶是否已經(jīng)注冊(cè)。
而我們所要做的接口測(cè)試,先要了解是基于哪一種類型的接口測(cè)試,不同類型的接口測(cè)試方法可能是不一致的,總體來說,不管是那種類型,我們只要把被測(cè)接口當(dāng)做是服務(wù)方,而把我們的測(cè)試手段當(dāng)做是客戶方,我們的目的就是,通過我們的測(cè)試手段,去驗(yàn)證服務(wù)端滿足了他聲明提供的功能。
至于說到具體的測(cè)試方法,http協(xié)議的接口測(cè)試,一般會(huì)用jmeter去測(cè)試,jmeter的好處是不用寫測(cè)試代碼,直接使用jmeter提供的http請(qǐng)求去測(cè)試,也可以使用HTTPClient去測(cè)試,好處是可以方便集成和自動(dòng)化。java接口的測(cè)試,則需要編寫測(cè)試代碼去測(cè)試,有點(diǎn)類似于單元測(cè)試,但是需要更多的考慮業(yè)務(wù)場(chǎng)景。
gulun:接口測(cè)試的數(shù)據(jù)準(zhǔn)備,應(yīng)該怎么做呢?
小刀:接口測(cè)試的數(shù)據(jù)準(zhǔn)備,可以從下面幾個(gè)方面去考慮:
1、如果是只測(cè)試一次的接口,可以使用硬編碼的方式準(zhǔn)備測(cè)試數(shù)據(jù),在寫測(cè)試代碼的時(shí)候,使用到什么數(shù)據(jù)就寫什么數(shù)據(jù),為了避免數(shù)據(jù)重復(fù),可能比較多的會(huì)用到隨機(jī)字符或隨機(jī)數(shù)
2、可以直接通過調(diào)用其他API的方式準(zhǔn)備測(cè)試數(shù)據(jù),這種情況在測(cè)試最上層服務(wù)的時(shí)候比較有用,比如測(cè)試團(tuán)購(gòu)購(gòu)買服務(wù),就需要準(zhǔn)備要購(gòu)買的團(tuán)購(gòu)數(shù)據(jù),購(gòu)買團(tuán)購(gòu)的用戶數(shù)據(jù),這個(gè)時(shí)候,可以直接調(diào)用生產(chǎn)團(tuán)購(gòu)的api和生成用戶的api直接生成測(cè)試數(shù)據(jù)
3、使用excel或xml準(zhǔn)備測(cè)試數(shù)據(jù),這種準(zhǔn)備測(cè)試數(shù)據(jù)的方式,主要針對(duì)對(duì)象數(shù)據(jù)的準(zhǔn)備,比如可以將一條團(tuán)購(gòu)數(shù)據(jù)對(duì)應(yīng)excel中的一條數(shù)據(jù),因?yàn)橐话汩_發(fā)都會(huì)使用pojo映射,而在準(zhǔn)備測(cè)試數(shù)據(jù)的時(shí)候,這些pojo對(duì)象屬性的設(shè)置往往是重復(fù)和大工作量的,用excel或XML方式準(zhǔn)備,則可以減少在代碼當(dāng)中重復(fù)去準(zhǔn)備這些數(shù)據(jù)。
4、也可以使用工具方法的形式去準(zhǔn)備測(cè)試數(shù)據(jù),通過在代碼中寫工具方法去實(shí)現(xiàn)數(shù)據(jù)生成,而在測(cè)試代碼中調(diào)用工具方法去得到所需數(shù)據(jù)。
水生哥哥:你好,我想問一下:接口測(cè)試怎么設(shè)計(jì)測(cè)試用例呢?
小刀:你好,我覺得接口測(cè)試用例的設(shè)計(jì)方法其實(shí)和功能測(cè)試用例的設(shè)計(jì)方法是類似的,因?yàn)榻涌谑切枰獫M足需求的,而接口測(cè)試所依賴的也是需求說明書,但是,因?yàn)榻涌跍y(cè)試畢竟是通過代碼去測(cè)試代碼,所以,為了保證覆蓋率,可能會(huì)使用到單元測(cè)試的方法,具體的測(cè)試用例設(shè)計(jì),我考慮的如下,請(qǐng)參考,如果有錯(cuò)誤,一起討論。
輸入?yún)?shù)測(cè)試:針對(duì)輸入的參數(shù)進(jìn)行測(cè)試,也可以說是假定接口參數(shù)的不正確性進(jìn)行的測(cè)試,確保接口對(duì)任意類型的輸入都做了相應(yīng)的處理:輸入?yún)?shù)合法,輸入?yún)?shù)不合法,輸入?yún)?shù)為空,輸入?yún)?shù)為null,輸入?yún)?shù)超長(zhǎng);
功能測(cè)試:接口是否滿足了所提供的功能,相當(dāng)于是正常情況測(cè)試,如果一個(gè)接口功能復(fù)雜時(shí)推薦對(duì)接口用例進(jìn)行結(jié)構(gòu)劃分,這樣子用例具有更好的可讀性和維護(hù)性。
邏輯測(cè)試:邏輯測(cè)試嚴(yán)格講應(yīng)為單元測(cè)試,單元測(cè)試應(yīng)保持內(nèi)部邏輯的正確性,可單元測(cè)試和接口測(cè)試界限并不是那么清楚,所以我們也可以從給出的設(shè)計(jì)文檔中考慮內(nèi)部邏輯錯(cuò)誤的分支情況和異常;
異常情況測(cè)試:接口實(shí)現(xiàn)是否對(duì)異常情況都進(jìn)行了處理,接口輸入?yún)?shù)雖然合法,但是在接口實(shí)現(xiàn)中,也會(huì)出現(xiàn)異常,因?yàn)閮?nèi)部的異常不一定是輸入的數(shù)據(jù)造成的,而有可能是其他邏輯造成的,程序需要對(duì)任何的異常都進(jìn)行處理。
永遠(yuǎn)的測(cè)試者:才開始測(cè)試,對(duì)接口測(cè)試感興趣,可是,當(dāng)前的能力又無法進(jìn)行接口測(cè)試,怎么樣才能進(jìn)入接口測(cè)試呢?
小刀:你好,如果要做接口測(cè)試,是需要一定的編程能力的,需要學(xué)習(xí)相對(duì)應(yīng)的開發(fā)語(yǔ)言的,然后還需要學(xué)習(xí)開發(fā)所使用的一些框架,比如ibatis,spring等,對(duì)數(shù)據(jù)庫(kù)的操作也需要了解一些,還有eclipse操作,這些內(nèi)容并不需要了解的多么深入,如果只是一般的做做接口測(cè)試,這些能夠使用就可以了,當(dāng)然,要做好接口測(cè)試,就另當(dāng)別論了。
我不知道你當(dāng)前是什么樣的能力,所以,我的建議就是,
1、學(xué)習(xí)編程語(yǔ)言,基礎(chǔ)的語(yǔ)法,循環(huán),條件等
2、學(xué)習(xí)項(xiàng)目工程管理及開發(fā)框架:eclipse,maven,svn,ibatis,spring等
3、學(xué)習(xí)Xunit
4、自己嘗試去寫測(cè)試代碼
其實(shí),上面的過程除了第一步是必須具備的意外,其他的都可以一邊寫測(cè)試代碼,一邊學(xué)習(xí),最好的辦法就是看開發(fā)寫的代碼,并且,請(qǐng)開發(fā)寫一個(gè)正常的測(cè)試代碼,然后照著開發(fā)的測(cè)試代碼去模仿。
iTest99:你認(rèn)為接口測(cè)試由開發(fā)團(tuán)隊(duì)做好還是測(cè)試團(tuán)隊(duì)好?各有什么優(yōu)勢(shì)和弱點(diǎn)?
小刀:我覺得,還是要區(qū)分一下單元測(cè)試和接口測(cè)試,單元測(cè)試一般來說,是針對(duì)具體的代碼邏輯進(jìn)行測(cè)試,盡量減少這些功能單元集成起來出錯(cuò)的可能性,一般是由開發(fā)人員來完成,而接口測(cè)試,更注重從用戶的角度設(shè)計(jì)用例,更偏向于功能測(cè)試,單元測(cè)試設(shè)計(jì)測(cè)試用例的時(shí)候,可能更多的考慮是代碼覆,而接口測(cè)試,則需要更多的考慮業(yè)務(wù)覆蓋。單元測(cè)試由開發(fā)人員來做,可以保證從代碼角度來看是沒有問題的,但服務(wù)保證業(yè)務(wù)角度來看也是沒有問題的,而接口測(cè)試,則通過業(yè)務(wù)的角度去設(shè)計(jì)測(cè)試用例,其實(shí),也可以說是從更早的時(shí)候,以功能測(cè)試的方法,先保證項(xiàng)目的流程及功能是正常的,而不至于在頁(yè)面開發(fā)完成后,又修改主要功能代碼,導(dǎo)致項(xiàng)目趕工及一系列的重寫。
所以,我覺得,單元測(cè)試由開發(fā)人員來做,接口測(cè)試由測(cè)試人員來做。
至于你說的學(xué)習(xí)接口的成本,我覺得這個(gè)成本并不高,原因是:
1、接口測(cè)試的用例也是依賴需求文檔的,并不是根據(jù)開發(fā)代碼去設(shè)計(jì)
2、接口測(cè)試的用例可以在功能測(cè)試中復(fù)用。
3、接口測(cè)試看似增加測(cè)試時(shí)間,實(shí)則不然,因?yàn)椋涌跍y(cè)試會(huì)更早的發(fā)現(xiàn)bug,而使得修改bug的成本更低,接口測(cè)試會(huì)減少功能測(cè)試的時(shí)間,應(yīng)該接口測(cè)試會(huì)確保主要流程功能的正確性,接口測(cè)試更容易實(shí)現(xiàn)持續(xù)集成,從而減少回歸測(cè)試的次數(shù)。
txTester11:我想請(qǐng)問:接口測(cè)試盒單元測(cè)試有什么區(qū)別?接口測(cè)試和白盒測(cè)試又有什么區(qū)別?
小刀:單元測(cè)試是針對(duì)具體的代碼邏輯進(jìn)行測(cè)試,主要測(cè)試被測(cè)代碼的一個(gè)很小的、很明確的功能是否正確。通常而言,一個(gè)單元測(cè)試是用于判斷某個(gè)特定條件(或者場(chǎng)景)下某個(gè)特定函數(shù)的行為。例如,你可能把一個(gè)很大的值放入一個(gè)有序list 中去,然后確認(rèn)該值出現(xiàn)在list 的尾部。或者,你可能會(huì)從字符串中刪除匹配某種模式的字符,然后確認(rèn)字符串確實(shí)不再包含這些字符了。盡量減少這些功能單元集成起來出錯(cuò)的可能性,單元測(cè)試一般是由開發(fā)人員自己去完成,單元測(cè)試可能不會(huì)考慮業(yè)務(wù)是如何的,會(huì)更多的考慮,我這個(gè)單元模塊邏輯是否正確。
接口測(cè)試指的是針對(duì)程序內(nèi)部的或者外部的接口進(jìn)行的測(cè)試,一個(gè)接口方法可能會(huì)包含多個(gè)單元模塊,而且,一個(gè)接口會(huì)有自己特定的業(yè)務(wù)定義,所以,做接口測(cè)試的時(shí)候,更多的需要從業(yè)務(wù)的角度去考慮如何測(cè)試這個(gè)接口。
不管是接口測(cè)試還是單元測(cè)試,其實(shí)都屬于白盒測(cè)試的一個(gè)階段,白盒測(cè)試具體的方法有很多種,比如代碼審查,比如代碼覆蓋。

浙公網(wǎng)安備 33010602011771號(hào)