陳茉莉,張會(huì)林,劉 波,張洋洋
(1.上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院,上海 200093;2.上海市現(xiàn)代光學(xué)系統(tǒng)重點(diǎn)實(shí)驗(yàn)室,上海 200093;3.邵陽(yáng)學(xué)院電氣系,湖南 邵陽(yáng) 422002)
在早期的軟件測(cè)試活動(dòng)中,人們普遍采用手工測(cè)試法,從編寫(xiě)測(cè)試用例開(kāi)始到執(zhí)行測(cè)試,直到比較測(cè)試結(jié)果得出測(cè)試結(jié)論,都是由測(cè)試人員手動(dòng)來(lái)完成。但是隨著軟件業(yè)的發(fā)展,測(cè)試的需求越來(lái)越大,測(cè)試所遇到的場(chǎng)景也越來(lái)越復(fù)雜,加之軟件測(cè)試過(guò)程越來(lái)越智能化、高效化,軟件測(cè)試開(kāi)始由原來(lái)的人工測(cè)試向自動(dòng)化測(cè)試方向發(fā)展。在開(kāi)發(fā)一款軟件時(shí),不可能針對(duì)每一個(gè)操作系統(tǒng)都開(kāi)發(fā)一個(gè)相應(yīng)的后臺(tái),為了能夠只用一種語(yǔ)言就開(kāi)發(fā)出各種平臺(tái)都適用的后臺(tái)程序,API就產(chǎn)生了。前端和后臺(tái)的開(kāi)發(fā)人員可以通過(guò)API來(lái)進(jìn)行交互操作,而并不需要了解對(duì)方是如何具體去實(shí)現(xiàn)這個(gè)功能的,API相當(dāng)于一個(gè)連接前后端的橋梁。既然API占據(jù)著一個(gè)特殊的地位,那么它的質(zhì)量也是軟件質(zhì)量的基礎(chǔ)。API的測(cè)試既保證了后臺(tái)的質(zhì)量,也為前端開(kāi)發(fā)人員減輕了負(fù)擔(dān)。因此,如果提高API測(cè)試的自動(dòng)化程度,就可以輔助測(cè)試人員高效完成工作。針對(duì)以上的情況,API自動(dòng)化測(cè)試系統(tǒng)的開(kāi)發(fā)刻不容緩。本系統(tǒng)主要針對(duì)Android、IOS操作系統(tǒng),對(duì)App的API進(jìn)行單元測(cè)試,保證軟件在編碼階段的質(zhì)量,為之后的集成測(cè)試、系統(tǒng)測(cè)試打下堅(jiān)實(shí)的基礎(chǔ)。另一方面,基于API的自動(dòng)化測(cè)試系統(tǒng)可以代替手工進(jìn)行API的回歸測(cè)試,這樣在系統(tǒng)版本升級(jí)的時(shí)候就不必再浪費(fèi)人力在回歸測(cè)試上,既保證了產(chǎn)品的質(zhì)量又提高了測(cè)試的效率。
本系統(tǒng)由業(yè)務(wù)處理、測(cè)試用例、數(shù)據(jù)層和Yimin工具四個(gè)部分組成。其中,業(yè)務(wù)處理是系統(tǒng)的核心部分,由它來(lái)完成訪問(wèn)持久性數(shù)據(jù)庫(kù)的操作、根據(jù)測(cè)試用例執(zhí)行測(cè)試、比較測(cè)試結(jié)果等一系列業(yè)務(wù)動(dòng)作;測(cè)試用例是業(yè)務(wù)處理的基礎(chǔ)部分,也是整個(gè)測(cè)試的基礎(chǔ),系統(tǒng)根據(jù)測(cè)試用例來(lái)執(zhí)行并比較結(jié)果得出最終測(cè)試結(jié)果;數(shù)據(jù)層主要是數(shù)據(jù)源提供數(shù)據(jù)信息,Yimin工具主要是用來(lái)和后臺(tái)交互,返回響應(yīng)的API信息。
本系統(tǒng)的主要目的是對(duì)API進(jìn)行自動(dòng)化測(cè)試,最終能夠保證軟件產(chǎn)品的質(zhì)量。首先來(lái)介紹一下API在整個(gè)軟件項(xiàng)目中的重要地位。
該項(xiàng)目是針對(duì)手機(jī)而開(kāi)發(fā)的客戶(hù)端應(yīng)用軟件,主要適用于Android和IOS兩大手機(jī)操作系統(tǒng)。為了使得軟件產(chǎn)品具有高質(zhì)量、高穩(wěn)定性、高健壯性的特點(diǎn),開(kāi)發(fā)團(tuán)隊(duì)的前后端分工十分明確。API為客戶(hù)端和后臺(tái)的交互起到了橋梁的作用。API在項(xiàng)目中的位置如圖1所示。
圖1 API在項(xiàng)目中的位置
API在整個(gè)項(xiàng)目中所處的特殊地位,要求它的質(zhì)量必須夠高,也正因?yàn)槿绱耍瑢?duì)API的測(cè)試也是整個(gè)測(cè)試環(huán)節(jié)中必不可少的。因?yàn)閅imin這個(gè)工具的局限性,本文提出了針對(duì)API測(cè)試的自動(dòng)化測(cè)試系統(tǒng),這個(gè)系統(tǒng)的主要作用是省去測(cè)試人員對(duì)測(cè)試結(jié)果一一比對(duì)的過(guò)程,由系統(tǒng)自動(dòng)去完成獲取接口返回信息和結(jié)果比較的工作,也減少了對(duì)API進(jìn)行回歸測(cè)試的成本。
本系統(tǒng)主要分為大四個(gè)模塊:業(yè)務(wù)邏輯、數(shù)據(jù)層、Yimin和測(cè)試用例,各個(gè)模塊之間相互協(xié)作完成測(cè)試工作,同時(shí)四個(gè)模塊又是相互獨(dú)立的模塊,每一個(gè)模塊內(nèi)部發(fā)生變化,都不會(huì)對(duì)其他模塊產(chǎn)生影響。模塊之間的關(guān)系如圖2所示。
圖2 系統(tǒng)的總體設(shè)計(jì)
如圖2所示,業(yè)務(wù)邏輯層是整個(gè)系統(tǒng)的核心部分,由它來(lái)完成訪問(wèn)數(shù)據(jù)層和測(cè)試用例的工作,在業(yè)務(wù)邏輯層中,還會(huì)對(duì)結(jié)果進(jìn)行處理,它會(huì)訪問(wèn)Yimin工具。數(shù)據(jù)層主要是為測(cè)試提供數(shù)據(jù)支持,它會(huì)提供測(cè)試過(guò)程中需要用到的存儲(chǔ)在數(shù)據(jù)庫(kù)中的數(shù)據(jù)。測(cè)試用例主要是提供一些訪問(wèn)Yimin所需要的信息和進(jìn)行測(cè)試的期望結(jié)果。Yimin是該系統(tǒng)專(zhuān)門(mén)用于API測(cè)試的一個(gè)工具,當(dāng)通過(guò)拼接接口名加參數(shù)連接上Yimin之后,Yimin這個(gè)工具會(huì)返回相應(yīng)的接口信息。四個(gè)模塊各有所長(zhǎng),它們只要完成各自負(fù)責(zé)的功能,不需要干預(yù)其他的模塊功能的實(shí)現(xiàn),而且其中一個(gè)模塊的變化對(duì)于其它兩個(gè)模塊來(lái)說(shuō)是透明的。
業(yè)務(wù)邏輯層作為系統(tǒng)的核心模塊,需要和數(shù)據(jù)層、測(cè)試用例進(jìn)行交互。業(yè)務(wù)邏輯層在與數(shù)據(jù)層交互時(shí)主要采用了Spring的DAO模式;訪問(wèn)測(cè)試用例時(shí)主要是通過(guò)測(cè)試用例的路徑來(lái)獲得,接著解析測(cè)試用例獲得名稱(chēng)、期望結(jié)果等信息;最后通過(guò)測(cè)試用例中解析出來(lái)的信息,生成一個(gè)URL來(lái)訪問(wèn)Yimin工具。
本項(xiàng)目中使用了一些Spring的注解,使得項(xiàng)目的開(kāi)發(fā)變得簡(jiǎn)單高效。Spring利用了DAO模式,將業(yè)務(wù)邏輯和數(shù)據(jù)層分離。該系統(tǒng)采用Spring的DAO模式來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn),使用MySQL的數(shù)據(jù)庫(kù)。Spring可以通過(guò)配置文件實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接,訪問(wèn)數(shù)據(jù)源,本系統(tǒng)采用DAO模式,并用JDBC的方式來(lái)實(shí)現(xiàn)DAO。為了更好地模塊化JDBC操作,簡(jiǎn)化傳統(tǒng)的JDBC操作的復(fù)雜和繁瑣過(guò)程,使用模板方式封裝JDBC數(shù)據(jù)庫(kù)操作,即JdbcTemplate。用模板封裝數(shù)據(jù)庫(kù)操作的優(yōu)點(diǎn)在于可以簡(jiǎn)化JDBC的操作,開(kāi)發(fā)者只需要提供SQL、設(shè)置SQL中的變量,最后提取ResultSet,而JDBC對(duì)象的獲取釋放、異常類(lèi)型轉(zhuǎn)化的操作都由模板負(fù)責(zé)。最后通過(guò)TestNG的配置文件來(lái)達(dá)到將測(cè)試用例和代碼相分離的目的。只需要將要執(zhí)行的case放入配置文件中,在執(zhí)行測(cè)試時(shí),選擇Run as TestNG Suite,測(cè)試就能按照測(cè)試用例一條一條執(zhí)行下去。該方法使得自動(dòng)化測(cè)試具有了更高的靈活性,不再受到測(cè)試用例的約束。在測(cè)試執(zhí)行得到一個(gè)結(jié)果后,需要對(duì)測(cè)試結(jié)果和期望結(jié)果進(jìn)行比較,其中一種就是得到的測(cè)試結(jié)果完全等價(jià)于期望的結(jié)果,這里使用equals()方法來(lái)進(jìn)行兩個(gè)結(jié)果之間的比較。另一種可能的結(jié)果就是測(cè)試結(jié)果中包含了期望結(jié)果的內(nèi)容,在這種情況下,只要測(cè)試所得出的結(jié)果集中包含了期望結(jié)果中的所有的信息,那么測(cè)試也能通過(guò)。這種情況可以使用contains()方法來(lái)實(shí)現(xiàn)。還有一種測(cè)試結(jié)果就是對(duì)數(shù)字的比較,有些情況下,系統(tǒng)的邏輯要求是如果某個(gè)參數(shù)的值不大于某個(gè)指定值,就可以認(rèn)為測(cè)試是通過(guò)的。
本文介紹了軟件測(cè)試在軟件發(fā)展過(guò)程中所占據(jù)的不可替代的位置,并且隨著軟件復(fù)雜度的增加,軟件測(cè)試的重要性也越發(fā)突出。隨著功能的不斷增加,手工測(cè)試不再是高效的測(cè)試方法。自動(dòng)化測(cè)試的效率很高,減少測(cè)試人員的測(cè)試時(shí)間,能讓測(cè)試人員更加專(zhuān)注于測(cè)試用例的設(shè)計(jì),使得系統(tǒng)的邏輯更加細(xì)致和完善。本文介紹了基于Spring的API自動(dòng)化測(cè)試系統(tǒng)中所用到的技術(shù),主要包括Spring框架、DAO模式和TestNG框架。介紹了基于Spring的API自動(dòng)化測(cè)試系統(tǒng)的設(shè)計(jì);采用了分層的設(shè)計(jì)思想,將業(yè)務(wù)邏輯層和數(shù)據(jù)層分離;運(yùn)用Spring的IOC容器實(shí)現(xiàn)依賴(lài)注入,讓IOC容器來(lái)管理對(duì)象之間的依賴(lài)關(guān)系,降低耦合度;采用TestNG測(cè)試框架將測(cè)試用例和測(cè)試代碼分離,由系統(tǒng)自己去讀取測(cè)試用例,將執(zhí)行的結(jié)果和測(cè)試用例中的期望結(jié)果進(jìn)行比較來(lái)得到最終的測(cè)試結(jié)果。本系統(tǒng)目前的主要作用是用于對(duì)API的自動(dòng)化測(cè)試,只要對(duì)該系統(tǒng)稍加改進(jìn),就能擴(kuò)展到對(duì)UI的自動(dòng)化測(cè)試,具有廣闊的應(yīng)用前景。
[1] 戴莉萍,杜 瓊.一種軟件測(cè)試V模型的改進(jìn)及其應(yīng)用[J].計(jì)算機(jī)與現(xiàn)代化,2004,13(7):29-33.
[2] 柯 玲,徐 京,李 穎.IOC模式及其在設(shè)備監(jiān)控軟件中的應(yīng)用[J].航天器工程,2009,(18):117-122.
[3] 林 寧,孟慶余.軟件測(cè)試實(shí)用指南[M].北京:清華大學(xué)出版社,2004.
[4] 劉曉丹,武君勝.基于數(shù)據(jù)驅(qū)動(dòng)的自動(dòng)化測(cè)試平臺(tái)設(shè)計(jì)[J].科學(xué)技術(shù)與工程,2008,8(3):779-782.
[5] 王 萍.軟件測(cè)試的重要性[J].軟件導(dǎo)刊,2009,4(8):20-21.
[6] 王艷秋,燕孝飛.軟件自動(dòng)化測(cè)試初探[J].計(jì)算機(jī)與網(wǎng)絡(luò),2007,2(5):168-171.
[7] Randell B.System structure for software fault tolerance[J].IEEE Trans.Software Eng,1975,14(6):220-231.
[8] Bill Councill.Third-Party Testing and Stirrings of The New Software Engineering[J].IEEE Software,1999,16(6):76-79.
[9] Edward Kit.軟件測(cè)試過(guò)程改進(jìn)[M].北京:機(jī)械工業(yè)出版社,2003.
[10]GUO PJ,ERNST MD,PERKINGS JH,et al.The Daikon System for dynamic detection of likcly invariants[Z].2006.