本發(fā)明涉及軟件自動(dòng)化測(cè)試領(lǐng)域,尤其是涉及一種基于git代碼文件檢索粒度的自動(dòng)化回歸測(cè)試方法。
背景技術(shù):
為了使軟件產(chǎn)品能夠快速響應(yīng)市場(chǎng),軟件版本的迭代頻率越來(lái)越高,項(xiàng)目發(fā)布周期越來(lái)越短,伴隨而來(lái)的必然是更多的資源投入。而多出來(lái)的這部分投入不再是新功能開(kāi)發(fā)所需的時(shí)間和人力,而是每次版本迭代的回歸測(cè)試所耗費(fèi)的時(shí)間和人力,越是龐大的軟件產(chǎn)品,手工回歸測(cè)試耗費(fèi)的時(shí)間和人力越是大的驚人,回歸測(cè)試已經(jīng)成為了項(xiàng)目快速交付的新瓶頸。為了適應(yīng)越來(lái)越頻繁的軟件迭代版本的交付,尋求高質(zhì)量、高效率、低成本的回歸測(cè)試方法成為了目前軟件行業(yè)迫切需要攻克的難題。
軟件項(xiàng)目迭代頻率增高同樣導(dǎo)致了軟件開(kāi)發(fā)過(guò)程中會(huì)持續(xù)產(chǎn)生多個(gè)待測(cè)版本,傳統(tǒng)的集中式版本控制系統(tǒng)要求所有代碼提交后才可以構(gòu)建整包以供測(cè)試,若是開(kāi)發(fā)代碼質(zhì)量不高,影響范圍卻很廣,一旦出現(xiàn)問(wèn)題,解決起來(lái)就非常費(fèi)時(shí)費(fèi)力。這樣的情況若是出現(xiàn)的頻率很高,則會(huì)嚴(yán)重影響開(kāi)發(fā)代碼線的穩(wěn)定性。為了解決這個(gè)問(wèn)題,很多軟件項(xiàng)目開(kāi)發(fā)開(kāi)始采用分布式版本控制系統(tǒng)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供一種粒度更細(xì),頻率更高,資源更加節(jié)省的基于git代碼文件檢索粒度的自動(dòng)化回歸測(cè)試方法,使得在檢測(cè)周期內(nèi)更新的開(kāi)發(fā)代碼,都能得到及時(shí)的回歸測(cè)試,既增強(qiáng)了代碼線的穩(wěn)定性和健壯性,又大大降低了回歸測(cè)試所耗費(fèi)的時(shí)間成本和人力成本,繼而打破項(xiàng)目快速迭代交付過(guò)程中回歸測(cè)試所帶來(lái)的瓶頸。
本發(fā)明的目的可以通過(guò)以下技術(shù)方案來(lái)實(shí)現(xiàn):
一種基于git代碼文件檢索粒度的自動(dòng)化回歸測(cè)試方法,包括以下步驟:
1)自動(dòng)獲取git開(kāi)發(fā)代碼主線上有代碼變化的文件,得到一張記錄了在檢測(cè)時(shí)間內(nèi)全部有代碼變化的文件名列表;
2)將被捕捉到的有變化的代碼文件轉(zhuǎn)化為受影響的功能特性列表;
3)將受影響的功能特性轉(zhuǎn)化為需要運(yùn)行的自動(dòng)化回歸用例標(biāo)簽;
4)將步驟1)、步驟2)、和步驟3)中所有的手動(dòng)執(zhí)行操作轉(zhuǎn)化成自動(dòng)執(zhí)行,并通過(guò)jenkins平臺(tái)將其集成起來(lái),實(shí)現(xiàn)一鍵式觸發(fā)。
優(yōu)選地,所述的步驟1)自動(dòng)獲取git開(kāi)發(fā)代碼主線上有代碼變化的文件具體為:
第一步:檢查是否到檢測(cè)周期;
第二步:刪除前一次殘留的標(biāo)簽;
第三步:進(jìn)入到git本地倉(cāng)庫(kù)的開(kāi)發(fā)代碼主庫(kù)路徑,打一個(gè)oldtag標(biāo)簽,記錄當(dāng)前舊的代碼狀態(tài);
第四步:執(zhí)行更新代碼命令;
第五步:此時(shí)再打一個(gè)標(biāo)簽記為newtag,記錄的是當(dāng)前最新的代碼狀態(tài);
第六步:通過(guò)git代碼管理工具自帶的命令gitdiff,輸出新老標(biāo)簽所代表的不同代碼版本之間,有代碼變動(dòng)的部分,打印其文件名。
優(yōu)選地,所述的執(zhí)行更新代碼命令具體為:由多人協(xié)作分布式開(kāi)發(fā)編寫(xiě)的遠(yuǎn)程倉(cāng)庫(kù)里的代碼將被更新下載到本地代碼倉(cāng)庫(kù),使得本地代碼狀態(tài)與遠(yuǎn)程倉(cāng)庫(kù)代碼的最新?tīng)顟B(tài)一致。
優(yōu)選地,所述的檢測(cè)周期為自定義設(shè)置,根據(jù)項(xiàng)目的具體情況,評(píng)估最佳的循環(huán)檢測(cè)周期。
優(yōu)選地,通過(guò)變化的代碼文件名,得到所有被影響的功能特性,通過(guò)特性規(guī)則表來(lái)描述某一模塊所有的代碼文件和與之對(duì)應(yīng)的功能特性之間的關(guān)系。
優(yōu)選地,所述的特性規(guī)則表中的對(duì)應(yīng)關(guān)系為一對(duì)一、一對(duì)多、多對(duì)一、多對(duì)多這四種情況中的一種。
優(yōu)選地,所述的特性規(guī)則表制定好以后,通過(guò)腳本工具將步驟1)中的執(zhí)行結(jié)果“有代碼變化的文件名列表中的文件名”與特性規(guī)則表進(jìn)行比對(duì),若存在,則輸出對(duì)應(yīng)的特性,組成一張功能特性列表,即實(shí)現(xiàn)在檢測(cè)周期內(nèi),所有有代碼變化的文件影響到的功能特性列表輸出出來(lái)。
優(yōu)選地,所述的步驟3)具體為:
將步驟2)輸出的功能特性轉(zhuǎn)化為自動(dòng)化回歸的用例標(biāo)簽,用以篩選用例執(zhí)行,這同樣需要一張規(guī)則表,將此規(guī)則表命名為標(biāo)簽規(guī)則表;
所述的標(biāo)簽規(guī)則表的直接對(duì)應(yīng)關(guān)系為“功能特性:用例標(biāo)簽”;
所述的標(biāo)簽規(guī)則表是完全匹配特性列表的,即步驟2)輸出的功能特性列表項(xiàng)一定能在此標(biāo)簽規(guī)則表中找到對(duì)應(yīng)的自動(dòng)化用例標(biāo)簽,同樣需要一個(gè)腳本工具,來(lái)實(shí)現(xiàn)自動(dòng)查找特性,輸出對(duì)應(yīng)標(biāo)簽,組成一張用于回歸測(cè)試的自動(dòng)化用例標(biāo)簽列表,通過(guò)這張用例標(biāo)簽列表來(lái)篩選觸發(fā)自動(dòng)化回歸用例。
優(yōu)選地,所述的步驟4)具體為:
設(shè)置各工作模塊:
job0_downgitcode:用于首次下載開(kāi)發(fā)代碼,在同一個(gè)構(gòu)建節(jié)點(diǎn)上此任務(wù)只運(yùn)行一次;
job1_getchangefileslist:用于獲取到開(kāi)發(fā)主線倉(cāng)庫(kù)的所有代碼有變化的文件名,并將文件名列表輸出到srt_changefileslist.txt,上傳公共文件服務(wù)器;
job2_diffpropertyrole:用于得到代碼變化影響到的功能特性列表,同樣輸出到srt_propertylist.txt,并上傳公共文件服務(wù)器;
job3_diffsuitetagrole:用于得到受影響特性所對(duì)應(yīng)的用例標(biāo)簽列表,輸出到srt_suitetaglist.txt,并上傳公共文件服務(wù)器;
at_slimsizert:用于通過(guò)用例標(biāo)簽篩選運(yùn)行自動(dòng)化測(cè)試用例,并郵件通知用例執(zhí)行結(jié)果;
job0_downgitcode在同一構(gòu)建節(jié)點(diǎn)上只需要運(yùn)行一次,
而job1_getchangefileslist,job2_diffpropertyrole,job3_diffsuitetagrole和at_slimsizert任務(wù)均可多次重復(fù)運(yùn)行,且執(zhí)行順序不變,在jenkins上通過(guò)設(shè)置關(guān)聯(lián)任務(wù),將這些任務(wù)串聯(lián)起來(lái),形成的效果是一旦job1_getchangefileslist執(zhí)行成功,自動(dòng)觸發(fā)job2_diffpropertyrole開(kāi)始運(yùn)行,同理,一旦job2_diffpropertyrole運(yùn)行完成,則自動(dòng)觸發(fā)job3_diffsuitetagrole,完成后,接著觸發(fā)at_slimsizert任務(wù)。
優(yōu)選地,所述的下載開(kāi)發(fā)代碼的存放路徑,放在此任務(wù)工作空間的同級(jí)目錄下。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn):
1、精準(zhǔn)性:實(shí)現(xiàn)針對(duì)文件級(jí)代碼變更的回歸測(cè)試,即只針對(duì)有代碼變化的文件所影響的功能特性進(jìn)行回歸測(cè)試,縮小了回歸測(cè)試的范圍,提高了回歸測(cè)試的精準(zhǔn)性;
2、時(shí)效性:可通過(guò)適當(dāng)增加檢測(cè)頻率,使得任何有效提交的開(kāi)發(fā)代碼都能及時(shí)的得到回歸測(cè)試的檢驗(yàn),及時(shí)發(fā)現(xiàn)問(wèn)題并解決,長(zhǎng)時(shí)間的保證代碼線的健壯性與穩(wěn)定性;
3、資源節(jié)?。和ㄟ^(guò)縮小測(cè)試范圍來(lái)降低回歸測(cè)試的工作量;通過(guò)使用rf自動(dòng)化框架編寫(xiě)自動(dòng)化回歸用例來(lái)減少重復(fù)性的測(cè)試勞動(dòng),節(jié)約人力;通過(guò)jenkins集成平臺(tái),有選擇的觸發(fā)自動(dòng)化測(cè)試用例來(lái)避免全量用例集覆蓋所造成的時(shí)間浪費(fèi),同時(shí)減少人工干預(yù),還可以利用非工作時(shí)間運(yùn)行這些自動(dòng)化回歸測(cè)試用例,再次縮短回歸測(cè)試階段的時(shí)間成本。
4、軟件越是龐大,應(yīng)用本發(fā)明所帶來(lái)的優(yōu)勢(shì)越明顯。
附圖說(shuō)明
圖1為自動(dòng)獲取git開(kāi)發(fā)主線上有代碼變化的文件的流程圖;
圖2為jenkins集成整體流程圖;
圖3為對(duì)比腳本邏輯示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明的一部分實(shí)施例,而不是全部實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都應(yīng)屬于本發(fā)明保護(hù)的范圍。
本發(fā)明git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng),可以有效、高速的處理從很小到非常大的項(xiàng)目版本管理,因?yàn)槠溥m應(yīng)分布式開(kāi)發(fā),速度快,靈活,解決沖突容易,可以支持離線工作等優(yōu)點(diǎn),而被廣泛應(yīng)用于各種規(guī)模的敏捷開(kāi)發(fā)項(xiàng)目中。
git提供了便捷的多人協(xié)作分支管理,可以讓不同工程師在各自的分支上開(kāi)發(fā)代碼并自測(cè),也可以與其他分支自由的合并聯(lián)調(diào),構(gòu)包驗(yàn)證,這時(shí)再將這些進(jìn)行過(guò)基本測(cè)試的代碼合并到同一條代碼線上,可以極大程度的保證這條代碼線的穩(wěn)定性,我們?nèi)藶榈亩x這條代碼線為開(kāi)發(fā)代碼主線(以下簡(jiǎn)稱開(kāi)發(fā)主線)。在開(kāi)發(fā)主線上構(gòu)建的整包才可以成為每次項(xiàng)目迭代版本發(fā)布的回歸測(cè)試對(duì)象。
git同時(shí)提供一個(gè)可以快速找到某一時(shí)刻版本的管理機(jī)制,這就是標(biāo)簽管理。git的標(biāo)簽是版本庫(kù)的一個(gè)快照,但是本質(zhì)是一個(gè)指向某個(gè)commit的指針,所以創(chuàng)建和刪除標(biāo)簽都是瞬時(shí)完成的。我們可以利用標(biāo)簽來(lái)獲取不同版本之間的代碼差異,以此為基礎(chǔ)得到較為精準(zhǔn)的回歸測(cè)試范圍。這樣就避免了全量回歸測(cè)試帶來(lái)的時(shí)間和人力上的資源浪費(fèi)。
降低回歸測(cè)試的成本,除了要縮小回歸測(cè)試的范圍,還可以通過(guò)用自動(dòng)化測(cè)試來(lái)代替手工測(cè)試,進(jìn)一步節(jié)約人力成本。本研究采用目前比較主流的自動(dòng)化測(cè)試工具robotframework(以下簡(jiǎn)稱rf),rf是一款開(kāi)源的自動(dòng)化測(cè)試框架,具備很好的可擴(kuò)展性,可以集成很多測(cè)試庫(kù),測(cè)試人員也可以使用python來(lái)創(chuàng)建自己需要的測(cè)試庫(kù),利用已有的關(guān)鍵字,創(chuàng)建自己需要的關(guān)鍵字,形成更高級(jí)別的行為,可以同時(shí)測(cè)試多種類型的客戶端或者接口,可以利用“標(biāo)簽”功能對(duì)測(cè)試用例進(jìn)行分類和有選擇的執(zhí)行。
最后借用jenkins持續(xù)集成平臺(tái)實(shí)現(xiàn)遠(yuǎn)程控制robotframework自動(dòng)化測(cè)試用例的執(zhí)行,可以減少自動(dòng)化回歸測(cè)試中的人工干預(yù),利用夜晚等非工作時(shí)間來(lái)完成測(cè)試任務(wù),大大縮短了回歸測(cè)試階段整體所占用的時(shí)間,進(jìn)一步節(jié)約時(shí)間成本。
本發(fā)明基于git代碼文件檢索粒度的自動(dòng)化回歸測(cè)試方法,包括以下步驟:
第一部分:自動(dòng)獲取git開(kāi)發(fā)代碼主線上有代碼變化的文件。
此部分的目的是要定期找到有代碼變更的文件,確認(rèn)較為精準(zhǔn)的回歸測(cè)試對(duì)象。
git標(biāo)簽管理工具可以提供使用不同標(biāo)簽對(duì)代碼狀態(tài)差異的查詢操作。流程圖如圖1所示,具體步驟如下:
第一步:首先檢查是否到檢測(cè)周期;
第二步:刪除前一次殘留的標(biāo)簽;
第三步:進(jìn)入到git本地倉(cāng)庫(kù)的開(kāi)發(fā)代碼主庫(kù)路徑,打一個(gè)oldtag標(biāo)簽,記錄當(dāng)前舊的代碼狀態(tài);
第四步:執(zhí)行更新代碼命令,此時(shí),由多人協(xié)作分布式開(kāi)發(fā)編寫(xiě)的的遠(yuǎn)程倉(cāng)庫(kù)里的代碼將被更新下載到本地代碼倉(cāng)庫(kù),使得本地代碼狀態(tài)與遠(yuǎn)程倉(cāng)庫(kù)代碼的最新?tīng)顟B(tài)一致;
第五步:此時(shí)再打一個(gè)標(biāo)簽記為newtag,記錄的是當(dāng)前最新的代碼狀態(tài);
第六步:通過(guò)git代碼管理工具自帶的命令gitdiff,輸出新老標(biāo)簽所代表的不同代碼版本之間,有代碼變動(dòng)的部分,打印其文件名。
本次自動(dòng)獲取代碼變化文件的循環(huán)結(jié)束后,實(shí)現(xiàn)的效果是得到一張記錄了在檢測(cè)時(shí)間內(nèi)全部有代碼變化的文件名列表,接下來(lái)將繼續(xù)檢測(cè)是否到檢測(cè)周期,進(jìn)入下一個(gè)循環(huán)。
檢測(cè)周期是自定義設(shè)置的,可以根據(jù)項(xiàng)目的具體情況,評(píng)估最佳的循環(huán)檢測(cè)周期,檢測(cè)的間隔時(shí)間不宜過(guò)長(zhǎng),過(guò)長(zhǎng)則導(dǎo)致無(wú)法保證新變更的代碼得到及時(shí)的回歸測(cè)試;也不宜過(guò)短,過(guò)短則可能會(huì)出現(xiàn)回歸用例執(zhí)行失敗,而失敗的原因可能是因?yàn)槎嗳颂峤淮a時(shí)間有差導(dǎo)致某一功能模塊代碼不完整,而不是因?yàn)榇a本身有問(wèn)題導(dǎo)致的。這會(huì)直接產(chǎn)生用于排查用例執(zhí)行失敗原因的工作量,耗費(fèi)額外的,不能產(chǎn)生價(jià)值的時(shí)間。所以尋找到匹配項(xiàng)目的最合適的檢測(cè)周期,可以最大程度的發(fā)揮回歸測(cè)試方法所達(dá)到的效果。
第二部分:將被捕捉到的有變化的代碼文件轉(zhuǎn)化為受影響的功能特性列表。
此部分的目的是通過(guò)變化的代碼文件名,得到所有被影響的功能特性,為了完成此目的就需要一張規(guī)則表來(lái)描述某一模塊所有的代碼文件和與之對(duì)應(yīng)的功能特性之間的關(guān)系,將其命名為特性規(guī)則表。
特性規(guī)則表中的對(duì)應(yīng)關(guān)系可能是一對(duì)一,一對(duì)多,多對(duì)一,多對(duì)多這四種情況中的一種。例如某一代碼文件的修改可能只影響1個(gè)功能特性,或者影響到多個(gè)功能特性,也可能多個(gè)代碼文件所描述的是同一個(gè)功能特性,還存在多個(gè)代碼文件共同影響著2個(gè)或2個(gè)以上的功能特性。
這一技術(shù)環(huán)節(jié)的輸入是變化的文件名,要求的輸出是被影響的功能特性表,所以這張?zhí)匦砸?guī)則表的直接對(duì)應(yīng)關(guān)系為“文件名:影響特性”。下面來(lái)舉例說(shuō)明,如何實(shí)現(xiàn)上述四種對(duì)應(yīng)關(guān)系:
一對(duì)一關(guān)系:filename1:特性a
一對(duì)多關(guān)系:filename2:特性b、特性c、特性d
多對(duì)一關(guān)系:filename3:特性e
filename4:特性e
多對(duì)多關(guān)系:filename5:特性f、特性g
filename6:特性f、特性g
filename7:特性f、特性g
我們將回歸測(cè)試中所有的文件名一一列出來(lái),無(wú)論文件名與影響特性屬于哪一種對(duì)應(yīng)關(guān)系,特性規(guī)則表都可以用上述方式描述出來(lái)。
特性規(guī)則表制定好以后,還需要一個(gè)腳本工具,將本發(fā)明中第一部分的執(zhí)行結(jié)果——有代碼變化的文件名列表中的文件名與特性規(guī)則表進(jìn)行比對(duì),若存在,則輸出對(duì)應(yīng)的特性,組成一張功能特性列表,即實(shí)現(xiàn)在檢測(cè)周期內(nèi),所有有代碼變化的文件影響到的功能特性列表輸出出來(lái),也就是本次回歸功能點(diǎn)的測(cè)試范圍。
第三部分:將被影響的功能特性轉(zhuǎn)化為需要運(yùn)行的自動(dòng)化回歸用例標(biāo)簽。
此部分的目的是將第二部分輸出的功能特性轉(zhuǎn)化為自動(dòng)化回歸的用例標(biāo)簽,用以篩選用例執(zhí)行,這同樣需要一張規(guī)則表,為了區(qū)分,將此規(guī)則表命名為標(biāo)簽規(guī)則表。
標(biāo)簽規(guī)則表的直接對(duì)應(yīng)關(guān)系為“功能特性:用例標(biāo)簽”,為了簡(jiǎn)化標(biāo)簽規(guī)則表的復(fù)雜度,我們不用單一功能特性作為對(duì)比項(xiàng),直接將第二部分輸出的功能特性組合作為對(duì)比項(xiàng),下面來(lái)舉例說(shuō)明,標(biāo)簽規(guī)則表的組織格式如下(以第二部分輸出的特性為例):
特性a:標(biāo)簽ⅰ
特性b、特性c、特性d:標(biāo)簽ⅱ
特性e:標(biāo)簽ⅲ
特性f、特性g:標(biāo)簽ⅳ
標(biāo)簽規(guī)則表是完全匹配特性列表的,即第二部分輸出的功能特性列表項(xiàng)一定能在此標(biāo)簽規(guī)則表中找到對(duì)應(yīng)的自動(dòng)化用例標(biāo)簽。它同樣需要一個(gè)腳本工具,來(lái)實(shí)現(xiàn)自動(dòng)查找特性,輸出對(duì)應(yīng)標(biāo)簽,組成一張用于回歸測(cè)試的自動(dòng)化用例標(biāo)簽列表。此時(shí)就可以通過(guò)這張用例標(biāo)簽列表來(lái)篩選觸發(fā)自動(dòng)化回歸用例。
第四部分:將上述技術(shù)與jenkins集成,實(shí)現(xiàn)一鍵觸發(fā)。
此部分的目的是將第一部分、第二部分、第三部分中所有的手動(dòng)執(zhí)行操作轉(zhuǎn)化成自動(dòng)執(zhí)行,并通過(guò)jenkins平臺(tái)將其集成起來(lái),實(shí)現(xiàn)一鍵式觸發(fā)。流程圖如圖2所示,下面來(lái)進(jìn)行分別說(shuō)明:
job0_downgitcode:用于首次下載開(kāi)發(fā)代碼,在同一個(gè)構(gòu)建節(jié)點(diǎn)上此任務(wù)只運(yùn)行一次,以后只需要更新代碼即可,不需要重復(fù)下載整個(gè)代碼庫(kù),節(jié)約了后續(xù)任務(wù)的運(yùn)行時(shí)間。注意,下載的開(kāi)發(fā)代碼的存放路徑,不要直接放在此任務(wù)的工作空間下,否則任務(wù)每次運(yùn)行前進(jìn)行臨時(shí)文件清理時(shí),就會(huì)刪除掉已經(jīng)下載的開(kāi)發(fā)代碼,建議放在此任務(wù)工作空間的同級(jí)目錄下。
job1_getchangefileslist:用于獲取到開(kāi)發(fā)主線倉(cāng)庫(kù)的所有代碼有變化的文件名,并將文件名列表輸出到srt_changefileslist.txt,上傳公共文件服務(wù)器,便于查看和取用,例如ftp服務(wù)器。
job2_diffpropertyrole:用于得到代碼變化影響到的功能特性列表,同樣輸出到srt_propertylist.txt,并上傳ftp服務(wù)器。
job3_diffsuitetagrole:用于得到受影響特性所對(duì)應(yīng)的用例標(biāo)簽列表,輸出到srt_suitetaglist.txt,并上傳ftp服務(wù)器。
at_slimsizert:用于通過(guò)用例標(biāo)簽篩選運(yùn)行自動(dòng)化測(cè)試用例,并郵件通知用例執(zhí)行結(jié)果。
job0在同一構(gòu)建節(jié)點(diǎn)上只需要運(yùn)行一次,而job1,job2,job3和at任務(wù)均可多次重復(fù)運(yùn)行,且執(zhí)行順序不變,在jenkins上通過(guò)設(shè)置關(guān)聯(lián)任務(wù),可以將這些任務(wù)串聯(lián)起來(lái),形成的效果是一旦job1執(zhí)行成功,自動(dòng)觸發(fā)job2開(kāi)始運(yùn)行,同理,一旦job2運(yùn)行完成,則自動(dòng)觸發(fā)job3,完成后,接著觸發(fā)at任務(wù)。這樣就可以將所有任務(wù)操作集成起來(lái),實(shí)現(xiàn)了一鍵式觸發(fā)。
此外,job1執(zhí)行的頻率間隔就是代碼檢測(cè)周期,可以通過(guò)設(shè)置job1的自動(dòng)觸發(fā)時(shí)間來(lái)實(shí)現(xiàn)代碼檢測(cè)頻率的調(diào)整。
應(yīng)用本發(fā)明提出的回歸測(cè)試方法與jenkins平臺(tái)集成,形成了一個(gè)完整的自動(dòng)化回歸測(cè)試系統(tǒng),又稱細(xì)粒度自動(dòng)化回歸測(cè)試系統(tǒng),此部分針對(duì)某一備份軟件項(xiàng)目為例,詳細(xì)描述該系統(tǒng)的組成和實(shí)現(xiàn)細(xì)節(jié)。
此自動(dòng)化回歸系統(tǒng)包含5個(gè)任務(wù),每個(gè)任務(wù)的功能作用已在技術(shù)解決方案第四部分內(nèi)容中闡述,此間不再贅述。下面將逐個(gè)描述任務(wù)實(shí)現(xiàn)細(xì)節(jié)。
job1的構(gòu)建腳本如下:
首先設(shè)置開(kāi)發(fā)主線本地倉(cāng)庫(kù)的檢測(cè)路徑;進(jìn)入此路徑下,刪除前一次構(gòu)建殘留的兩個(gè)標(biāo)簽;然后設(shè)置當(dāng)前本地倉(cāng)庫(kù)的狀態(tài)標(biāo)簽slimsizeold,接著從開(kāi)發(fā)主線遠(yuǎn)程倉(cāng)庫(kù)中拉取最新代碼至本地倉(cāng)庫(kù),設(shè)置代碼倉(cāng)庫(kù)更新后的狀態(tài)標(biāo)簽slimsizenew;最后執(zhí)行g(shù)it代碼管理工具自帶的命令gitdiff來(lái)輸出新老標(biāo)簽代表的不同代碼狀態(tài)之間,有代碼變化的文件名,并重定向到一個(gè)txt文件中,將此txt文件拷貝到任務(wù)的工作空間下,利用jenkins的插件,就可以將任務(wù)工作空間中的文件上傳到ftp服務(wù)器上,以供后續(xù)任務(wù)使用。
同時(shí)針對(duì)備份項(xiàng)目實(shí)例,制定檢測(cè)周期為24小時(shí),調(diào)試任務(wù)時(shí),測(cè)試整套任務(wù)的最長(zhǎng)執(zhí)行時(shí)間不超過(guò)4小時(shí),因此設(shè)置此任務(wù)的自動(dòng)發(fā)起時(shí)間為每天凌晨3點(diǎn),這樣測(cè)試工程師每天上班時(shí)就可以查看自動(dòng)化回歸測(cè)試的執(zhí)行結(jié)果,處理相關(guān)問(wèn)題。
job2的構(gòu)建腳本如下所示:
首先從ftp上下載job1產(chǎn)生的有代碼變化的文件名列表到本任務(wù)的工作空間;然后將特性規(guī)則表和對(duì)比腳本從測(cè)試代碼倉(cāng)庫(kù)拷貝出來(lái),也存放到本任務(wù)的工作空間;最后將對(duì)比腳本轉(zhuǎn)化成可執(zhí)行文件,并運(yùn)行,同時(shí)將運(yùn)行結(jié)果上傳到ftp服務(wù)器上。
此任務(wù)涉及三個(gè)文件:變化代碼文件列表srt_changefileslist.txt、特性規(guī)則表propertyrole.txt、對(duì)比腳本change_propertylist.sh。
其中特性規(guī)則表propertyrole.txt可以根據(jù)測(cè)試所需適當(dāng)修改,如下所示:
以某備份軟件中的文件備份項(xiàng)目為例,除了影響特性列和文件名列,還額外添加了模塊列和開(kāi)發(fā)負(fù)責(zé)人列。模塊列用于區(qū)分其他模塊擁有相同的特性,例如操作系統(tǒng)備份也有新建備份,啟動(dòng)備份等功能特性。添加開(kāi)發(fā)負(fù)責(zé)人列,可以在回歸測(cè)試用例執(zhí)行失敗時(shí),快速找到對(duì)應(yīng)的開(kāi)發(fā)負(fù)責(zé)人來(lái)處理問(wèn)題。
對(duì)比腳本change_propertylist.sh中的邏輯如圖3所示,首先逐行讀取特性規(guī)則表propertyrole.txt,若是讀取不到下一行,則對(duì)比操作執(zhí)行完畢;若是還可以讀取到一行內(nèi)容,則將這一行字符以冒號(hào)為分隔符拆分成變量,特性規(guī)則表則被拆分成4個(gè)變量,分別是模塊變量、影響特性變量、文件名變量、開(kāi)發(fā)負(fù)責(zé)人變量;將對(duì)比標(biāo)準(zhǔn)變量,即文件名變量與輸入文件srt_changefileslist.txt逐個(gè)比對(duì),若比對(duì)不成功,則讀取特性規(guī)則表的下一行,若比對(duì)成功,則將對(duì)比結(jié)果變量,即影響特性變量輸出到指定文件中,命名為srt_propertylist.txt。
job3的構(gòu)建腳本如下所示:
與job2的處理邏輯一致,首先從ftp上下載job2產(chǎn)生的功能特性列表到本任務(wù)的工作空間;然后將標(biāo)簽規(guī)則表和對(duì)比腳本從測(cè)試代碼倉(cāng)庫(kù)拷貝出來(lái),存放到本任務(wù)的工作空間;最后將對(duì)比腳本轉(zhuǎn)化成可執(zhí)行文件,并運(yùn)行,同時(shí)將運(yùn)行結(jié)果上傳到ftp服務(wù)器上。
此任務(wù)同樣涉及三個(gè)文件:功能特性列表srt_propertylist.txt、標(biāo)簽規(guī)則表tagrole.txt、對(duì)比腳本change_suitetaglist.sh。
其中標(biāo)簽規(guī)則表tagrole.txt示例如下所示:
同樣做了適當(dāng)?shù)男薷淖冃?,除了影響特性與用例標(biāo)簽的基本對(duì)應(yīng)關(guān)系,還添加了影響特性的所屬模塊,用例標(biāo)簽的備注和測(cè)試負(fù)責(zé)人。
對(duì)比腳本change_suitetaglist.sh的處理邏輯與job2的對(duì)比腳本處理邏輯一致,如圖3所示,不過(guò)此時(shí)的對(duì)比標(biāo)準(zhǔn)變量則是模塊的影響特性,輸入文件是影響特性列表srt_propertylist.txt,對(duì)比結(jié)果變量是用例標(biāo)簽,最終輸出的是由用例標(biāo)簽列表組成的文件srt_suitetaglist.txt。
at任務(wù)是通過(guò)job3產(chǎn)生的標(biāo)簽作為構(gòu)建參數(shù),在自動(dòng)化運(yùn)行節(jié)點(diǎn)環(huán)境上,帶參執(zhí)行調(diào)用命令,并將自動(dòng)化用例的執(zhí)行日志和結(jié)果打印出來(lái)。
以上就是細(xì)粒度自動(dòng)化回歸測(cè)試系統(tǒng)的內(nèi)部組成和實(shí)現(xiàn)細(xì)節(jié),并以某一備份軟件項(xiàng)目為例,優(yōu)化細(xì)粒度回歸方法中的特性規(guī)則表和標(biāo)簽規(guī)則表,使之更加匹配項(xiàng)目,方便測(cè)試人員對(duì)此回歸測(cè)試系統(tǒng)的執(zhí)行與跟蹤。
以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到各種等效的修改或替換,這些修改或替換都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求的保護(hù)范圍為準(zhǔn)。