使用不同的測(cè)試工具改备,包括單元測(cè)試工具灿渴、功能測(cè)試工具和性能測(cè)試工具等叹侄,但它們之間缺乏很好的聯(lián)系、相互之間比較孤立扒秸,沒(méi)有形成完整的體系或沒(méi)有形成我們心目中一直渴望獲得的自動(dòng)化測(cè)試流水線播演。自動(dòng)化測(cè)試不等同于“簡(jiǎn)單地使用幾個(gè)測(cè)試工具”,而是能構(gòu)成一個(gè)全過(guò)程的自動(dòng)化測(cè)試伴奥,將代碼構(gòu)建写烤、軟件包快速驗(yàn)證、部署拾徙、測(cè)試執(zhí)行到報(bào)告生成等各個(gè)環(huán)節(jié)緊密聯(lián)系起來(lái)洲炊,形成一個(gè)自動(dòng)化體系。
為何要建立自動(dòng)化測(cè)試框架
最初的測(cè)試工具只提供了簡(jiǎn)單的捕捉/回放功能锣吼,記錄鍵盤和鼠標(biāo)的操作选浑,并捕捉屏幕變化,然后播放所記錄的操作玄叠,進(jìn)行驗(yàn)證古徒。這樣的腳本很難維護(hù),從而要求開(kāi)發(fā)功能和靈活性更強(qiáng)的測(cè)試工具读恃,并能將這些工具很好地整合起來(lái)隧膘,使整個(gè)自動(dòng)化測(cè)試過(guò)程的各個(gè)部分或各個(gè)階段能很好地銜接在一起代态。所以,才有了前面所介紹的Selenium系列工具疹吃,將腳本錄制蹦疑、開(kāi)發(fā)、執(zhí)行等集成在一起萨驶,向我們展示自動(dòng)化測(cè)試框架的魅力歉摧。
為何要建立自動(dòng)化測(cè)試框架?
1) 要構(gòu)成一個(gè)完整的自動(dòng)化體系腔呜,真正形成自動(dòng)化測(cè)試的流水線叁温,使整個(gè)測(cè)試過(guò)程能一氣呵成。這其中核畴,不僅包括自動(dòng)化測(cè)試的執(zhí)行膝但,還包括自動(dòng)化測(cè)試腳本的開(kāi)發(fā)、軟件包自動(dòng)部署及測(cè)試報(bào)告自動(dòng)生成等谤草,將自動(dòng)化開(kāi)發(fā)跟束、執(zhí)行和日常工作融合在一起,使測(cè)試人員輕松工作丑孩,并顯著提高測(cè)試工作效率冀宴。
2) 軟件需求變化頻繁或軟件迭代開(kāi)發(fā)方法不斷推陳出新,這些都給軟件自動(dòng)化測(cè)試帶來(lái)極大的挑戰(zhàn)嚎杨。軟件需求發(fā)生變化花鹅,會(huì)引起一系列的變化氧腰,從設(shè)計(jì)到代碼枫浙,包括軟件的界面、操作邏輯等都發(fā)生了改變古拴,原來(lái)寫(xiě)的自動(dòng)化測(cè)試腳本在軟件的新版本上運(yùn)行不起來(lái)箩帚,會(huì)遇到各種問(wèn)題,必須對(duì)腳本進(jìn)行維護(hù)黄痪。如果腳本維護(hù)的工作量很大紧帕,必然嚴(yán)重地影響軟件自動(dòng)化測(cè)試的投入產(chǎn)出比。例如就測(cè)試自動(dòng)化的腳本來(lái)看桅打,就經(jīng)歷了幾個(gè)典型的發(fā)展階段是嗜,從模塊化驅(qū)動(dòng)測(cè)試、數(shù)據(jù)驅(qū)動(dòng)測(cè)試挺尾,再到關(guān)鍵字驅(qū)動(dòng)測(cè)試鹅搪、基于模型測(cè)試和混合模式測(cè)試等,這其中一個(gè)主要原因也是為了降低腳本維護(hù)的工作量遭铺。
3) 因?yàn)楦鱾€(gè)層次測(cè)試須要共享某些測(cè)試數(shù)據(jù)丽柿,各個(gè)階段的測(cè)試往往要前后銜接起來(lái)恢准,前一階段的測(cè)試輸出有可能成為下一階段的測(cè)試輸入,更重要的是如何更好地支持?jǐn)?shù)據(jù)驅(qū)動(dòng)測(cè)試甫题,從而更充分地覆蓋各種測(cè)試馁筐。人們還希望能將不同測(cè)試的結(jié)果綜合起來(lái),進(jìn)行分析和評(píng)估坠非。
4) 由于軟件規(guī)模越來(lái)越大敏沉,軟件的開(kāi)發(fā)團(tuán)隊(duì)人數(shù)多,可能分布在不同城市炎码、不同地區(qū)甚至不同國(guó)家赦抖,團(tuán)隊(duì)之間需要協(xié)作。而且軟件開(kāi)發(fā)還會(huì)占有較多的硬件資源辅肾,特別是性能測(cè)試队萤、可靠性測(cè)試有時(shí)需要幾百臺(tái)機(jī)器參與測(cè)試。如果不能充分利用這些資源矫钓,可能會(huì)給企業(yè)造成較大的成本浪費(fèi)要尔。但是,如果我們能事先靈活地安排任務(wù)新娜,按照預(yù)定的計(jì)劃運(yùn)行測(cè)試赵辕,就能對(duì)測(cè)試資源進(jìn)行靈活的調(diào)度,在保證各項(xiàng)任務(wù)及時(shí)執(zhí)行的情況下概龄,充分利用資源还惠。
恕我渣渣亂說(shuō)話:個(gè)人認(rèn)為為何要建立自動(dòng)化測(cè)試框架?原因有三:1) 框架移植性好,一個(gè)項(xiàng)目或者同類項(xiàng)目間可以借用私杜。2) 全過(guò)程的自動(dòng)化測(cè)試蚕键,將各個(gè)階段的測(cè)試管理起來(lái),便于做計(jì)劃安排任務(wù)衰粹,便于跟蹤暴露的問(wèn)題锣光,便于需求端到端跟蹤和交付。3) 框架便于維護(hù)铝耻,比如測(cè)試腳本的分層便于更好的維護(hù)誊爹,比如測(cè)試數(shù)據(jù)可以在各個(gè)測(cè)試階段得到復(fù)用。
什么是自動(dòng)化測(cè)試框架
為了全面地滿足自動(dòng)化測(cè)試的需要瓢捉,就要建立合適的自動(dòng)化測(cè)試框架频丘。為了構(gòu)造有效的自動(dòng)化測(cè)試框架,首先要了解自動(dòng)化測(cè)試對(duì)測(cè)試框架構(gòu)建的需求泡态,然后基于這個(gè)需求搂漠,并借鑒軟件開(kāi)發(fā)框架的思想,來(lái)設(shè)計(jì)自動(dòng)化測(cè)試框架兽赁。
一状答、須要解決哪些問(wèn)題
自動(dòng)化測(cè)試框架冷守,最根本的是要構(gòu)造一個(gè)良好的工作空間,使其能夠容納各種類型的測(cè)試工具惊科。這些工具要能夠相互兼容拍摇、共享測(cè)試數(shù)據(jù)。如果能夠即插即用馆截,任何測(cè)試工具都可以動(dòng)態(tài)充活、方便地加入系統(tǒng)或從系統(tǒng)中移除,那就更好蜡娶。
其次混卵,能夠監(jiān)控測(cè)試執(zhí)行的過(guò)程,包括監(jiān)控測(cè)試資源(如CPU窖张、內(nèi)存等)的使用幕随,及時(shí)收集來(lái)自于不同測(cè)試工具的測(cè)試結(jié)果,并將這些結(jié)果進(jìn)行歸類和分析宿接,生成相應(yīng)的測(cè)試報(bào)告赘淮,通過(guò)郵件和網(wǎng)站等發(fā)布出去。
再者睦霎,為了讓測(cè)試能夠在某個(gè)特定時(shí)刻(例如晚上)自動(dòng)執(zhí)行梢卸,自動(dòng)化測(cè)試框架應(yīng)具有事先預(yù)定(schedule)任務(wù)能力,并能夠支持維護(hù)測(cè)試環(huán)境和管理測(cè)試資源副女。包括管理硬件資源列表蛤高、支持測(cè)試狀態(tài)查詢和自動(dòng)分發(fā)測(cè)試任務(wù)到相應(yīng)的測(cè)試機(jī)器上,并在規(guī)定的時(shí)間內(nèi)完成測(cè)試任務(wù)碑幅。
最后戴陡,自動(dòng)化測(cè)試框架還要能支持自動(dòng)化測(cè)試的前期任務(wù),支持測(cè)試腳本的錄制枕赵、編輯和調(diào)試猜欺;支持測(cè)試腳本的快速開(kāi)發(fā)和良好的維護(hù)性位隶,而且能夠支持測(cè)試用例拷窜、測(cè)試套件(Test suite)和其他測(cè)試活動(dòng)的管理。
要構(gòu)建良好的自動(dòng)化測(cè)試框架,還要提供一些基礎(chǔ)設(shè)施支持自動(dòng)化測(cè)試,例如郵件服務(wù)瘸洛、跨平臺(tái)的通信服務(wù)比规、分布式開(kāi)發(fā)和運(yùn)行環(huán)境等,如下圖茅撞。
一個(gè)良好的自動(dòng)化測(cè)試框架具有下列能力:
1) 提供非常有效的測(cè)試工作流程模型,如任務(wù)安排、執(zhí)行酵颁、通知結(jié)果和生成報(bào)告等完整的過(guò)程支持嫉你;
2) 支持多種腳本語(yǔ)言的錄制、編輯躏惋、調(diào)試和回放等集成開(kāi)發(fā)環(huán)境幽污;
3) 完成各類測(cè)試任務(wù)的執(zhí)行;
4) 有良好的擴(kuò)充能力簿姨,如和第三方插件距误、工具的集成;
5) 支持?jǐn)?shù)據(jù)驅(qū)動(dòng)扁位、關(guān)鍵字驅(qū)動(dòng)等腳本模式准潭;
6) 支持分布式處理、遠(yuǎn)程調(diào)用等不同的運(yùn)行方式域仇;
7) 獲取測(cè)試覆蓋率刑然。
如果進(jìn)行進(jìn)一步抽象,自動(dòng)化測(cè)試框架可以理解為就是為了解決自動(dòng)化測(cè)試中的公共問(wèn)題而搭建的暇务,這些問(wèn)題包括公用的對(duì)象闰集、方法、環(huán)境或數(shù)據(jù)般卑,這些可以看作自動(dòng)化測(cè)試框架的要素武鲁。
1) 公用的對(duì)象。不同的測(cè)試用例會(huì)有一些相同的對(duì)象(如窗口蝠检、按鈕沐鼠、菜單等)被重復(fù)使用,而這些公用的對(duì)象可以被抽取出來(lái)叹谁,在編寫(xiě)腳本時(shí)隨時(shí)調(diào)用饲梭。如果需求發(fā)生變化,只要修改這些公用對(duì)象屬性即可焰檩,而不須修改太多的測(cè)試腳本憔涉。這就要求我們構(gòu)建對(duì)象庫(kù),并建立實(shí)體對(duì)象和邏輯對(duì)象之間的映射析苫。
2) 公用的方法兜叨。公用的方法比較多,相當(dāng)于腳本的基礎(chǔ)函數(shù)衩侥,可以構(gòu)成基礎(chǔ)函數(shù)庫(kù)国旷,供上層腳本調(diào)用。
3) 公用的環(huán)境或數(shù)據(jù)茫死。許多測(cè)試用例會(huì)在相同的測(cè)試環(huán)境上運(yùn)行或使用相同的測(cè)試數(shù)據(jù)跪但,可將不同的測(cè)試環(huán)境或數(shù)據(jù)封裝起來(lái),和測(cè)試用例進(jìn)行靈活的組合峦萎,增強(qiáng)腳本執(zhí)行的靈活性屡久,并覆蓋更廣的測(cè)試范圍忆首,降低測(cè)試風(fēng)險(xiǎn)。
二被环、軟件開(kāi)發(fā)框架的啟發(fā)
框架(Framework)是為開(kāi)發(fā)者定制的應(yīng)用骨架或應(yīng)用的體系結(jié)構(gòu)雄卷,著重從系統(tǒng)的可重用性進(jìn)行設(shè)計(jì),確定系統(tǒng)各個(gè)部分的作用蛤售、分工及其依賴關(guān)系丁鹉、上下文(Context)關(guān)系或控制流程。應(yīng)用框架更注重于面向?qū)I(yè)領(lǐng)域的軟件重用悴能,提供這一應(yīng)用領(lǐng)域所需要的基礎(chǔ)服務(wù)揣钦,以縮短大型應(yīng)用軟件系統(tǒng)的開(kāi)發(fā)周期,提高開(kāi)發(fā)質(zhì)量漠酿。應(yīng)用框架還強(qiáng)調(diào)系統(tǒng)的可擴(kuò)充性冯凹,使系統(tǒng)具有很好的適應(yīng)性,很容易將一些功能強(qiáng)大的第三方組件集成到系統(tǒng)中來(lái)炒嘲,共享基礎(chǔ)設(shè)施和基礎(chǔ)服務(wù)宇姚。
Java軟件開(kāi)發(fā)中有很多框架,例如Struts夫凸、Spring和Hibernate等都遵循模型-視圖-控制(MVC)設(shè)計(jì)模式浑劳,將商業(yè)邏輯和描述分開(kāi),由一個(gè)邏輯流控制器來(lái)協(xié)調(diào)來(lái)自客戶端的請(qǐng)求和服務(wù)器所提供的各種服務(wù)夭拌。這些框架提供了實(shí)現(xiàn)不同功能的技術(shù)和應(yīng)用接口魔熏,而具體的實(shí)現(xiàn)則由開(kāi)發(fā)人員來(lái)完成,一些特定的參數(shù)鸽扁、表現(xiàn)可以通過(guò)XML配制文件蒜绽、java屬性文件等輔助完成。Struts采用了Servlet桶现、JSP和自定義的標(biāo)記庫(kù)等技術(shù)躲雅,構(gòu)造了一個(gè)簡(jiǎn)單的、清晰MVC框架骡和,從而極大地加快了開(kāi)發(fā)的速度相赁,并能適應(yīng)需求的變化,改善軟件系統(tǒng)的可維護(hù)性即横。
軟件自動(dòng)化測(cè)試框架噪生,雖然不完全相同于軟件開(kāi)發(fā)框架,但也有很大的相似性东囚。因?yàn)樽詣?dòng)化測(cè)試也包含了大量的(腳本)開(kāi)發(fā)工作,包括腳本調(diào)試和版本控制管理等战授。自動(dòng)化測(cè)試也應(yīng)該將業(yè)務(wù)邏輯和具體操作分開(kāi)页藻,從而形成關(guān)鍵字驅(qū)動(dòng)腳本技術(shù)桨嫁。在構(gòu)造自動(dòng)化測(cè)試框架時(shí)候,底層需要一個(gè)良好的通信機(jī)制份帐,使各個(gè)組件之間實(shí)現(xiàn)消息傳遞璃吧,并提供標(biāo)準(zhǔn)的接口,從而使自動(dòng)化框架具有良好的兼容性废境,容易將第三方工具集成進(jìn)來(lái)畜挨。
對(duì)不同的應(yīng)用領(lǐng)域或不同的測(cè)試水平,自動(dòng)化測(cè)試的框架有不同的構(gòu)成噩凹,但我們必須清楚如何滿足自動(dòng)化測(cè)試的基本要求巴元,了解自動(dòng)化測(cè)試框架的基本構(gòu)成,從而在此基礎(chǔ)上驮宴,根據(jù)自己組織的實(shí)際情況進(jìn)行擴(kuò)充逮刨,構(gòu)造適應(yīng)性更強(qiáng)、效率更高堵泽、功能更強(qiáng)的自動(dòng)化測(cè)試框架修己。
為了能開(kāi)展自動(dòng)化測(cè)試的工作,首先需要基礎(chǔ)設(shè)施(infrastructure)來(lái)支撐測(cè)試工具的運(yùn)行迎罗,包括網(wǎng)絡(luò)睬愤、郵件服務(wù)器、FTP服務(wù)器等纹安。其次是執(zhí)行自動(dòng)化測(cè)試戴涝,形成一套機(jī)制來(lái)保證測(cè)試腳本的執(zhí)行。具體地說(shuō)就是钻蔑,先建立測(cè)試環(huán)境啥刻,創(chuàng)建和執(zhí)行測(cè)試套件,然后獲取執(zhí)行狀態(tài)并給出測(cè)試結(jié)果報(bào)告咪笑。根據(jù)這個(gè)分析可帽,描述一個(gè)自動(dòng)化測(cè)試框架的雛形。
這個(gè)雛形給出了自動(dòng)化測(cè)試框架的基本構(gòu)成要素窗怒,包括執(zhí)行器映跟、腳本管理器、報(bào)告生成器等扬虚,也較清楚地描述了這些要素之間的關(guān)系努隙。但該框架并沒(méi)給出其他一些必要信息:
1) 測(cè)試腳本的層次性,如何分離業(yè)務(wù)邏輯和系統(tǒng)基本操作辜昵?
2) 自動(dòng)化測(cè)試工具的接口荸镊。
3) 被測(cè)試系統(tǒng)的對(duì)象映射。
4) 如何事先安排測(cè)試任務(wù)?
5) 如何管理有效測(cè)試資源躬存?
如果要在測(cè)試腳本上分離業(yè)務(wù)邏輯和系統(tǒng)基本操作张惹,必須將各種基本操作封裝為特定的關(guān)鍵字,每個(gè)關(guān)鍵字對(duì)應(yīng)一個(gè)函數(shù)岭洲,而業(yè)務(wù)邏輯可以由關(guān)鍵字加參數(shù)來(lái)描述宛逗,如下圖。
事先安排完任務(wù)盾剩,還須要開(kāi)發(fā)具有相應(yīng)觸發(fā)機(jī)制的引擎(engine/ cron job)來(lái)執(zhí)行測(cè)試任務(wù)雷激。它負(fù)責(zé)完成自動(dòng)部署軟件包、向各臺(tái)遠(yuǎn)程測(cè)試機(jī)器分發(fā)腳本并啟動(dòng)測(cè)試工具等工作告私。
幾個(gè)典型的自動(dòng)化測(cè)試框架
1. JUnit單元測(cè)試
JUnit是一個(gè)單元測(cè)試工具屎暇,同時(shí)它也具有一個(gè)自動(dòng)化測(cè)試框架的許多特征,它提供一個(gè)單元測(cè)試的基本思想德挣,或者說(shuō)解決方案恭垦。JUnit作為優(yōu)秀的單元測(cè)試框架,被廣泛借鑒和采納格嗅,產(chǎn)生了許多類似的單元測(cè)試框架番挺,如PhpUnit、HTMLUnit等屯掖。
2. Selenium 功能測(cè)試web
自動(dòng)化測(cè)試框架首先要提供腳本開(kāi)發(fā)的集成環(huán)境(IDE)玄柏。這和一般程序開(kāi)發(fā)環(huán)境沒(méi)什么不同,提供編寫(xiě)代碼贴铜、調(diào)試粪摘、代碼管理、編譯绍坝、預(yù)運(yùn)行等一系列功能徘意,包括一個(gè)編輯器、調(diào)試器轩褐、瀏覽器等組件椎咧。但是,自動(dòng)化測(cè)試腳本開(kāi)發(fā)所不同的是:
1) 能針對(duì)被測(cè)試的應(yīng)用系統(tǒng)來(lái)運(yùn)行和調(diào)試腳本把介;
2) 能夠錄制手工測(cè)試或操作的行為和過(guò)程勤讽;
3) 支持?jǐn)?shù)據(jù)驅(qū)動(dòng)腳本、關(guān)鍵字驅(qū)動(dòng)腳本的特殊需要拗踢。
Selenium有一個(gè)IDE脚牍,可以錄制對(duì)Web頁(yè)面操作的過(guò)程,自動(dòng)生成線性的腳本巢墅。Selenium IDE還可以對(duì)腳本進(jìn)行編輯诸狭,包括插入新命令行或注釋行券膀、設(shè)置斷點(diǎn)或起始位置、單步調(diào)試等作谚,而且提供測(cè)試用例(test case)和測(cè)試套件(test suite)創(chuàng)建三娩、關(guān)鍵字提示等功能庵芭。
解決了IDE還不夠妹懒,測(cè)試用例和套件的管理、測(cè)試結(jié)果分析和顯示等都是自動(dòng)化測(cè)試框架的重要組成部分双吆。Selenium也提供了一個(gè)運(yùn)行的環(huán)境(TestRunner)眨唬,分為4個(gè)區(qū)域:測(cè)試套件(Test suite)、當(dāng)前被執(zhí)行的測(cè)試(Current Test)好乐、執(zhí)行操作區(qū)域(Control Panel匾竿,控制面板)和瀏覽器實(shí)際運(yùn)行動(dòng)態(tài)顯示區(qū)域。
執(zhí)行整個(gè)測(cè)試套件或當(dāng)前的測(cè)試用例蔚万,單步執(zhí)行測(cè)試用例岭妖。運(yùn)行后,就可以獲得測(cè)試結(jié)果:顯示運(yùn)行的一個(gè)測(cè)試失敗反璃,其中3個(gè)驗(yàn)證點(diǎn)通過(guò)昵慌、1個(gè)驗(yàn)證點(diǎn)沒(méi)通過(guò)和1個(gè)驗(yàn)證點(diǎn)沒(méi)執(zhí)行完。
從上面的介紹可以看出淮蜈,一個(gè)基本的自動(dòng)化測(cè)試框架包括了下列功能:
1) 測(cè)試腳本開(kāi)發(fā)集成環(huán)境(IDE)斋攀,包括腳本編輯、調(diào)試等梧田;
2) 測(cè)試用例和測(cè)試套件的創(chuàng)建和管理淳蔼;
3) 測(cè)試執(zhí)行環(huán)境,包括執(zhí)行狀態(tài)監(jiān)控和測(cè)試結(jié)果的顯示等裁眯。
受到同源策略(Same Origin Policy)的影響鹉梨,使得JavaScript腳本只允許閱讀/修改來(lái)自相同源頭的HTML,不能測(cè)試跨站點(diǎn)的頁(yè)面穿稳,受限于基礎(chǔ)站點(diǎn)(BaseURL)的頁(yè)面存皂。要解決這樣的問(wèn)題,可以設(shè)定代理服務(wù)器司草,通過(guò)代理服務(wù)器欺騙瀏覽器艰垂,使JavaScript看似來(lái)自相同的遠(yuǎn)程服務(wù)器,從而符合同源策略埋虹。這樣就有了Selenium RC猜憎。
Selenium RC不僅可以解除同源策略的限制,而且可以支持Java搔课、C#胰柑、Perl、PHP、Python柬讨、Ruby等語(yǔ)言編寫(xiě)的腳本崩瓤,以適應(yīng)不同用戶的習(xí)慣和需求。Selenium RC具有更強(qiáng)的擴(kuò)充能力和處理能力踩官,它將自己的測(cè)試整合到一個(gè)持續(xù)集成的工具中却桶,可以和Java或.Net的相應(yīng)工具進(jìn)行集成,如Ant蔗牡、Maven等颖系。
目前許多應(yīng)用軟件系統(tǒng)是分布式的,服務(wù)器之間或客戶端之間須要相互協(xié)作辩越,因此嘁扼,要求測(cè)試腳本能處理這種協(xié)同關(guān)系。運(yùn)行測(cè)試腳本的機(jī)器之間具有相互依賴性黔攒,如某臺(tái)機(jī)器運(yùn)行到某一步趁啸,須要等待另一臺(tái)機(jī)器運(yùn)行完一段腳本后,再繼續(xù)向下執(zhí)行腳本督惰,這時(shí)要求測(cè)試工具之間可以相互通信不傅。測(cè)試框架要支持一種分布式的通信機(jī)制,確保參與測(cè)試的客戶端可以協(xié)同工作姑丑。為此蛤签, Selenium推出了服務(wù)于這一目的的Selenim Grid。
Selenium Grid能充分利用測(cè)試環(huán)境中的機(jī)器栅哀,允許并行地在不同的環(huán)境上運(yùn)行多個(gè)測(cè)試任務(wù)(即Selenium RC的實(shí)例)震肮,而且可以在一臺(tái)機(jī)器上控制它們,而不要關(guān)心實(shí)際的物理環(huán)境留拾。這樣戳晌,Selenium Grid可以大大節(jié)省測(cè)試執(zhí)行的時(shí)間,極大地加快Web應(yīng)用功能的測(cè)試痴柔。
集成測(cè)試框架Fit
集成測(cè)試框架(Framework for Integrated Tests沦偎,F(xiàn)IT)是由Ward Cunningham (http://en.wikipedia.org/wiki/Ward_Cunningham)開(kāi)發(fā)的、開(kāi)放的通用框架咳蔚,可以幫助需求定義人員與開(kāi)發(fā)人員進(jìn)行溝通豪嚎,以實(shí)現(xiàn)自動(dòng)化驗(yàn)收測(cè)試,進(jìn)而保證完成足夠的回歸測(cè)試谈火。FIT在自動(dòng)化測(cè)試框架思想上侈询,給我們的最大啟示是如何將業(yè)務(wù)流程和計(jì)算機(jī)操作(測(cè)試動(dòng)作)分離,以及如何用最簡(jiǎn)單的語(yǔ)言來(lái)描述需求和測(cè)試用例糯耍。FIT通過(guò)一張表格式的需求描述扔字,很好地體現(xiàn)了關(guān)鍵字驅(qū)動(dòng)腳本和數(shù)據(jù)驅(qū)動(dòng)腳本的完美結(jié)合囊嘉。
FIT需求記錄格式采用HTML表格和文檔,而不是Java或C#代碼革为,將需求通過(guò)表格模型來(lái)表示扭粱,充當(dāng)測(cè)試所需的數(shù)據(jù)模型,以描述實(shí)際的數(shù)據(jù)輸入和測(cè)試的預(yù)期輸出震檩。FIT的設(shè)計(jì)目的就是讓用戶或業(yè)務(wù)團(tuán)隊(duì)在開(kāi)發(fā)周期中琢蛤,盡早地與開(kāi)發(fā)人員協(xié)作。創(chuàng)建應(yīng)用程序需求的簡(jiǎn)單表格式模型恳蹲,可以讓每個(gè)人清楚地看出代碼和需求是否是一致的虐块。使用FIT俩滥,可以編寫(xiě)出自動(dòng)運(yùn)行的驗(yàn)收測(cè)試用例嘉蕾,以確認(rèn)所開(kāi)發(fā)的軟件是否滿足了用戶的需求,可以作為持續(xù)構(gòu)建過(guò)程的一部分來(lái)確保所構(gòu)建出來(lái)的版本是正確的霜旧。
Fixture就是基于FIT的測(cè)試错忱。它把HTML表格或Wiki頁(yè)面格式的驗(yàn)收測(cè)試和應(yīng)用程序的實(shí)際代碼聯(lián)系起來(lái),測(cè)試那些代碼并顯示結(jié)果挂据。要?jiǎng)?chuàng)建一個(gè)Fixture類型以清,必須擴(kuò)展對(duì)應(yīng)的FIT Fixture,將它映射到對(duì)應(yīng)的表崎逃,不同類型的表映射到不同的業(yè)務(wù)場(chǎng)景掷倔。簡(jiǎn)單來(lái)講,F(xiàn)IT能夠讀取HTML文件中的表格个绍。針對(duì)每個(gè)表格勒葱,FIT通過(guò)Fixture來(lái)解釋,即該Fixture會(huì)驅(qū)動(dòng)“被測(cè)系統(tǒng)”來(lái)對(duì)表格中給出的測(cè)試用例進(jìn)行檢驗(yàn)巴柿。
Fixture充當(dāng)Fit表格和要測(cè)試系統(tǒng)間的媒介凛虽,起協(xié)調(diào)作用,完成表格中給出的測(cè)試广恢。下表包含了操作關(guān)鍵字和輸入數(shù)據(jù)凯旋,是 “數(shù)據(jù)驅(qū)動(dòng)腳本”和“關(guān)鍵字驅(qū)動(dòng)腳本”完美結(jié)合的典型實(shí)例。
自動(dòng)化測(cè)試框架SAFS/STAF/STAX
這個(gè)分布式自動(dòng)化測(cè)試框架支持遠(yuǎn)程調(diào)用钉迷、支持跨平臺(tái)和多語(yǔ)言的自動(dòng)化測(cè)試至非,由3部分組成:SAFS、STAF和STAX糠聪。
SAFS(Software Automation Framework? Support荒椭,http://safsdev.sourceforge.net/Default.htm)是基于數(shù)據(jù)驅(qū)動(dòng)和關(guān)鍵字驅(qū)動(dòng)的思想設(shè)計(jì)的開(kāi)源自動(dòng)化測(cè)試框架, 支持跨平臺(tái)枷颊、多語(yǔ)言的應(yīng)用戳杀。
STAF(Software Test Automation? Framework该面,http://staf.sourceforge.net/index.php)圍繞組件重用的理念,通過(guò)服務(wù)調(diào)用(如遠(yuǎn)程處理信卡、資源管理隔缀、監(jiān)控等)來(lái)完成自動(dòng)化架構(gòu)的構(gòu)造。STAF作為自動(dòng)化測(cè)試框架傍菇,提供一種可插拔的機(jī)制猾瘸,支持多平臺(tái)與多語(yǔ)言的分布式結(jié)構(gòu)。
STAX(STAF eXecution engine丢习,http://staf.sourceforge.net/getstax.php)是基于STAF的執(zhí)行引擎牵触,它采用XML格式描述。在XML文件中可定義測(cè)試工作流咐低,可以實(shí)現(xiàn)并行執(zhí)行揽思、嵌套測(cè)試用例、控制運(yùn)行時(shí)間等见擦,STAX支持Java和Python模塊钉汗。
1. SAFS
SAFS框架由測(cè)試表、核心數(shù)據(jù)驅(qū)動(dòng)引擎鲤屡、成員函數(shù)庫(kù)损痰、支持庫(kù)、應(yīng)用映射表組成酒来。
1) 測(cè)試表(Test Tables):保存測(cè)試數(shù)據(jù)和關(guān)鍵字卢未,分為高層測(cè)試表(CycleTables)、中層測(cè)試表(Suite Tables)和低層測(cè)試表(Application Map堰汉,特定的應(yīng)用程序元素)辽社,下層的測(cè)試表可被上層的測(cè)試表所調(diào)用。
2) 核心數(shù)據(jù)驅(qū)動(dòng)引擎(Core Data Driven? Engine):與測(cè)試表對(duì)應(yīng)衡奥,分為高層驅(qū)動(dòng)器(也叫循環(huán)驅(qū)動(dòng)器)爹袁、中層驅(qū)動(dòng)器(也叫組裝驅(qū)動(dòng)器)和低層驅(qū)動(dòng)器(也叫步驟驅(qū)動(dòng)器)。上層的驅(qū)動(dòng)器讀取相應(yīng)測(cè)試表的關(guān)鍵字矮固,并逐級(jí)傳遞給下層的驅(qū)動(dòng)器失息,最后由低層驅(qū)動(dòng)器調(diào)用關(guān)鍵字庫(kù)中的指令對(duì)應(yīng)的組件函數(shù)來(lái)執(zhí)行。
3) 組件函數(shù)庫(kù)(Component Function):實(shí)現(xiàn)了用戶對(duì)界面對(duì)象的各種操作指令档址,它在被測(cè)應(yīng)用和自動(dòng)化工具之間提供了一個(gè)隔離層盹兢。
4) 支持庫(kù)(Support Libraries):通用的程序和工具庫(kù),提供諸如數(shù)據(jù)庫(kù)訪問(wèn)守伸、字符串操作绎秒、文件訪問(wèn)、日志記錄等基礎(chǔ)性的支持功能尼摹。
5)? 應(yīng)用映射表(Application Map):對(duì)應(yīng)用中的對(duì)象定義一套命名規(guī)范见芹,將這些實(shí)際對(duì)象的名字和自動(dòng)化工具識(shí)別的對(duì)象名聯(lián)系起來(lái)剂娄,形成映射表,從而使應(yīng)用對(duì)象元素和測(cè)試對(duì)象名分離玄呛,提高了腳本的可維護(hù)性阅懦。
2. STAF
STAF比較適應(yīng)構(gòu)造復(fù)雜的、分布式的測(cè)試環(huán)境徘铝。通過(guò)STAF將測(cè)試任務(wù)分發(fā)到不同的測(cè)試環(huán)境去執(zhí)行耳胎,在大量不同的測(cè)試機(jī)上執(zhí)行相應(yīng)的測(cè)試腳本,并可以方便地收集測(cè)試結(jié)果惕它。借助執(zhí)行引擎STAX怕午,測(cè)試人員只須要配置XML文件便可實(shí)現(xiàn)STAF任務(wù)管理,使STAF的應(yīng)用變得更為簡(jiǎn)便淹魄。
使用STAF可快速構(gòu)造自動(dòng)化測(cè)試環(huán)境郁惜,STAF的服務(wù)調(diào)用系統(tǒng)也使大家創(chuàng)建自動(dòng)測(cè)試用例、管理測(cè)試用例更加方便揭北。STAF在功能級(jí)別實(shí)施服務(wù)調(diào)用扳炬,各個(gè)服務(wù)端點(diǎn)(稱作STAF客戶端)是對(duì)等的,從一個(gè)端點(diǎn)可直接調(diào)用另一端點(diǎn)提供的服務(wù)搔体,如圖所示。
1) 將環(huán)境需求最小化(包括硬件與軟件)半醉;
2)? 支持各種腳本語(yǔ)言的應(yīng)用疚俱,包括Java、python缩多、Perl及命令行shell環(huán)境等呆奕;
3) 易于擴(kuò)展,用戶根據(jù)需要可隨時(shí)創(chuàng)建一個(gè)服務(wù)插入到STAF體系中衬吆。
STAF是一個(gè)小巧的后臺(tái)程序梁钾,并基于服務(wù)(Services)來(lái)構(gòu)建自動(dòng)化框架,在STAF中使用的所有組件都是服務(wù)逊抡。STAF服務(wù)就是一系列功能的集合姆泻,作為可重用組件而分布在不同的遠(yuǎn)程機(jī)器上。STAF還提供輕量級(jí)分發(fā)機(jī)制冒嫡,負(fù)責(zé)將請(qǐng)求轉(zhuǎn)發(fā)給這些服務(wù)拇勃。
STAF服務(wù)分為內(nèi)部(Internal)服務(wù)和外部(External)服務(wù)。內(nèi)部服務(wù)被集成進(jìn)STAFProc孝凌,提供一些關(guān)鍵性的功能方咆。
3. STAX
STAX是構(gòu)建于STAF之上的調(diào)度引擎,它可以控制STAF執(zhí)行各種命令蟀架。我們可以將大量須要執(zhí)行的STAF命令寫(xiě)成STAX腳本瓣赂,STAX運(yùn)行時(shí)會(huì)自動(dòng)解析腳本并控制STAF執(zhí)行這些命令榆骚。STAX腳本相當(dāng)于STAF命令的批處理文件。STAX腳本使用XML格式描述煌集,比較容易編寫(xiě)寨躁。STAX可以控制運(yùn)行時(shí)間、嵌套測(cè)試用例牙勘,還支持并行測(cè)試职恳。
理想的自動(dòng)化測(cè)試框架
自動(dòng)化測(cè)試框架應(yīng)支持腳本錄制、腳本開(kāi)發(fā)方面、測(cè)試用例和測(cè)試套件的創(chuàng)建和執(zhí)行放钦、遠(yuǎn)程控制、分布式通信等功能恭金。這樣可以基本滿足測(cè)試自動(dòng)化的需要操禀,但理想情況下,自動(dòng)化測(cè)試框架還須要支持單元測(cè)試并與開(kāi)發(fā)環(huán)境集成横腿,如將開(kāi)發(fā)IDE Eclipse颓屑、軟件配置管理工具CVS/Subversion和軟件包構(gòu)建工具Ant/Maven等集成到框架中,以支持每日構(gòu)建和自動(dòng)驗(yàn)證測(cè)試耿焊。
如果自動(dòng)化測(cè)試框架能管理測(cè)試項(xiàng)目揪惦、安排任務(wù),將產(chǎn)品用戶需求和測(cè)試需求很好地結(jié)合起來(lái)罗侯,那么測(cè)試目標(biāo)更明確器腋,測(cè)試的效率會(huì)得到進(jìn)一步提高。測(cè)試結(jié)果的分析也是很重要的钩杰,一般也要求在自動(dòng)化測(cè)試框架中得到解決纫塌。最重要的是容易使用,將各個(gè)工具集成起來(lái)讲弄,并能很好地使用這些工具措左。例如,openqa.org社區(qū)提供了一個(gè)工具——Bromine避除,它集成了Selenium Core/RC怎披,可非常容易地跟蹤和管理測(cè)試項(xiàng)目、需求驹饺、測(cè)試計(jì)劃钳枕、測(cè)試用例和缺陷,可以提交缺陷和將缺陷分派給相應(yīng)的開(kāi)發(fā)人員赏壹,瀏覽和分析測(cè)試結(jié)果鱼炒。
一個(gè)理想的自動(dòng)化測(cè)試框架能解決上述問(wèn)題,提供一個(gè)分布式的通信平臺(tái)蝌借、友好的人機(jī)交互界面和開(kāi)放式架構(gòu)昔瞧,將自動(dòng)化測(cè)試中所需要的各個(gè)關(guān)鍵部分有機(jī)地集成起來(lái)指蚁,形成一個(gè)為自動(dòng)化測(cè)試服務(wù)的、完整的自晰、層次清楚的開(kāi)發(fā)平臺(tái)和運(yùn)行環(huán)境凝化。
1) 綜合管理平臺(tái),可以將自動(dòng)化測(cè)試中所有的工作內(nèi)容管理起來(lái)酬荞,相當(dāng)于一個(gè)統(tǒng)一的入口(Portal)搓劫,可以瀏覽每部分的內(nèi)容。
2) 基于業(yè)務(wù)驅(qū)動(dòng)的腳本集成開(kāi)發(fā)環(huán)境混巧,這樣比較容易構(gòu)造關(guān)鍵字驅(qū)動(dòng)的腳本枪向,為此要建立軟件系統(tǒng)的對(duì)象庫(kù),并將這些對(duì)象映射為腳本中的邏輯對(duì)象咧党,以減少軟件需求變化對(duì)腳本的影響秘蛔。這個(gè)集成開(kāi)發(fā)環(huán)境還包括腳本錄制、編輯等功能傍衡,并能和CVS深员、Ant等工具集成。其中庫(kù)函數(shù)可以看作是關(guān)鍵字列表和關(guān)鍵字實(shí)現(xiàn)蛙埂,而對(duì)象映射可以看作是對(duì)象庫(kù)和映射關(guān)系構(gòu)成的倦畅。
3) 安排(schedule)測(cè)試任務(wù),使任務(wù)可以定時(shí)啟動(dòng)箱残,自動(dòng)執(zhí)行測(cè)試任務(wù)滔迈。
4)? 在測(cè)試過(guò)程中,能夠監(jiān)控測(cè)試資源被辑,并及時(shí)發(fā)現(xiàn)問(wèn)題,發(fā)出警告敬惦,并保留(記錄)相關(guān)數(shù)據(jù)盼理。
5)? 控制中心(控制器),驅(qū)動(dòng)測(cè)試工具俄删,可以調(diào)用測(cè)試任務(wù)宏怔,并能將測(cè)試任務(wù)、測(cè)試腳本等分發(fā)給遠(yuǎn)程機(jī)器畴椰。
6) 遠(yuǎn)程機(jī)器執(zhí)行測(cè)試任務(wù)臊诊,通過(guò)代理實(shí)現(xiàn),而代理由控制中心來(lái)控制斜脂。
本文來(lái)自朱少民老師的《輕輕松松自動(dòng)化測(cè)試》抓艳,如有侵權(quán),請(qǐng)通知后刪除