專利名稱:一種持續(xù)集成失敗用例的定位方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本申請涉及測試技術(shù),特別是涉及一種持續(xù)集成失敗用例的定位方法,以及,一種持續(xù)集成失敗用例的定位系統(tǒng)。
背景技術(shù):
持續(xù)集成是一種軟件開發(fā)的實(shí)踐方式,利用自動(dòng)化的方式對(duì)團(tuán)隊(duì)開發(fā)人員提交的新增與修改的代碼進(jìn)行持續(xù)構(gòu)建(包括編譯、發(fā)布、自動(dòng)化測試),至少每天一次,盡早地發(fā)現(xiàn)代碼問題,從而保證產(chǎn)品質(zhì)量。一個(gè)典型的持續(xù)集成周期包括以下幾個(gè)步驟I)持續(xù)集成服務(wù)器不斷從版本控制服務(wù)器上檢查代碼狀態(tài),看代碼是否有更新;2)如果發(fā)現(xiàn)代碼有最新的提交,那么就從版本控制服務(wù)器下載最新的代碼;3)等代碼完全更新以后,調(diào)用自動(dòng)化編譯腳本,進(jìn)行代碼編譯;4)運(yùn)行所有的自動(dòng)化測試;5)進(jìn)行代碼分析;6)產(chǎn)生可執(zhí)行的軟件,并提供給測試人員進(jìn)行測試。如果其中任何一個(gè)步驟失敗,就表示該構(gòu)建失敗,持續(xù)集成服務(wù)器會(huì)給予相應(yīng)的反饋。在對(duì)項(xiàng)目工程進(jìn)行持續(xù)集成時(shí),如果開發(fā)人員修改工程中的部分代碼或者修改配置文件,都將導(dǎo)致測試腳本失敗,從而導(dǎo)致持續(xù)集成不能正常進(jìn)行,嚴(yán)重影響持續(xù)集成對(duì)產(chǎn)品開發(fā)的效率與質(zhì)量。此時(shí),就必須快速定位問題原因,并解決問題使持續(xù)集成正常運(yùn)轉(zhuǎn)。目前定位問題原因的手段比較繁瑣低效,主要是人為地通過Eclipse工具(Eclipse是著名的跨平臺(tái)的自由集成開發(fā)環(huán)境(IDE)) —步一步調(diào)試代碼來分析出程序代碼問題,或者人為地通過SVN(Subversion,一種版本管理工具,通過對(duì)源代碼進(jìn)行版本控制,從而達(dá)到保證文件同步的目的)的客戶端工具Show log查看最近代碼更新,以及對(duì)比出程序代碼的變更情況。目前的這兩種方案都是由人為手工來分析定位問題,此時(shí)會(huì)涉及到技術(shù)經(jīng)驗(yàn)、維護(hù)成本等問題,當(dāng)技術(shù)經(jīng)驗(yàn)不足時(shí)很有可能發(fā)現(xiàn)不到問題所在,而且當(dāng)腳本成百上千時(shí)維護(hù)起來非常困難,所以人為來定位需要消耗大量的時(shí)間與精力,影響工作效率。
發(fā)明內(nèi)容
本申請的目的在于,提供一種持續(xù)集成失敗用例的定位方法及系統(tǒng),以解決目前手動(dòng)定位效率低的問題。為了解決上述問題,本申請公開了一種持續(xù)集成失敗用例的定位方法,包括加載工程代碼時(shí),在工程代碼中注入日志輸出字節(jié)碼;當(dāng)運(yùn)行包含所述工程代碼的測試腳本時(shí),進(jìn)入測試腳本的每個(gè)方法前通過所述日志輸出字節(jié)碼記錄方法調(diào)用日志,并根據(jù)方法調(diào)用日志形成方法調(diào)用層次的日志文件;
根據(jù)所述日志文件中的方法調(diào)用層次分析運(yùn)行失敗的測試腳本,定位運(yùn)行失敗的原因。優(yōu)選的,所述根據(jù)所述日志文件中的方法調(diào)用層次分析運(yùn)行失敗的測試腳本,定位運(yùn)行失敗的原因,包括根據(jù)所述日志文件中的方法調(diào)用層次,對(duì)比方法的當(dāng)前版本與最近一次運(yùn)行成功版本的代碼;將對(duì)比發(fā)現(xiàn)的變化點(diǎn)進(jìn)行標(biāo)記,并將標(biāo)記的變化點(diǎn)定位為運(yùn)行失敗的原因。優(yōu)選的,若對(duì)比發(fā)現(xiàn)無變化,還包括提示運(yùn)行失敗的可能原因,所述可能原因包括數(shù)據(jù)庫變更和/或配置變更。優(yōu)選的,當(dāng)點(diǎn)擊某個(gè)運(yùn)行失敗的測試腳本的鏈接時(shí),根據(jù)所述日志文件中的方法調(diào)用層次分析該被點(diǎn)擊的運(yùn)行失敗的測試腳本,定位運(yùn)行失敗的原因。優(yōu)選的,根據(jù)所述日志文件中的方法調(diào)用層次分析所有運(yùn)行失敗的測試腳本,定位所有運(yùn)行失敗的原因之后,還包括當(dāng)點(diǎn)擊某個(gè)運(yùn)行失敗的測試腳本的鏈接時(shí),從中獲取對(duì)應(yīng)的運(yùn)行失敗的原因。本申請還提供了一種持續(xù)集成失敗用例的定位系統(tǒng),包括字節(jié)碼注入單元,用于加載工程代碼時(shí),在工程代碼中注入日志輸出字節(jié)碼;方法調(diào)用層次分析單元,用于當(dāng)運(yùn)行包含所述工程代碼的測試腳本時(shí),進(jìn)入測試腳本的每個(gè)方法前通過所述日志輸出字節(jié)碼記錄方法調(diào)用日志,并根據(jù)方法調(diào)用日志形成方法調(diào)用層次的日志文件;失敗定位單元,用于根據(jù)所述日志文件中的方法調(diào)用層次分析運(yùn)行失敗的測試腳本,定位運(yùn)行失敗的原因。優(yōu)選的,所述失敗定位單元包括對(duì)比子單元,用于根據(jù)所述日志文件中的方法調(diào)用層次,對(duì)比方法的當(dāng)前版本與最近一次運(yùn)行成功版本的代碼;標(biāo)記子單元,用于將對(duì)比發(fā)現(xiàn)的變化點(diǎn)進(jìn)行標(biāo)記,并將標(biāo)記的變化點(diǎn)定位為運(yùn)行失敗的原因。優(yōu)選的,若對(duì)比發(fā)現(xiàn)無變化,所述失敗定位單元還包括提示子單元,用于提示運(yùn)行失敗的可能原因,所述可能原因包括數(shù)據(jù)庫變更和/或配置變更。優(yōu)選的,所述系統(tǒng)還包括第一點(diǎn)擊查看單元,用于當(dāng)點(diǎn)擊某個(gè)運(yùn)行失敗的測試腳本的鏈接時(shí)觸發(fā)所述失敗定位單元,所述失敗定位單元根據(jù)所述日志文件中的方法調(diào)用層次分析該被點(diǎn)擊的運(yùn)行失敗的測試腳本,定位運(yùn)行失敗的原因。優(yōu)選的,所述失敗定位單元根據(jù)所述日志文件中的方法調(diào)用層次分析所有運(yùn)行失敗的測試腳本,定位所有運(yùn)行失敗的原因;所述系統(tǒng)還包括第二點(diǎn)擊查看單元,用于當(dāng)點(diǎn)擊某個(gè)運(yùn)行失敗的測試腳本的鏈接時(shí),從所述失敗定位單元中獲取對(duì)應(yīng)的運(yùn)行失敗的原因。與現(xiàn)有技術(shù)相比,本申請包括以下優(yōu)點(diǎn)首先,本申請?jiān)诔掷m(xù)集成過程中,通過加載工程代碼時(shí)在工程代碼中注入日志輸出字節(jié)碼,利用所述日志輸出字節(jié)碼分析出測試腳本中的方法調(diào)用層次,然后根據(jù)方法調(diào)用層次分析運(yùn)行失敗的測試腳本,最終自動(dòng)定位出運(yùn)行失敗的代碼點(diǎn)。這種自動(dòng)定位失敗用例的方法無需人工調(diào)試代碼,因此可以方便、快速地自動(dòng)定位到問題原因,解決問題,而且方便維護(hù),節(jié)省大量時(shí)間與精力,提高了工作效率。其次,本申請使用SVN Kit客戶端庫自動(dòng)對(duì)比當(dāng)前版本與最近一次成功調(diào)用版本的方法,找出其中的代碼變更或者配置變更,無需手動(dòng)比對(duì)變化點(diǎn),從而更方便、更快速地自動(dòng)定位到問題原因。再次,本申請還可以自動(dòng)監(jiān)控腳本運(yùn)行狀況,如果運(yùn)行失敗,則系統(tǒng)會(huì)自動(dòng)以郵件、即時(shí)通訊等方式通知到相關(guān)人員進(jìn)行跟蹤。而且,相關(guān)人員點(diǎn)擊失敗腳本鏈接,系統(tǒng)根據(jù)標(biāo)記的方法變化點(diǎn)展現(xiàn)出類方法的變化情況,幫助其快速定位問題原因。當(dāng)然,實(shí)施本申請的任一產(chǎn)品不一定需要同時(shí)達(dá)到以上所述的所有優(yōu)點(diǎn)。
圖1是本申請實(shí)施例所述一種持續(xù)集成失敗用例的定位方法流程圖;圖2是本申請實(shí)施例所述一種持續(xù)集成失敗用例的定位系統(tǒng)結(jié)構(gòu)圖;圖3是本申請另一實(shí)施例所述一種持續(xù)集成失敗用例的定位系統(tǒng)結(jié)構(gòu)圖;圖4是本申請另一實(shí)施例所述一種持續(xù)集成失敗用例的定位系統(tǒng)結(jié)構(gòu)圖;圖5是本申請另一實(shí)施例所述的系統(tǒng)結(jié)構(gòu)圖;圖6是圖5所示實(shí)施例中ASM注入日志輸出字節(jié)碼的流程圖;圖7是圖5所示實(shí)施例中SVN Kit對(duì)比代碼變化的流程圖。
具體實(shí)施例方式為使本申請的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式
對(duì)本申請作進(jìn)一步詳細(xì)的說明。在對(duì)項(xiàng)目工程進(jìn)行持續(xù)集成時(shí),為了快速定位到問題原因,本申請首先自動(dòng)分析出測試腳本中方法調(diào)用的層次關(guān)系,然后根據(jù)方法調(diào)用層次分析運(yùn)行失敗的測試腳本,最終自動(dòng)定位出運(yùn)行失敗的代碼點(diǎn)。下面通過實(shí)施例對(duì)本申請進(jìn)行詳細(xì)說明。參照圖1,其為本申請實(shí)施例所述一種持續(xù)集成失敗用例的定位方法流程圖。步驟101,加載工程代碼時(shí),在工程代碼中注入日志輸出字節(jié)碼;字節(jié)碼(Byte-code)是一種包含執(zhí)行程序、由一序列op代碼/數(shù)據(jù)對(duì)組成的二進(jìn)制文件。字節(jié)碼是一種中間碼,它比機(jī)器碼更抽象。它經(jīng)常被看作是包含一個(gè)執(zhí)行程序的二進(jìn)制文件,更像一個(gè)對(duì)象模型。字節(jié)碼被這樣叫是因?yàn)橥ǔC總€(gè)opcode是一字節(jié)長,但是指令碼的長度是變化的。每個(gè)指令有從O到255 (或十六進(jìn)制的00到FF)的一字節(jié)操作碼,被參數(shù)例如寄存器或內(nèi)存地址跟隨。每次測試時(shí),在加載當(dāng)前測試所需的工程代碼時(shí),將日志輸出字節(jié)碼注入到工程代碼中,因此不會(huì)對(duì)工程代碼的源代碼造成修改。所述日志輸出字節(jié)碼的作用是分析出測試腳本中方法調(diào)用的層次關(guān)系,具體的分析方法如步驟102詳述。步驟102,當(dāng)運(yùn)行包含所述工程代碼的測試腳本時(shí),進(jìn)入測試腳本的每個(gè)方法前通過所述日志輸出字節(jié)碼記錄方法調(diào)用日志,并根據(jù)方法調(diào)用日志形成方法調(diào)用層次的日志文件;
測試腳本中的代碼主要是一些類方法的代碼,方法之間存在樹型的層次調(diào)用關(guān)系,所有方法可形成一棵方法調(diào)用關(guān)系樹。在測試腳本的運(yùn)行過程中,每次運(yùn)行到要進(jìn)入一個(gè)方法前,注入到測試腳本的日志輸出字節(jié)碼就將這個(gè)方法與其他方法的調(diào)用關(guān)系進(jìn)行日志記錄,如這個(gè)方法是被另一個(gè)方法調(diào)用,這個(gè)方法又會(huì)調(diào)用另一個(gè)方法。通過這樣的方式,日志中就記錄下了測試腳本中所有方法之間的調(diào)用關(guān)系,最終日志文件中形成方法調(diào)用層次,也即方法調(diào)用關(guān)系樹。這種方法調(diào)用的層次關(guān)系可用來定位導(dǎo)致腳本運(yùn)行失敗的原因。步驟103,根據(jù)所述日志文件中的方法調(diào)用層次分析運(yùn)行失敗的測試腳本,定位運(yùn)行失敗的原因。具體的,步驟103可以包含以下兩個(gè)子步驟子步驟a,根據(jù)所述日志文件中的方法調(diào)用層次,對(duì)比方法的當(dāng)前版本與最近一次運(yùn)行成功版本的代碼;在實(shí)際應(yīng)用中,由于方法之間是層層調(diào)用的關(guān)系,因此對(duì)于運(yùn)行失敗的測試腳本,需要找到對(duì)應(yīng)的多個(gè)文件,分別進(jìn)行當(dāng)前版本與最近一次運(yùn)行成功版本的兩兩比較。例如,針對(duì)某個(gè)運(yùn)行失敗的測試腳本,根據(jù)方法調(diào)用的層次關(guān)系有三個(gè)記錄了當(dāng)前版本類方法代碼的文件,分別是文件Al、文件B1、文件Cl,此時(shí)還需要得到這三個(gè)文件在最近一次運(yùn)行成功的版本代碼,如文件A2、文件B2、文件C2,然后將Al與A2、B1與B2、C1與C2進(jìn)行兩兩對(duì)t匕,找出兩個(gè)版本的代碼是否有變更。子步驟b,將對(duì)比發(fā)現(xiàn)的變化點(diǎn)進(jìn)行標(biāo)記,并將標(biāo)記的變化點(diǎn)定位為運(yùn)行失敗的原因。以上對(duì)比過程是一個(gè)自動(dòng)執(zhí)行的過程,在對(duì)比過程中,若兩個(gè)版本的代碼有變化,則將變化點(diǎn)標(biāo)記出來,這些變化點(diǎn)可以幫助用戶快速定位到腳本運(yùn)行失敗的原因。此外,若對(duì)比發(fā)現(xiàn)無變化,步驟103還可以包括以下子步驟子步驟C,提示運(yùn)行失敗的可能原因,所述可能原因包括數(shù)據(jù)庫變更和/或配置變更。即如果文件中的代碼在兩個(gè)版本中沒有變化,則腳本運(yùn)行失敗可能是由于數(shù)據(jù)庫變更或配置變更所導(dǎo)致。此外,也可能由其他原因?qū)е?,本?shí)施例不再一一列舉。需要說明的是,上述通過子步驟a、b、c實(shí)現(xiàn)步驟103的方案是本實(shí)施例的一個(gè)優(yōu)選方案,可實(shí)現(xiàn)自動(dòng)定位,無需人工分析定位。但是,步驟103也可以通過手動(dòng)方式定位,SP找到需要對(duì)比的文件,然后一步一步調(diào)試代碼找出變化點(diǎn)。由于步驟101和步驟102可以自動(dòng)分析出測試腳本中的方法調(diào)用層次,因此即使手動(dòng)定位變化點(diǎn),與現(xiàn)有技術(shù)完全通過手動(dòng)方式實(shí)現(xiàn)的方案相比,也可以提高工作效率。此外,自動(dòng)執(zhí)行完步驟102之后,步驟103可以在下述兩種情況下執(zhí)行I) 一種情況是根據(jù)用戶的點(diǎn)擊實(shí)時(shí)分析定位,具體如下當(dāng)點(diǎn)擊某個(gè)運(yùn)行失敗的測試腳本的鏈接時(shí),根據(jù)所述日志文件中的方法調(diào)用層次分析該被點(diǎn)擊的運(yùn)行失敗的測試腳本,定位運(yùn)行失敗的原因。在測試腳本的運(yùn)行過程中,如果運(yùn)行失敗,注入到測試腳本中的日志輸出字節(jié)碼會(huì)記錄失敗的腳本,并生成失敗腳本鏈接返回給用戶,用戶點(diǎn)擊該鏈接后,將觸發(fā)步驟103實(shí)時(shí)定位問題原因。例如,用戶點(diǎn)擊失敗腳本鏈接A,則系統(tǒng)實(shí)時(shí)定位測試腳本A的問題原因,并將定位結(jié)果返回給用戶查看;若用戶點(diǎn)擊失敗腳本鏈接B,則系統(tǒng)實(shí)時(shí)定位測試腳本B的問題原因并返回給用戶。由此可知,用戶沒有點(diǎn)擊的失敗腳本鏈接,將不會(huì)執(zhí)行步驟103。2)另一種情況是先自動(dòng)分析定位,然后根據(jù)用戶的點(diǎn)擊展示定位結(jié)果,具體如下在執(zhí)行完步驟102之后,自動(dòng)執(zhí)行根據(jù)所述日志文件中的方法調(diào)用層次分析所有運(yùn)行失敗的測試腳本,定位所有運(yùn)行失敗的原因;之后,還包括當(dāng)點(diǎn)擊某個(gè)運(yùn)行失敗的測試腳本的鏈接時(shí),從中獲取對(duì)應(yīng)的運(yùn)行失敗的原因。即系統(tǒng)在用戶沒有點(diǎn)擊查看的情況下先自動(dòng)定位出所有腳本的問題原因,并將定位結(jié)果存儲(chǔ)起來,當(dāng)用戶需要時(shí)點(diǎn)擊某個(gè)失敗腳本鏈接,系統(tǒng)直接從存儲(chǔ)的所有定位結(jié)果中快速找出對(duì)應(yīng)的定位結(jié)果,并返回給用戶查看。實(shí)際應(yīng)用中,可選擇上述任意一種方式實(shí)現(xiàn),本實(shí)施例對(duì)此不做限定。綜上所述,這種在持續(xù)集成過程中自動(dòng)定位失敗用例的方法無需人工調(diào)試代碼,因此可以方便、快速地自動(dòng)定位到問題原因,解決問題,而且方便維護(hù),節(jié)省大量時(shí)間與精力,提高了工作效率?;谏鲜龇椒▽?shí)施例,本申請還提供了對(duì)應(yīng)的系統(tǒng)實(shí)施例。參照圖2,其為本申請實(shí)施例所述一種持續(xù)集成失敗用例的定位系統(tǒng)結(jié)構(gòu)圖。所述系統(tǒng)可以包括字節(jié)碼注入單元10、方法調(diào)用層次分析單元20和失敗定位單元30,其中字節(jié)碼注入單元10,用于加載工程代碼時(shí),在工程代碼中注入日志輸出字節(jié)碼;方法調(diào)用層次分析單元20,用于當(dāng)運(yùn)行包含所述工程代碼的測試腳本時(shí),進(jìn)入測試腳本的每個(gè)方法前通過所述日志輸出字節(jié)碼記錄方法調(diào)用日志,并根據(jù)方法調(diào)用日志形成方法調(diào)用層次的日志文件;失敗定位單元30,用于根據(jù)所述日志文件中的方法調(diào)用層次分析運(yùn)行失敗的測試腳本,定位運(yùn)行失敗的原因。優(yōu)選的,在本申請的另一系統(tǒng)實(shí)施例中,所述失敗定位單元30具體可以包括以下兩個(gè)子單元對(duì)比子單元,用于根據(jù)所述日志文件中的方法調(diào)用層次,對(duì)比方法的當(dāng)前版本與最近一次運(yùn)行成功版本的代碼;標(biāo)記子單元,用于將對(duì)比發(fā)現(xiàn)的變化點(diǎn)進(jìn)行標(biāo)記,并將標(biāo)記的變化點(diǎn)定位為運(yùn)行失敗的原因。優(yōu)選的,若對(duì)比發(fā)現(xiàn)無變化,所述失敗定位單元30進(jìn)一步還可以包括下述子單元提示子單元,用于提示運(yùn)行失敗的可能原因,所述可能原因包括數(shù)據(jù)庫變更和/或配置變更。優(yōu)選的,在本申請的另一系統(tǒng)實(shí)施例中,參照圖3所示,所述定位系統(tǒng)還可以包括第一點(diǎn)擊查看單元40,用于當(dāng)點(diǎn)擊某個(gè)運(yùn)行失敗的測試腳本的鏈接時(shí)觸發(fā)所述失敗定位單元30,所述失敗定位單元30根據(jù)所述日志文件中的方法調(diào)用層次分析該被點(diǎn)擊的運(yùn)行失敗的測試腳本,定位運(yùn)行失敗的原因。優(yōu)選的,在本申請的另一系統(tǒng)實(shí)施例中,參照圖4所示,所述失敗定位單元30可以根據(jù)所述日志文件中的方法調(diào)用層次分析所有運(yùn)行失敗的測試腳本,定位所有運(yùn)行失敗的原因;基于此,所述定位系統(tǒng)還可以包括第二點(diǎn)擊查看單元50,用于當(dāng)點(diǎn)擊某個(gè)運(yùn)行失敗的測試腳本的鏈接時(shí),從所述失敗定位單元30中獲取對(duì)應(yīng)的運(yùn)行失敗的原因。對(duì)于上述定位系統(tǒng)實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡單,相關(guān)之處參見圖1所示方法實(shí)施例的部分說明即可。為了使本領(lǐng)域技術(shù)人員更加了解本申請的實(shí)現(xiàn),下面通過另一個(gè)更具體的例子進(jìn)行說明。在該例中,將基于ASM和SVN Kit實(shí)現(xiàn)持續(xù)集成失敗用例的定位。ASM是Java字節(jié)碼處理分析框架,能夠非侵入式地動(dòng)態(tài)修改或者生成類,且能夠驅(qū)動(dòng)類到字節(jié)碼的轉(zhuǎn)換以及進(jìn)行代碼分析。其中,所述“非侵入式”是指動(dòng)態(tài)修改或者生產(chǎn)類的過程不會(huì)對(duì)源代碼產(chǎn)生影響。SVN是Subversion的縮寫,是一種版本管理工具,通過對(duì)源代碼進(jìn)行版本控制,從而達(dá)到保證文件同步的目的。SVN Kit是一個(gè)純Java的SVN客戶端庫,使用SVN Kit無需安裝任何SVN的客戶端,即可操作SVN服務(wù)器端的代碼。參照圖5,其為本申請另一實(shí)施例所述的系統(tǒng)結(jié)構(gòu)圖,該系統(tǒng)描述如下I)系統(tǒng)核心System Core,可基于ASM字節(jié)碼框架,在加載工程代碼時(shí)動(dòng)態(tài)地非侵入式地注入日志輸出字節(jié)碼到工程代碼中,并通過日志輸出語句,形成方法調(diào)用層次的日志文件;所述ASM字節(jié)碼框架是一個(gè)開源框架,提供了將字節(jié)碼注入工程代碼的功能,利用該功能,本實(shí)施例可以將自定義功能的日志輸出字節(jié)碼注入到加載的工程代碼中。當(dāng)系統(tǒng)運(yùn)行包含所述工程代碼的測試腳本時(shí),在進(jìn)入測試腳本的每個(gè)方法前通過所述日志輸出字節(jié)碼,可以將方法調(diào)用日志記錄下來,并通過日志輸出語句形成方法調(diào)用層次的日志文件。其中,所述“動(dòng)態(tài)”是指在每次加載工程文件時(shí)注入日志輸出字節(jié)碼,這是一個(gè)動(dòng)態(tài)的注入過程。所述“非侵入式”是指ASM字節(jié)碼框架可以使注入到工程代碼中的日志輸出字節(jié)碼不影響工程代碼的源代碼。2)系統(tǒng)核心System Core,可基于SVN Kit客戶端庫,根據(jù)日志文件中的方法調(diào)用關(guān)系,對(duì)比類方法的當(dāng)前版本與最近一次運(yùn)行成功版本的代碼,標(biāo)記變化點(diǎn);所述SVN Kit客戶端庫不同于背景技術(shù)提到的SVN客戶端工具SVN客戶端工具是一個(gè)客戶端軟件,用戶需要在客戶端安裝所述SVN客戶端工具,才能手動(dòng)查看代碼并找出不同版本的變化點(diǎn);而使用SVN Kit無需安裝任何SVN的客戶端,即可操作SVN服務(wù)器端的代碼。SVN Kit提供了文件比對(duì)功能,但是SVN Kit只能對(duì)兩兩文件進(jìn)行單一的對(duì)比分析。而如前所述,在本申請實(shí)施例中,一個(gè)測試腳本由于方法調(diào)用的層次關(guān)系將對(duì)應(yīng)多個(gè)類方法的文件,因此需要對(duì)多個(gè)類方法的文件進(jìn)行不同版本的比較。此時(shí),本實(shí)施例可以根據(jù)方法調(diào)用關(guān)系樹的結(jié)構(gòu)獲取需要進(jìn)行對(duì)比的所有類方法的不同版本文件,然后調(diào)用SVNKit的單一對(duì)比功能對(duì)指定的兩個(gè)版本的文件進(jìn)行一一對(duì)比,從中找出變化點(diǎn)。3)系統(tǒng)核心System Core,還可自動(dòng)監(jiān)控腳本運(yùn)行狀況,如果運(yùn)行失敗,則系統(tǒng)會(huì)自動(dòng)以郵件、即時(shí)通訊等方式通知到相關(guān)人員進(jìn)行跟蹤;4)相關(guān)人員點(diǎn)擊失敗腳本鏈接,系統(tǒng)可根據(jù)標(biāo)記的方法變化點(diǎn)展現(xiàn)出類方法的變化情況,幫助其快速定位問題原因。參照圖6,其為ASM注入日志輸出字節(jié)碼的流程圖。具體如下步驟601,通過ASM字節(jié)碼框架注入日志輸出字節(jié)碼到工程代碼里(非侵入式);步驟602,運(yùn)行測試腳本;步驟603,記錄方法調(diào)用的日志文件;進(jìn)入每個(gè)方法前,通過日志輸出字節(jié)碼將日志記錄到特定的目錄,形成方法調(diào)用關(guān)系的日志文件;步驟604,判斷測試腳本的運(yùn)行狀態(tài);若腳本運(yùn)行失敗,則記錄失敗腳本,并將失敗腳本鏈接發(fā)送給相關(guān)人員;若腳本運(yùn)行成功,則結(jié)束流程。參照圖7,其為SVN Kit對(duì)比代碼變化的流程圖,是根據(jù)用戶的點(diǎn)擊實(shí)時(shí)對(duì)比分析的例子,具體如下步驟701,相關(guān)人員收到失敗腳本的消息,點(diǎn)擊失敗腳本的鏈接;步驟702,基于SVN Kit客戶端庫,根據(jù)日志文件中的方法調(diào)用關(guān)系,對(duì)比類方法的當(dāng)前版本與最近一次運(yùn)行成功版本的代碼;步驟703,若有變化,則記錄并返回變化點(diǎn)給相關(guān)人員;步驟704,否則,提示可能原因(如數(shù)據(jù)、配置變更等原因)給相關(guān)人員。綜上所述,上述系統(tǒng)通過ASM字節(jié)碼框架分析出Java代碼中的方法調(diào)用樹,然后使用SVN Kit客戶端庫對(duì)比SVN上關(guān)聯(lián)文件(Java代碼或配置文件)的不同版本的變化點(diǎn),標(biāo)記出修改變化點(diǎn),直接點(diǎn)擊即可查看有哪些部分不同,從而更方便、更快速地幫助用戶自動(dòng)定位到問題原因,解決問題。此外,基于本申請的思想,還可以通過以下兩種方式實(shí)現(xiàn)I)基于ASM封裝的工具包(Cglib)進(jìn)行開發(fā),分析得出方法調(diào)用關(guān)系樹,然后從SVN下載源代碼,通過SVN客戶端工具手動(dòng)查看代碼或文件的變化點(diǎn)。這種方案中,ASM封裝的工具包(Cglib)功能太過強(qiáng)大,除提供注入字節(jié)碼的功能夕卜,還提供了更多本申請不涉及的功能,因此在實(shí)現(xiàn)本申請時(shí)功能太過冗余,影響了分析效率。而且,通過SVN客戶端工具手動(dòng)對(duì)比的方式顯然不及圖7所示自動(dòng)對(duì)比的方式。2)基于現(xiàn)有的開源代碼覆蓋率工具(E_a)進(jìn)行第二次開發(fā),分析得出方法調(diào)用關(guān)系樹,然后從SVN下載源代碼,通過SVN客戶端工具手動(dòng)查看代碼或文件的變化點(diǎn)。與將字節(jié)碼注入工程代碼來獲取方法調(diào)用關(guān)系的實(shí)現(xiàn)方案相比,基于Emma需要開發(fā)大量代碼,并不適合本申請,而且也存在手動(dòng)對(duì)比的問題。綜上所述,圖5、圖6和圖7所實(shí)現(xiàn)的方案為本申請的一個(gè)優(yōu)選實(shí)施例。需要說明的是,對(duì)于前述的方法實(shí)施例,為了簡單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本申請并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本申請,某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作或單元模塊并不一定是本申請所必需的。本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。以上對(duì)本申請所提供的一種持續(xù)集成失敗用例的定位方法及系統(tǒng),進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本申請的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本申請的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本申請的限制。
權(quán)利要求
1.一種持續(xù)集成失敗用例的定位方法,其特征在于,包括: 加載工程代碼時(shí),在工程代碼中注入日志輸出字節(jié)碼; 當(dāng)運(yùn)行包含所述工程代碼的測試腳本時(shí),進(jìn)入測試腳本的每個(gè)方法前通過所述日志輸出字節(jié)碼記錄方法調(diào)用日志,并根據(jù)方法調(diào)用日志形成方法調(diào)用層次的日志文件; 根據(jù)所述日志文件中的方法調(diào)用層次分析運(yùn)行失敗的測試腳本,定位運(yùn)行失敗的原因。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述日志文件中的方法調(diào)用層次分析運(yùn)行失敗的測試腳本,定位運(yùn)行失敗的原因,包括: 根據(jù)所述日志文件中的方法調(diào)用層次,對(duì)比方法的當(dāng)前版本與最近一次運(yùn)行成功版本的代碼; 將對(duì)比發(fā)現(xiàn)的變化點(diǎn)進(jìn)行標(biāo)記,并將標(biāo)記的變化點(diǎn)定位為運(yùn)行失敗的原因。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,若對(duì)比發(fā)現(xiàn)無變化,還包括: 提示運(yùn)行失敗的可能原因,所述可能原因包括數(shù)據(jù)庫變更和/或配置變更。
4.根據(jù)權(quán)利要求1至3任一所述的方法,其特征在于: 當(dāng)點(diǎn)擊某個(gè)運(yùn)行失敗的測試腳本的鏈接時(shí),根據(jù)所述日志文件中的方法調(diào)用層次分析該被點(diǎn)擊的運(yùn)行失敗的測試腳本,定位運(yùn)行失敗的原因。
5.根據(jù)權(quán)利要求 1至3任一所述的方法,其特征在于, 根據(jù)所述日志文件中的方法調(diào)用層次分析所有運(yùn)行失敗的測試腳本,定位所有運(yùn)行失敗的原因之后,還包括: 當(dāng)點(diǎn)擊某個(gè)運(yùn)行失敗的測試腳本的鏈接時(shí),從中獲取對(duì)應(yīng)的運(yùn)行失敗的原因。
6.一種持續(xù)集成失敗用例的定位系統(tǒng),其特征在于,包括: 字節(jié)碼注入單元,用于加載工程代碼時(shí),在工程代碼中注入日志輸出字節(jié)碼; 方法調(diào)用層次分析單元,用于當(dāng)運(yùn)行包含所述工程代碼的測試腳本時(shí),進(jìn)入測試腳本的每個(gè)方法前通過所述日志輸出字節(jié)碼記錄方法調(diào)用日志,并根據(jù)方法調(diào)用日志形成方法調(diào)用層次的日志文件; 失敗定位單元,用于根據(jù)所述日志文件中的方法調(diào)用層次分析運(yùn)行失敗的測試腳本,定位運(yùn)行失敗的原因。
7.根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于,所述失敗定位單元包括: 對(duì)比子單元,用于根據(jù)所述日志文件中的方法調(diào)用層次,對(duì)比方法的當(dāng)前版本與最近一次運(yùn)行成功版本的代碼; 標(biāo)記子單元,用于將對(duì)比發(fā)現(xiàn)的變化點(diǎn)進(jìn)行標(biāo)記,并將標(biāo)記的變化點(diǎn)定位為運(yùn)行失敗的原因。
8.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,若對(duì)比發(fā)現(xiàn)無變化,所述失敗定位單元還包括: 提示子單元,用于提示運(yùn)行失敗的可能原因,所述可能原因包括數(shù)據(jù)庫變更和/或配置變更。
9.根據(jù)權(quán)利要求6至8任一所述的系統(tǒng),其特征在于,還包括: 第一點(diǎn)擊查看單元,用于當(dāng)點(diǎn)擊某個(gè)運(yùn)行失敗的測試腳本的鏈接時(shí)觸發(fā)所述失敗定位單元,所述失敗定位單元根據(jù)所述日志文件中的方法調(diào)用層次分析該被點(diǎn)擊的運(yùn)行失敗的測試腳本,定位運(yùn)行失敗的原因。
10.根據(jù)權(quán)利要求6至8任一所述的系統(tǒng),其特征在于:所述失敗定位單元根據(jù)所述日志文件中的方法調(diào)用層次分析所有運(yùn)行失敗的測試腳本,定位所有運(yùn)行失敗的原因;所述系統(tǒng)還包括:第二點(diǎn)擊查看單元,用于當(dāng)點(diǎn)擊某個(gè)運(yùn)行失敗的測試腳本的鏈接時(shí),從所述失敗定位單元中獲取對(duì)應(yīng)的運(yùn)行 失敗的原因。
全文摘要
本發(fā)明提供了一種持續(xù)集成失敗用例的定位方法及系統(tǒng),以解決目前手動(dòng)定位效率低的問題。所述方法包括加載工程代碼時(shí),在工程代碼中注入日志輸出字節(jié)碼;當(dāng)運(yùn)行包含所述工程代碼的測試腳本時(shí),進(jìn)入測試腳本的每個(gè)方法前通過所述日志輸出字節(jié)碼記錄方法調(diào)用日志,并根據(jù)方法調(diào)用日志形成方法調(diào)用層次的日志文件;根據(jù)所述日志文件中的方法調(diào)用層次分析運(yùn)行失敗的測試腳本,定位運(yùn)行失敗的原因。本發(fā)明無需人工調(diào)試代碼,因此可以方便、快速地自動(dòng)定位到問題原因,解決問題,而且方便維護(hù),節(jié)省大量時(shí)間與精力,提高了工作效率。
文檔編號(hào)G06F11/36GK103077111SQ20111032952
公開日2013年5月1日 申請日期2011年10月26日 優(yōu)先權(quán)日2011年10月26日
發(fā)明者何曉峰 申請人:阿里巴巴集團(tuán)控股有限公司