本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,具體而言,涉及一種腳本測(cè)試方法及裝置。
背景技術(shù):
:Puppet是一種Linux、Unix平臺(tái)的集中配置管理系統(tǒng),使用ruby語(yǔ)言,可管理配置文件、用戶、cron任務(wù)、軟件包、系統(tǒng)服務(wù)等。puppet把這些系統(tǒng)實(shí)體稱之為資源,puppet的設(shè)計(jì)目標(biāo)是簡(jiǎn)化對(duì)這些資源的管理以及妥善處理資源間的依賴關(guān)系。Puppet采用C/S星狀的結(jié)構(gòu),所有的客戶端與一個(gè)或幾個(gè)服務(wù)器交互。每個(gè)客戶端周期的(默認(rèn)半個(gè)小時(shí))向服務(wù)器發(fā)送請(qǐng)求,獲得其最新的配置信息,保證和該配置信息同步。每個(gè)puppet客戶端每半小時(shí)(可以設(shè)置)連接一次服務(wù)器端,下載最新的配置文件,并且嚴(yán)格按照配置文件來(lái)配置客戶端。Puppet的運(yùn)行依賴于我們要編寫一系列的腳本,就同普通語(yǔ)言的腳本一樣,系統(tǒng)會(huì)去運(yùn)行Puppet的腳本去部署環(huán)境。由于在實(shí)際應(yīng)用中,我們大多采用C/S架構(gòu),一份腳本會(huì)影響到所有客戶端環(huán)境的部署,因此我們應(yīng)當(dāng)盡可能得去保證腳本的正確性。傳統(tǒng)的腳本測(cè)試對(duì)手工依賴的程度非常高,手工回歸所有的測(cè)試場(chǎng)景會(huì)消耗大量的時(shí)間。并且Puppet是直接配置系統(tǒng)環(huán)境的,當(dāng)我們需要對(duì)一份腳本進(jìn)行不同參數(shù)環(huán)境下的測(cè)試時(shí),前面的測(cè)試必將對(duì)后面的測(cè)試造成影響。因此如果能夠搭建一套自動(dòng)化測(cè)試框架,自動(dòng)回歸所有的測(cè)試場(chǎng)景并在每次測(cè)試時(shí)保證環(huán)境的干凈尤為重要。目前Puppet的腳本測(cè)試主要有兩種方式:一種是人工在機(jī)器上執(zhí)行測(cè)試,我們會(huì)將最新的代碼從版本倉(cāng)庫(kù)中更新到測(cè)試機(jī),運(yùn)行本地的Puppet腳本。假如本次的Puppet腳本需要配置Rsync(主要功能包括安裝Rsync軟件包,創(chuàng)建Rsync的配置文件,啟動(dòng)Rsync服務(wù)等),在運(yùn)行完該P(yáng)uppet腳本之后,我們會(huì)手動(dòng)去查看Rsync安裝的版本,Rsync服務(wù)是否正常啟動(dòng),端口是否開(kāi)放等這一些信息。另外一種是利用Rspec-puppet來(lái)檢測(cè)。Rspec-puppet是一種基于Rspec的測(cè)試工具,可以在Puppet運(yùn)行之前進(jìn)行相關(guān)資源的檢測(cè),通常的做法是:(1)在每個(gè)模塊中加入Rspec-puppet的測(cè)試目錄,然后在測(cè)試目錄中加入測(cè)試用例;(2)模塊更新后,執(zhí)行模塊中對(duì)應(yīng)的測(cè)試用例進(jìn)行回歸測(cè)試。對(duì)于第一種方案,主要缺點(diǎn)有如下幾點(diǎn):(1)人工回歸工作量大,且都是繁瑣的重復(fù)勞動(dòng);(2)完成一次測(cè)試之后,需要對(duì)環(huán)境做必要的清理,因?yàn)榭赡軐?duì)下次重復(fù)執(zhí)行用例造成影響;(3)假如涉及到需要測(cè)試不同的操作系統(tǒng)版本時(shí),會(huì)需要搭建很多的測(cè)試環(huán)境,浪費(fèi)資源。對(duì)于第二種方案,可以很方便的進(jìn)行回歸測(cè)試,無(wú)需進(jìn)行太多的環(huán)境部署。然而,該方案只是對(duì)Puppet的代碼邏輯進(jìn)行了驗(yàn)證,無(wú)需將Puppet的模塊放置到機(jī)器上進(jìn)行運(yùn)行。正是由于此種方案并未真實(shí)運(yùn)行,因此不能反映Puppet模塊在機(jī)器上的真實(shí)執(zhí)行效果。針對(duì)上述問(wèn)題,目前尚未提出有效的解決方案。技術(shù)實(shí)現(xiàn)要素:本發(fā)明實(shí)施例提供了一種腳本測(cè)試方法及裝置,以至少解決相關(guān)技術(shù)中人工回歸測(cè)試數(shù)據(jù)工作量大的技術(shù)問(wèn)題。根據(jù)本發(fā)明實(shí)施例的一個(gè)方面,提供了一種腳本測(cè)試方法,包括:接收腳本測(cè)試請(qǐng)求,上述請(qǐng)求至少包括待測(cè)腳本代碼;根據(jù)接收到的上述待測(cè)腳本代碼,對(duì)本地緩存的相應(yīng)的待測(cè)腳本代碼進(jìn)行同步更新,上述待測(cè)腳本代碼包含待測(cè)腳本和測(cè)試用例;在測(cè)試執(zhí)行端執(zhí)行上述測(cè)試用例以對(duì)上述待測(cè)腳本進(jìn)行測(cè)試。進(jìn)一步地,在測(cè)試執(zhí)行端執(zhí)行上述測(cè)試用例以對(duì)上述待測(cè)腳本進(jìn)行測(cè)試之前,上述方法還包括:從上述待測(cè)腳本代碼中至少提取出以下內(nèi)容之一:待測(cè)腳本所屬分支的名稱、待測(cè)腳本名稱、以及腳本提交者標(biāo)識(shí);創(chuàng)建以上述待測(cè)腳本所屬分支的名稱命名的第一文件,上述第一文件至少包括上述待測(cè)腳本名稱;將上述第一文件推送至消息隊(duì)列中,在第一時(shí)長(zhǎng)后從上述消息隊(duì)列中提取上述第一文件,上述第一時(shí)長(zhǎng)為前一個(gè)待測(cè)腳本完成測(cè)試的時(shí)長(zhǎng)。進(jìn)一步地,在第一時(shí)長(zhǎng)后從上述消息隊(duì)列中提取上述第一文件之前,上述方法還包括:循環(huán)步驟:依次將上述消息隊(duì)列接收到的推送的文件作為上述第二文件,并執(zhí)行判斷步驟,其中,上述判斷步驟包括:當(dāng)消息隊(duì)列接收到推送的上述第二文件時(shí),判斷上述第二文件的文件名是否與上述第一文件的文件名相同,如果相同,則將上述第二文件中的上述待測(cè)腳本名稱合并于上述第一文件中。進(jìn)一步地,在第一時(shí)長(zhǎng)后從上述消息隊(duì)列中提取上述第一文件之后,上述方法還包括:從上述第一文件中讀取上述待測(cè)腳本名稱;在本地緩存的待測(cè)腳本代碼中查找與上述待測(cè)腳本名稱相對(duì)應(yīng)的待測(cè)腳本和測(cè)試用例;將上述待測(cè)腳本和測(cè)試用例發(fā)送至上述測(cè)試執(zhí)行端。進(jìn)一步地,在測(cè)試執(zhí)行端執(zhí)行上述測(cè)試用例以對(duì)上述待測(cè)腳本進(jìn)行測(cè)試包括:對(duì)上述測(cè)試用例中的部分或全部的測(cè)試用例進(jìn)行掃描,得到測(cè)試用例列表;根據(jù)上述測(cè)試用例列表,調(diào)度用于創(chuàng)建和部署虛擬化開(kāi)發(fā)環(huán)境的預(yù)設(shè)工具或調(diào)度用于具體執(zhí)行測(cè)試的一個(gè)或多個(gè)子測(cè)試機(jī);利用上述預(yù)設(shè)工具或上述子測(cè)試機(jī)執(zhí)行上述測(cè)試用例列表中所列的測(cè)試用例以對(duì)上述待測(cè)腳本進(jìn)行測(cè)試。進(jìn)一步地,上述測(cè)試用例包括:第一類測(cè)試用例和第二類測(cè)試用例,其中,上述第一類測(cè)試用例中的測(cè)試用例每次運(yùn)行時(shí)都需要重新構(gòu)建測(cè)試環(huán)境;上述第二類測(cè)試用例中的所有測(cè)試用例共用一個(gè)相同的測(cè)試環(huán)境。進(jìn)一步地,在測(cè)試執(zhí)行端執(zhí)行上述測(cè)試用例以對(duì)上述待測(cè)腳本進(jìn)行測(cè)試之前,上述方法還包括:將需要執(zhí)行的測(cè)試用例劃分為上述第一類測(cè)試用例和上述第二類測(cè)試用例;將劃分出的上述第一類測(cè)試用例和上述第二類測(cè)試用例分別存儲(chǔ)到第一文件夾和第二文件夾中;分別依次執(zhí)行上述第一文件夾和上述第二文件夾中的測(cè)試用例,以對(duì)上述待測(cè)腳本進(jìn)行測(cè)試,其中,在執(zhí)行上述第一文件夾中的測(cè)試用例時(shí),每次執(zhí)行測(cè)試時(shí),都會(huì)構(gòu)建一個(gè)新的測(cè)試環(huán)境,當(dāng)次測(cè)試完畢后,銷毀或重置該測(cè)試環(huán)境,在執(zhí)行上述第二文件中的測(cè)試用例時(shí),在構(gòu)建一個(gè)測(cè)試環(huán)境后,依次執(zhí)行上述第二文件中的所有的測(cè)試用例,當(dāng)上述第二文件夾中的全部測(cè)試用例執(zhí)行完畢后,銷毀或重置該測(cè)試環(huán)境。進(jìn)一步地,在測(cè)試執(zhí)行端執(zhí)行上述測(cè)試用例以對(duì)上述待測(cè)腳本進(jìn)行測(cè)試之后,上述方法還包括:獲取上述腳本提交者標(biāo)識(shí);根據(jù)獲取的上述腳本提交者標(biāo)識(shí),將對(duì)上述待測(cè)腳本進(jìn)行測(cè)試后生成的測(cè)試報(bào)告反饋給相應(yīng)的腳本提交者。根據(jù)本發(fā)明實(shí)施例的另一方面,還提供了一種腳本測(cè)試裝置,包括:接收單元,用于接收腳本測(cè)試請(qǐng)求,上述請(qǐng)求至少包括待測(cè)腳本代碼;更新單元,用于根據(jù)接收到的上述待測(cè)腳本代碼,對(duì)本地緩存的相應(yīng)的待測(cè)腳本代碼進(jìn)行同步更新,上述待測(cè)腳本代碼包含待測(cè)腳本和測(cè)試用例;測(cè)試單元,用于使得在測(cè)試執(zhí)行端執(zhí)行上述測(cè)試用例以對(duì)上述待測(cè)腳本進(jìn)行測(cè)試。進(jìn)一步地,上述裝置還包括:提取單元,用于在測(cè)試執(zhí)行端執(zhí)行上述測(cè)試用例以對(duì)上述待測(cè)腳本進(jìn)行測(cè)試之前,從上述待測(cè)腳本代碼中至少提取出以下內(nèi)容之一:待測(cè)腳本所屬分支的名稱、待測(cè)腳本名稱、以及腳本提交者標(biāo)識(shí);創(chuàng)建單元,用于創(chuàng)建以上述待測(cè)腳本所屬分支的名稱命名的第一文件,上述第一文件至少包括上述待測(cè)腳本名稱;推送單元,用于將上述第一文件推送至消息隊(duì)列中,在第一時(shí)長(zhǎng)后從上述消息隊(duì)列中提取上述第一文件,上述第一時(shí)長(zhǎng)為前一個(gè)待測(cè)腳本完成測(cè)試的時(shí)長(zhǎng)。進(jìn)一步地,上述裝置還包括:循環(huán)單元,用于在第一時(shí)長(zhǎng)后從上述消息隊(duì)列中提取上述第一文件之前,執(zhí)行循環(huán)步驟,上述循環(huán)步驟包括:依次將上述消息隊(duì)列接收到的推送的文件作為上述第二文件,并執(zhí)行判斷步驟,其中,上述判斷步驟包括:當(dāng)消息隊(duì)列接收到推送的上述第二文件時(shí),判斷上述第二文件的文件名是否與上述第一文件的文件名相同,如果相同,則將上述第二文件中的上述待測(cè)腳本名稱合并于上述第一文件中。進(jìn)一步地,上述裝置還包括:讀取單元,用于在第一時(shí)長(zhǎng)后從上述消息隊(duì)列中提取上述第一文件之后,從上述第一文件中讀取上述待測(cè)腳本名稱;查找單元,用于在本地緩存的待測(cè)腳本代碼中查找與上述待測(cè)腳本名稱相對(duì)應(yīng)的待測(cè)腳本和測(cè)試用例;發(fā)送單元,用于將上述待測(cè)腳本和測(cè)試用例發(fā)送至上述測(cè)試執(zhí)行端。進(jìn)一步地,上述測(cè)試單元包括:掃描模塊,用于對(duì)上述測(cè)試用例中的部分或全部的測(cè)試用例進(jìn)行掃描,得到測(cè)試用例列表;調(diào)度模塊,用于根據(jù)上述測(cè)試用例列表,調(diào)度用于創(chuàng)建和部署虛擬化開(kāi)發(fā)環(huán)境的預(yù)設(shè)工具或調(diào)度用于具體執(zhí)行測(cè)試的一個(gè)或多個(gè)子測(cè)試機(jī);測(cè)試模塊,用于利用上述預(yù)設(shè)工具或上述子測(cè)試機(jī)執(zhí)行上述測(cè)試用例列表中所列的測(cè)試用例以對(duì)上述待測(cè)腳本進(jìn)行測(cè)試。進(jìn)一步地,上述測(cè)試用例包括:第一類測(cè)試用例和第二類測(cè)試用例,其中,上述第一類測(cè)試用例中的測(cè)試用例每次運(yùn)行時(shí)都需要重新構(gòu)建測(cè)試環(huán)境;上述第二類測(cè)試用例中的所有測(cè)試用例共用一個(gè)相同的測(cè)試環(huán)境。進(jìn)一步地,上述裝置還包括:劃分單元,用于在測(cè)試執(zhí)行端執(zhí)行上述測(cè)試用例以對(duì)上述待測(cè)腳本進(jìn)行測(cè)試之前,將需要執(zhí)行的測(cè)試用例劃分為上述第一類測(cè)試用例和上述第二類測(cè)試用例;存儲(chǔ)單元,用于將劃分出的上述第一類測(cè)試用例和上述第二類測(cè)試用例分別存儲(chǔ)到第一文件夾和第二文件夾中;執(zhí)行單元,用于分別依次執(zhí)行上述第一文件夾和上述第二文件夾中的測(cè)試用例,以對(duì)上述待測(cè)腳本進(jìn)行測(cè)試,其中,在執(zhí)行上述第一文件夾中的測(cè)試用例時(shí),每次執(zhí)行測(cè)試時(shí),都會(huì)構(gòu)建一個(gè)新的測(cè)試環(huán)境,當(dāng)次測(cè)試完畢后,銷毀或重置該測(cè)試環(huán)境,在執(zhí)行上述第二文件中的測(cè)試用例時(shí),在構(gòu)建一個(gè)測(cè)試環(huán)境后,依次執(zhí)行上述第二文件中的所有的測(cè)試用例,當(dāng)上述第二文件夾中的全部測(cè)試用例執(zhí)行完畢后,銷毀或重置該測(cè)試環(huán)境。進(jìn)一步地,上述裝置還包括:獲取單元,用于在測(cè)試執(zhí)行端執(zhí)行上述測(cè)試用例以對(duì)上述待測(cè)腳本進(jìn)行測(cè)試之后,獲取上述腳本提交者標(biāo)識(shí);反饋單元,用于根據(jù)獲取的上述腳本提交者標(biāo)識(shí),將對(duì)上述待測(cè)腳本進(jìn)行測(cè)試后生成的測(cè)試報(bào)告反饋給相應(yīng)的腳本提交者。在本發(fā)明實(shí)施例中,采用自動(dòng)回歸測(cè)試數(shù)據(jù)的方式,通過(guò)接收腳本測(cè)試請(qǐng)求,請(qǐng)求至少包括待測(cè)腳本代碼;根據(jù)接收到的待測(cè)腳本代碼,對(duì)本地緩存的相應(yīng)的待測(cè)腳本代碼進(jìn)行同步更新,待測(cè)腳本代碼包含待測(cè)腳本和測(cè)試用例;在測(cè)試執(zhí)行端執(zhí)行測(cè)試用例以對(duì)待測(cè)腳本進(jìn)行測(cè)試,達(dá)到了測(cè)試結(jié)束時(shí)自動(dòng)向測(cè)試人員回歸測(cè)試數(shù)據(jù)的目的,從而實(shí)現(xiàn)了降低測(cè)試人員工作量,減輕測(cè)試人員工作負(fù)擔(dān)的技術(shù)效果,進(jìn)而解決了相關(guān)技術(shù)中人工回歸測(cè)試數(shù)據(jù)工作量大的技術(shù)問(wèn)題。附圖說(shuō)明此處所說(shuō)明的附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā)明的示意性實(shí)施例及其說(shuō)明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:圖1是根據(jù)本發(fā)明實(shí)施例的一種可選的腳本測(cè)試方法的流程圖;圖2是根據(jù)本發(fā)明實(shí)施例的一種可選的腳本測(cè)試系統(tǒng)的架構(gòu)圖;圖3是根據(jù)本發(fā)明實(shí)施例的一種可選的觸發(fā)測(cè)試方法的流程圖;圖4是根據(jù)本發(fā)明實(shí)施例的一種可選的代碼同步與測(cè)試觸發(fā)的示意圖;圖5是根據(jù)本發(fā)明實(shí)施例的另一種可選的腳本測(cè)試系統(tǒng)的架構(gòu)圖;圖6是根據(jù)本發(fā)明實(shí)施例的一種可選的隊(duì)列調(diào)度方式的示意圖;圖7是根據(jù)本發(fā)明實(shí)施例的一種可選的執(zhí)行測(cè)試的示意圖;圖8是根據(jù)本發(fā)明實(shí)施例的一種可選的腳本測(cè)試裝置的示意圖。具體實(shí)施方式為了使本
技術(shù)領(lǐng)域:
的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分的實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。需要說(shuō)明的是,本發(fā)明的說(shuō)明書和權(quán)利要求書及上述附圖中的術(shù)語(yǔ)“第一”、“第二”等是用于區(qū)別類似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本發(fā)明的實(shí)施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤?。此外,術(shù)語(yǔ)“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過(guò)程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒(méi)有清楚地列出的或?qū)τ谶@些過(guò)程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。以下將詳細(xì)介紹本申請(qǐng)所涉及的縮略語(yǔ)和關(guān)鍵術(shù)語(yǔ)定義:Vagrant:一種基于Ruby的工具,用于創(chuàng)建和部署虛擬化開(kāi)發(fā)環(huán)境。它使用Oracle的開(kāi)源VirtualBox虛擬化系統(tǒng),使用Chef創(chuàng)建自動(dòng)化虛擬環(huán)境。Beaker:PuppetLabs中的一款自動(dòng)化測(cè)試工具,用于測(cè)試大型復(fù)雜的puppet系統(tǒng)。它可以通過(guò)本地的虛擬機(jī)或者云平臺(tái)來(lái)搭建測(cè)試環(huán)境,一旦測(cè)試環(huán)境運(yùn)行起來(lái),Beaker可以以重復(fù)一致的方式來(lái)執(zhí)行測(cè)試用例。Beaker-Rspec:一種集成了Beaker及Rspec和severspec這類檢測(cè)工具的套件,可以比較方便的運(yùn)行puppet及進(jìn)行結(jié)果檢測(cè)。Git:一個(gè)分布式版本控制系統(tǒng),可以有效、高速的處理從很小到非常大的項(xiàng)目版本管理。環(huán)境變量:指在操作系統(tǒng)中用來(lái)指定操作系統(tǒng)運(yùn)行環(huán)境的一些參數(shù),如:臨時(shí)文件夾位置和系統(tǒng)文件夾位置等。環(huán)境變量是在操作系統(tǒng)中一個(gè)具有特定名字的對(duì)象,它包含了一個(gè)或者多個(gè)應(yīng)用程序所將使用到的信息。例如Windows和DOS操作系統(tǒng)中的path環(huán)境變量,當(dāng)要求系統(tǒng)運(yùn)行一個(gè)程序而沒(méi)有告訴它程序所在的完整路徑時(shí),系統(tǒng)除了在當(dāng)前目錄下面尋找此程序外,還應(yīng)到path中指定的路徑去找。用戶通過(guò)設(shè)置環(huán)境變量,來(lái)更好的運(yùn)行進(jìn)程。實(shí)施例1根據(jù)本發(fā)明實(shí)施例,提供了一種腳本測(cè)試方法的方法實(shí)施例,需要說(shuō)明的是,在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。圖1是根據(jù)本發(fā)明實(shí)施例的一種可選的腳本測(cè)試方法的流程圖,如圖1所示,該方法包括如下步驟:步驟S102,接收腳本測(cè)試請(qǐng)求,請(qǐng)求至少包括待測(cè)腳本代碼;步驟S104,根據(jù)接收到的待測(cè)腳本代碼,對(duì)本地緩存的相應(yīng)的待測(cè)腳本代碼進(jìn)行同步更新,待測(cè)腳本代碼包含待測(cè)腳本和測(cè)試用例;步驟S106,在測(cè)試執(zhí)行端執(zhí)行測(cè)試用例以對(duì)待測(cè)腳本進(jìn)行測(cè)試。需要說(shuō)明的是,上述方案可以應(yīng)用于Puppet腳本的自動(dòng)測(cè)試。例如,實(shí)施時(shí),程序員新增或者修改了Puppet腳本中的某些代碼(以下統(tǒng)稱為更新了Puppet腳本代碼)后,會(huì)將這些代碼發(fā)送給,Git倉(cāng)庫(kù),這樣,在測(cè)試開(kāi)始時(shí),Git倉(cāng)庫(kù)可以發(fā)送腳本測(cè)試請(qǐng)求給測(cè)試執(zhí)行端,并在該腳本測(cè)試請(qǐng)求中攜帶更新了的Puppet腳本代碼,測(cè)試執(zhí)行端在接收該腳本測(cè)試請(qǐng)求后,會(huì)根據(jù)接收到的待測(cè)腳本代碼,對(duì)之前本地緩存的相應(yīng)的待測(cè)腳本代碼進(jìn)行同步更新,并執(zhí)行Puppet腳本代碼中的測(cè)試用例以對(duì)Puppet腳本代碼中的待測(cè)腳本進(jìn)行測(cè)試。使用該技術(shù)方案時(shí),由于測(cè)試結(jié)束后,無(wú)需人工統(tǒng)計(jì)測(cè)試數(shù)據(jù),而是由系統(tǒng)自動(dòng)生成測(cè)試報(bào)告,并向Puppet腳本提交者返回待測(cè)Puppet腳本的測(cè)試結(jié)果。以下將以Puppet腳本測(cè)試為例,詳細(xì)闡述本發(fā)明。如圖2所示,在整個(gè)自動(dòng)化測(cè)試過(guò)程中,測(cè)試的發(fā)起人為開(kāi)發(fā)者(即Puppet腳本提交者),測(cè)試流程總共分為三步,分別為:(1)開(kāi)發(fā)者更新Puppet腳本代碼,并將其提交給Git倉(cāng)庫(kù);(2)Git倉(cāng)庫(kù)將更新的Puppet腳本代碼同步給測(cè)試機(jī),并觸發(fā)測(cè)試機(jī)開(kāi)始測(cè)試;(3)測(cè)試機(jī)向開(kāi)發(fā)者提供測(cè)試結(jié)果(如以測(cè)試報(bào)告的形式)。其具體流程如圖3所示。具體地,整個(gè)測(cè)試的最開(kāi)始就是程序員更新了腳本代碼并提交到Git倉(cāng)庫(kù)中,Git倉(cāng)庫(kù)所需要做的一個(gè)工作就是捕捉到程序員提交的代碼并將其提交的分支代碼更新到測(cè)試機(jī)的測(cè)試環(huán)境并觸發(fā)測(cè)試流程。代碼更新本文利用Git的Hook功能,本申請(qǐng)定義了一個(gè)Post-receive的Hook,同時(shí)在測(cè)試機(jī)上開(kāi)啟了一個(gè)Rsync的守護(hù)進(jìn)程,Post-receive可以將提交的分支代碼自動(dòng)Rsync到測(cè)試機(jī)中。測(cè)試觸發(fā)主要利用了Git的Webhook功能,Webhook允許用戶在git倉(cāng)庫(kù)中對(duì)某一類的事件建立觸發(fā)機(jī)制。當(dāng)某一類事件(event)被觸發(fā)時(shí),git倉(cāng)庫(kù)會(huì)向在git上配置的URL發(fā)送一個(gè)POST請(qǐng)求。Webhook可用于更新遠(yuǎn)端的鏡像,觸發(fā)CI構(gòu)建,甚至可以用于來(lái)自動(dòng)搭建生產(chǎn)環(huán)境。event類型說(shuō)明如表1所示。表1Event類型說(shuō)明Push當(dāng)向git倉(cāng)庫(kù)push代碼時(shí)Tagpush當(dāng)向repo打標(biāo)簽時(shí)Comment提交commint信息IssueIssue創(chuàng)建,更新,刪除時(shí)Mergerequest有Merge請(qǐng)求時(shí)BuildBuild狀態(tài)改變時(shí)在測(cè)試機(jī)上,可以利用Ruby的Webrick搭建了一個(gè)簡(jiǎn)易的Http服務(wù)器,接收來(lái)自于Git的Post消息,進(jìn)而觸發(fā)自動(dòng)化測(cè)試。整個(gè)更新代碼和觸發(fā)機(jī)制如下圖4所示。其中,整個(gè)代碼更新及觸發(fā)測(cè)試的流程將在下文中詳細(xì)闡述,在此不再贅述。測(cè)試完畢,測(cè)試機(jī)的報(bào)告發(fā)送模塊可以自動(dòng)將報(bào)告發(fā)送給提交者。需要說(shuō)明的是,前述由提交者提到Webhook中的待測(cè)腳本,其內(nèi)包含有提交者的相關(guān)信息,因此可以將其中的提交者信息提取出來(lái),將測(cè)試報(bào)告發(fā)送給他即可。這樣子就實(shí)現(xiàn)了誰(shuí)提交誰(shuí)接收測(cè)試報(bào)告的功能。一般地,Puppet腳本模塊需要支持多個(gè)版本的操作系統(tǒng),Debian(6,7,8)32/64位以及Freebsd9,每次模塊更新不僅要回歸,還要在多個(gè)版本系統(tǒng)回歸,回歸工作量巨大。使用本發(fā)明提供的上述技術(shù)方案,可以使測(cè)試人員從這些重復(fù)繁瑣的回歸測(cè)試中解脫出來(lái)。通過(guò)本發(fā)明實(shí)施例中,達(dá)到了測(cè)試結(jié)束時(shí)自動(dòng)向測(cè)試人員回歸測(cè)試數(shù)據(jù)的目的,從而實(shí)現(xiàn)了降低測(cè)試人員工作量,減輕測(cè)試人員工作負(fù)擔(dān)的技術(shù)效果,進(jìn)而解決了相關(guān)技術(shù)中人工回歸測(cè)試數(shù)據(jù)工作量大的技術(shù)問(wèn)題。作為一種可選的實(shí)施例,在測(cè)試執(zhí)行端執(zhí)行測(cè)試用例以對(duì)待測(cè)腳本進(jìn)行測(cè)試之前,上述方法還包括:從待測(cè)腳本代碼中至少提取出以下內(nèi)容之一:待測(cè)腳本所屬分支的名稱、待測(cè)腳本名稱、以及腳本提交者標(biāo)識(shí);創(chuàng)建以待測(cè)腳本所屬分支的名稱命名的第一文件,第一文件至少包括待測(cè)腳本名稱;將第一文件推送至消息隊(duì)列中,在第一時(shí)長(zhǎng)后從消息隊(duì)列中提取第一文件,第一時(shí)長(zhǎng)為前一個(gè)待測(cè)腳本完成測(cè)試的時(shí)長(zhǎng)。在測(cè)試過(guò)程中,由于以待測(cè)腳本所屬分支的名稱命名創(chuàng)建了對(duì)應(yīng)的文件,這樣,若待測(cè)腳本所屬分支中的相同或不同待測(cè)腳本在更新之后被重復(fù)提交,則可以避免在后提交的待測(cè)腳本代碼的測(cè)試流程被觸發(fā)而導(dǎo)致在前提交的待測(cè)腳本代碼的測(cè)試流程被中斷,從而防止測(cè)試出錯(cuò)甚至不能正常進(jìn)行。作為一種可選的實(shí)施例,在第一時(shí)長(zhǎng)后從消息隊(duì)列中提取第一文件之前,上述方法還包括:循環(huán)步驟:依次將消息隊(duì)列接收到的推送的文件作為第二文件,并執(zhí)行判斷步驟,其中,判斷步驟包括:當(dāng)消息隊(duì)列接收到推送的第二文件時(shí),判斷第二文件的文件名是否與第一文件的文件名相同,如果相同,則將第二文件中的待測(cè)腳本名稱合并于第一文件中。作為一種可選的實(shí)施例,在第一時(shí)長(zhǎng)后從消息隊(duì)列中提取第一文件之后,上述方法還包括:從第一文件中讀取待測(cè)腳本名稱;在本地緩存的待測(cè)腳本代碼中查找與待測(cè)腳本名稱相對(duì)應(yīng)的待測(cè)腳本和測(cè)試用例;將待測(cè)腳本和測(cè)試用例發(fā)送至測(cè)試執(zhí)行端。例如,系統(tǒng)開(kāi)啟時(shí)會(huì)開(kāi)啟兩個(gè)線程,一個(gè)線程為Webrick,另外一個(gè)線程為Run,如圖6所示。Webrick用于接收來(lái)自于Git倉(cāng)庫(kù)發(fā)送的腳本測(cè)試請(qǐng)求,提取出更新的分支,更新的文件以及提交者,之后會(huì)將提交者及分支名作為一個(gè)消息推送到隊(duì)列中,同時(shí)會(huì)以分支名創(chuàng)建一個(gè)文件,文件中包含當(dāng)前更新的模塊。在另外一端的Run進(jìn)程中,會(huì)不斷的從隊(duì)列中取出消息體,同時(shí)讀取隊(duì)列對(duì)應(yīng)文件中的模塊信息(即待測(cè)腳本),然后執(zhí)行對(duì)應(yīng)模塊信息的測(cè)試。前文已經(jīng)提到過(guò),Post-receive會(huì)將代碼更新到測(cè)試機(jī)中,而測(cè)試機(jī)中放置代碼的地方就是緩存區(qū),緩存區(qū)中的代碼按照分支來(lái)分開(kāi)存放,以保證不同分支代碼的獨(dú)立性。測(cè)試用例和待測(cè)腳本放置到工作區(qū)后,Run進(jìn)程會(huì)將測(cè)試用例進(jìn)行掃描,得到一份用例列表,然后根據(jù)用例列表來(lái)調(diào)度Vagrant執(zhí)行用例,返回測(cè)試的結(jié)果。為了測(cè)試Puppet真實(shí)的執(zhí)行情況,并且在Puppet運(yùn)行后系統(tǒng)環(huán)境變臟的情況下,保證第二次運(yùn)行時(shí)環(huán)境是干凈的,在每次運(yùn)行時(shí),可以通過(guò)開(kāi)啟一個(gè)新的Vagrant虛擬機(jī),直接在虛擬機(jī)中運(yùn)行相關(guān)的測(cè)試模塊,通過(guò)驗(yàn)證虛擬機(jī)中實(shí)際的部署效果來(lái)保證與線上機(jī)器運(yùn)行結(jié)果一致,同時(shí)一個(gè)新的虛擬機(jī)能夠保證本次測(cè)試不受之前測(cè)試環(huán)境的干擾。作為一種可選的實(shí)施例,在測(cè)試執(zhí)行端執(zhí)行測(cè)試用例以對(duì)待測(cè)腳本進(jìn)行測(cè)試包括:對(duì)測(cè)試用例中的部分或全部的測(cè)試用例進(jìn)行掃描,得到測(cè)試用例列表;根據(jù)測(cè)試用例列表,調(diào)度用于創(chuàng)建和部署虛擬化開(kāi)發(fā)環(huán)境的預(yù)設(shè)工具或調(diào)度用于具體執(zhí)行測(cè)試的一個(gè)或多個(gè)子測(cè)試機(jī);利用預(yù)設(shè)工具或子測(cè)試機(jī)執(zhí)行測(cè)試用例列表中所列的測(cè)試用例以對(duì)待測(cè)腳本進(jìn)行測(cè)試。也即,測(cè)試用例和代碼放置到工作區(qū)后,Run進(jìn)程會(huì)將測(cè)試用例進(jìn)行掃描,得到一份用例列表,然后根據(jù)用例列表來(lái)調(diào)度Vagrant執(zhí)行相應(yīng)的測(cè)試用例,并返回測(cè)試結(jié)果。例如,可代替地,本發(fā)明不僅可以利用Git的Webhook功能來(lái)觸發(fā)測(cè)試,一種更好的方式可以是利用Jenkins搭建一臺(tái)Master,來(lái)監(jiān)控腳本代碼的提交,通過(guò)Master來(lái)控制下面各個(gè)slave測(cè)試機(jī)的測(cè)試。通過(guò)后一種方式能夠很方便的進(jìn)行代碼統(tǒng)一管理及測(cè)試調(diào)度,同時(shí)更容易進(jìn)行擴(kuò)展,擴(kuò)展的結(jié)果圖如圖5所示。作為一種可選的實(shí)施例,測(cè)試用例包括:第一類測(cè)試用例和第二類測(cè)試用例,其中,第一類測(cè)試用例中的測(cè)試用例每次運(yùn)行時(shí)都需要重新構(gòu)建測(cè)試環(huán)境;第二類測(cè)試用例中的所有測(cè)試用例共用一個(gè)相同的測(cè)試環(huán)境。一般地,在腳本測(cè)試過(guò)程中,可能有如下兩類測(cè)試用例:(1)每次運(yùn)行都需要重新構(gòu)建測(cè)試環(huán)境,因?yàn)橥惖臏y(cè)試用例運(yùn)行可能對(duì)下次的運(yùn)行造成干擾;(2)在運(yùn)行時(shí)無(wú)需重新構(gòu)建測(cè)試環(huán)境。這樣,就可以構(gòu)建一次測(cè)試環(huán)境,運(yùn)行一批同類型的測(cè)試用例。作為一種可選的實(shí)施例,在測(cè)試執(zhí)行端執(zhí)行測(cè)試用例以對(duì)待測(cè)腳本進(jìn)行測(cè)試之前,方法還包括:將需要執(zhí)行的測(cè)試用例劃分為第一類測(cè)試用例和第二類測(cè)試用例;將劃分出的第一類測(cè)試用例和第二類測(cè)試用例分別存儲(chǔ)到第一文件夾和第二文件夾中;分別依次執(zhí)行第一文件夾和第二文件夾中的測(cè)試用例,以對(duì)待測(cè)腳本進(jìn)行測(cè)試,其中,在執(zhí)行第一文件夾中的測(cè)試用例時(shí),每次執(zhí)行測(cè)試時(shí),都會(huì)構(gòu)建一個(gè)新的測(cè)試環(huán)境,當(dāng)次測(cè)試完畢后,銷毀或重置該測(cè)試環(huán)境,在執(zhí)行第二文件中的測(cè)試用例時(shí),在構(gòu)建一個(gè)測(cè)試環(huán)境后,依次執(zhí)行第二文件中的所有的測(cè)試用例,當(dāng)?shù)诙募A中的全部測(cè)試用例執(zhí)行完畢后,銷毀或重置該測(cè)試環(huán)境。實(shí)施時(shí),在執(zhí)行測(cè)試用例之前,可以先將所有的測(cè)試用例分組,實(shí)現(xiàn)一組測(cè)試用例啟動(dòng)一次Vagrant,以及單個(gè)測(cè)試用例啟停一次Vagrant。作為一種可選的實(shí)施例,在測(cè)試區(qū)執(zhí)行測(cè)試用例以對(duì)待測(cè)腳本進(jìn)行測(cè)試之前,上述方法還包括:將需要執(zhí)行的測(cè)試用例劃分為第一類測(cè)試用例和第二類測(cè)試用例;將劃分出的第一類測(cè)試用例和第二類測(cè)試用例分別存儲(chǔ)到第一文件夾和第二文件夾中,其中,在將劃分出的第一類測(cè)試用例和第二類測(cè)試用例分別存儲(chǔ)到第一文件夾和第二文件夾中之后,在測(cè)試區(qū)分別執(zhí)行第一文件夾和第二文件夾中的測(cè)試用例,以對(duì)待測(cè)腳本進(jìn)行測(cè)試。具體地,本申請(qǐng)將測(cè)試用例進(jìn)行分類時(shí),是采用用不同前綴名的文件夾來(lái)區(qū)分并存放不同類型的測(cè)試用例。例如,在本申請(qǐng)中,主要有兩種類型的文件夾:(1)以new_開(kāi)頭的文件夾:運(yùn)行此類文件夾下的測(cè)試用例時(shí),每次運(yùn)行都會(huì)開(kāi)啟一個(gè)新的測(cè)試環(huán)境,所以此類測(cè)試環(huán)境是最消耗時(shí)間的。(2)以agg_開(kāi)頭的文件夾:運(yùn)行此文件夾下的測(cè)試用例時(shí),只會(huì)開(kāi)啟一個(gè)測(cè)試環(huán)境,然后依次運(yùn)行完所有的測(cè)試用例,最后銷毀掉測(cè)試環(huán)境。一個(gè)腳本模塊下面可以有多個(gè)agg_開(kāi)頭的文件夾,運(yùn)行時(shí),一組測(cè)試用例(如一個(gè)agg_開(kāi)頭的文件夾下的測(cè)試用例)創(chuàng)建一次測(cè)試環(huán)境。比如某模塊下存在agg_test1,agg_test2兩個(gè)目錄,則會(huì)在測(cè)試agg_test1時(shí)創(chuàng)建一個(gè)測(cè)試環(huán)境,測(cè)試完其中的測(cè)試用例,銷毀對(duì)應(yīng)的測(cè)試環(huán)境,然后接著創(chuàng)建新的測(cè)試環(huán)境以測(cè)試agg_test2中的測(cè)試用例,然后銷毀對(duì)應(yīng)的測(cè)試環(huán)境。對(duì)于new_開(kāi)頭的文件夾和agg_開(kāi)頭的文件夾,可以實(shí)現(xiàn)上述兩種功能主要依賴于BEAKER_provision和BEAKER_destroy兩個(gè)環(huán)境變量。對(duì)于new_文件夾下的用例,每次運(yùn)行Beaker時(shí),ENV["BEAKER_provision"]="no",ENV["BEAKER_destroy"]="no"。保證每次測(cè)試用例的運(yùn)行前創(chuàng)建虛擬機(jī),測(cè)試完之后銷毀虛擬機(jī)。對(duì)于agg_文件夾下的用例,在第一個(gè)用例執(zhí)行時(shí),ENV["BEAKER_provision"]="yes",ENV["BEAKER_destroy"]="no"表示第一個(gè)用例需要?jiǎng)?chuàng)建虛擬機(jī),但是不銷毀。中間的用例執(zhí)行時(shí)兩個(gè)變量都為"no",表示不創(chuàng)建也不銷毀,直接運(yùn)行。最后一個(gè)用例運(yùn)行時(shí),ENV["BEAKER_provision"]="no",ENV["BEAKER_destroy"]="yes"表示不創(chuàng)建虛擬機(jī),但是執(zhí)行完之后需要銷毀。通過(guò)上述方式,可以有計(jì)劃的對(duì)測(cè)試用例進(jìn)行分組,減小測(cè)試所需的時(shí)間。作為一種可選的實(shí)施例,開(kāi)啟測(cè)試流程的步驟包括:檢測(cè)是否接收了測(cè)試流程觸發(fā)請(qǐng)求,測(cè)試流程觸發(fā)請(qǐng)求用于觸發(fā)測(cè)試程序以開(kāi)啟測(cè)試流程;若是,則開(kāi)啟測(cè)試流程。為了使整個(gè)自動(dòng)化測(cè)試流程更加具有效率,本發(fā)明還解決了如下問(wèn)題:即如何合并多次提交,集中一次進(jìn)行測(cè)試,節(jié)省測(cè)試時(shí)間。作為一種可選的實(shí)施例,在檢測(cè)到已接收了測(cè)試流程觸發(fā)請(qǐng)求之后,上述方法還包括:從測(cè)試流程觸發(fā)請(qǐng)求中提取更新的腳本分支及其分支名稱;創(chuàng)建與腳本分支對(duì)應(yīng)的文件,其中,文件中包含當(dāng)前更新的腳本分支的模塊;將分支名稱作為一個(gè)消息體推送到隊(duì)列中,在測(cè)試區(qū)執(zhí)行測(cè)試用例以對(duì)待測(cè)腳本進(jìn)行測(cè)試包括:從隊(duì)列中讀取消息體;從文件中讀取當(dāng)前更新的腳本分支的模塊信息;對(duì)模塊信息對(duì)應(yīng)的模塊進(jìn)行測(cè)試。在系統(tǒng)開(kāi)啟時(shí),會(huì)開(kāi)啟兩個(gè)線程,一個(gè)線程為Webrick,另外一個(gè)線程Run,如圖6所示。Webrick用于接收來(lái)自于Git倉(cāng)庫(kù)的接收請(qǐng)求,提取出更新的分支,更新的文件以及提交者。之后會(huì)將提交者及分支名作為一個(gè)消息推送到隊(duì)列中,同時(shí)會(huì)以分支名創(chuàng)建一個(gè)文件,文件中包含當(dāng)前更新的模塊。在另外一端的Run進(jìn)程中,會(huì)不斷的從隊(duì)列中取出消息體,同時(shí)讀取隊(duì)列對(duì)應(yīng)文件中的模塊信息,然后執(zhí)行對(duì)應(yīng)模塊的測(cè)試。這里引入隊(duì)列,并且還為相應(yīng)的隊(duì)列創(chuàng)建了一個(gè)文件夾,主要是下面兩方面的考慮:(1)隊(duì)列可以防止多次提交之間的干擾。如果不加入隊(duì)列,而是直接在Webrick中觸發(fā)測(cè)試,可能出現(xiàn)的一種情況就是上一次的測(cè)試還沒(méi)有完成,下一次的提交又重新觸發(fā)了一次測(cè)試。現(xiàn)階段的系統(tǒng)暫時(shí)不支持多個(gè)Vagrant的實(shí)例同時(shí)運(yùn)行,所以第二次觸發(fā)的測(cè)試會(huì)直接銷毀掉之前的Vagrant實(shí)例,導(dǎo)致運(yùn)行的中斷。(2)加入隊(duì)列文件可以做到同一個(gè)分支多次提交一次測(cè)試。在將新更新的分支提交到測(cè)試隊(duì)列的同時(shí),系統(tǒng)會(huì)創(chuàng)建一個(gè)以該分支為名的文件,文件中會(huì)寫入當(dāng)前更新的模塊。假如此分支在測(cè)試之前又被更新,則系統(tǒng)會(huì)將此次更新的模塊寫入到文件中。例如Centos_branch分支更新了Mysql,Sysenv模塊,則會(huì)將Centos_branch放入到隊(duì)列中,同時(shí)創(chuàng)建一個(gè)名為Centos_branch的文件,文件的內(nèi)容為Mysql,Sysenv。第二次Centos_branch上又有新的模塊Apache更新,則此次Centos_branch文件會(huì)被更新為Apache,Mysql,Sysenv。在隊(duì)列中彈出Centos_branch分支時(shí),以最新的信息進(jìn)行測(cè)試。這樣子就實(shí)現(xiàn)了多次提交合并測(cè)試的功效。Run進(jìn)程從隊(duì)列中取出消息體后,會(huì)觸發(fā)一次測(cè)試的運(yùn)行。首先,會(huì)從代碼緩存區(qū)中將當(dāng)前需要測(cè)試的分支,例如之前說(shuō)的Centos_branch分支取出來(lái),然后將代碼同步到工作區(qū)。由于測(cè)試用例是放置在代碼中的,所以這里會(huì)做一個(gè)工作就是將代碼和用例進(jìn)行分離,如圖7所示。本發(fā)明利用Beaker-rspec作為核心的測(cè)試技術(shù),在此基礎(chǔ)上以Vagrant作為測(cè)試的載體來(lái)運(yùn)行測(cè)試,解決多個(gè)操作系統(tǒng)的測(cè)試問(wèn)題。開(kāi)發(fā)人員新增或者修改模塊,提交到Git之后自動(dòng)觸發(fā)測(cè)試的運(yùn)行,多次不同的提交會(huì)被放置到調(diào)度隊(duì)列中依次執(zhí)行,相同的提交則會(huì)進(jìn)行合并節(jié)約測(cè)試的時(shí)間。同時(shí)我們對(duì)測(cè)試用例進(jìn)行了分組,不同分組采用不同的測(cè)試方式來(lái)提高測(cè)試的效率。最后的測(cè)試報(bào)告會(huì)反饋給相關(guān)人員。本發(fā)明技術(shù)方案帶來(lái)的有益效果如下:本發(fā)明在整體上可以用自動(dòng)化測(cè)試來(lái)代替人工來(lái)進(jìn)行回歸,節(jié)約測(cè)試時(shí)間,同時(shí)可以做到每次測(cè)試環(huán)境的干凈性,保證測(cè)試的準(zhǔn)確性。同時(shí)本發(fā)明還有如下幾點(diǎn)有效收益:(1)能夠根據(jù)程序提交,更新最新的分支代碼,觸發(fā)測(cè)試并發(fā)送測(cè)試結(jié)果,無(wú)需任何手工干預(yù);(2)能夠合并多次相同的測(cè)試請(qǐng)求,避免同樣的測(cè)試任務(wù)多次進(jìn)行執(zhí)行,節(jié)省測(cè)試的時(shí)間;(3)通過(guò)將用例進(jìn)行分組,一組用例構(gòu)建一次測(cè)試環(huán)境,避免一組頻繁構(gòu)建測(cè)試環(huán)境,縮短測(cè)試時(shí)間。作為一種可選的實(shí)施例,在測(cè)試執(zhí)行端執(zhí)行測(cè)試用例以對(duì)待測(cè)腳本進(jìn)行測(cè)試之后,上述方法還包括:獲取腳本提交者標(biāo)識(shí);根據(jù)獲取的腳本提交者標(biāo)識(shí),將對(duì)待測(cè)腳本進(jìn)行測(cè)試后生成的測(cè)試報(bào)告反饋給相應(yīng)的腳本提交者。使用該技術(shù)方案,由于測(cè)試結(jié)束后,測(cè)試執(zhí)行端會(huì)根據(jù)腳本提交者標(biāo)識(shí)自動(dòng)向?qū)?yīng)的腳本提交者反饋測(cè)試報(bào)告,因而無(wú)需人工統(tǒng)計(jì)測(cè)試數(shù)據(jù),達(dá)到了節(jié)約人力、提高工作效率的目的。實(shí)施例2根據(jù)本發(fā)明實(shí)施例,提供了一種腳本測(cè)試裝置的裝置實(shí)施例。圖8是根據(jù)本發(fā)明實(shí)施例的一種可選的腳本測(cè)試裝置的示意圖。如圖8所示,該裝置包括:接收單元802,用于接收腳本測(cè)試請(qǐng)求,請(qǐng)求至少包括待測(cè)腳本代碼;更新單元804,用于根據(jù)接收到的待測(cè)腳本代碼,對(duì)本地緩存的相應(yīng)的待測(cè)腳本代碼進(jìn)行同步更新,待測(cè)腳本代碼包含待測(cè)腳本和測(cè)試用例;測(cè)試單元806,用于使得在測(cè)試執(zhí)行端執(zhí)行測(cè)試用例以對(duì)待測(cè)腳本進(jìn)行測(cè)試。通過(guò)本發(fā)明實(shí)施例,達(dá)到了測(cè)試結(jié)束時(shí)自動(dòng)向測(cè)試人員回歸測(cè)試數(shù)據(jù)的目的,從而實(shí)現(xiàn)了降低測(cè)試人員工作量,減輕測(cè)試人員工作負(fù)擔(dān)的技術(shù)效果,進(jìn)而解決了相關(guān)技術(shù)中人工回歸測(cè)試數(shù)據(jù)工作量大的技術(shù)問(wèn)題。作為一種可選的實(shí)施例,上述測(cè)試單元包括:上述裝置還包括:提取單元,用于在測(cè)試執(zhí)行端執(zhí)行測(cè)試用例以對(duì)待測(cè)腳本進(jìn)行測(cè)試之前,從待測(cè)腳本代碼中至少提取出以下內(nèi)容之一:待測(cè)腳本所屬分支的名稱、待測(cè)腳本名稱、以及腳本提交者標(biāo)識(shí);創(chuàng)建單元,用于創(chuàng)建以待測(cè)腳本所屬分支的名稱命名的第一文件,第一文件至少包括待測(cè)腳本名稱;推送單元,用于將第一文件推送至消息隊(duì)列中,在第一時(shí)長(zhǎng)后從消息隊(duì)列中提取第一文件,第一時(shí)長(zhǎng)為前一個(gè)待測(cè)腳本完成測(cè)試的時(shí)長(zhǎng)。作為一種可選的實(shí)施例,上述裝置還包括:循環(huán)單元,用于在第一時(shí)長(zhǎng)后從消息隊(duì)列中提取第一文件之前,執(zhí)行循環(huán)步驟,循環(huán)步驟包括:依次將消息隊(duì)列接收到的推送的文件作為第二文件,并執(zhí)行判斷步驟,其中,判斷步驟包括:當(dāng)消息隊(duì)列接收到推送的第二文件時(shí),判斷第二文件的文件名是否與第一文件的文件名相同,如果相同,則將第二文件中的待測(cè)腳本名稱合并于第一文件中。作為一種可選的實(shí)施例,上述裝置還包括:讀取單元,用于在第一時(shí)長(zhǎng)后從消息隊(duì)列中提取第一文件之后,從第一文件中讀取待測(cè)腳本名稱;查找單元,用于在本地緩存的待測(cè)腳本代碼中查找與待測(cè)腳本名稱相對(duì)應(yīng)的待測(cè)腳本和測(cè)試用例;發(fā)送單元,用于將待測(cè)腳本和測(cè)試用例發(fā)送至測(cè)試執(zhí)行端。作為一種可選的實(shí)施例,上述測(cè)試單元包括:掃描模塊,用于對(duì)測(cè)試用例中的部分或全部的測(cè)試用例進(jìn)行掃描,得到測(cè)試用例列表;調(diào)度模塊,用于根據(jù)測(cè)試用例列表,調(diào)度用于創(chuàng)建和部署虛擬化開(kāi)發(fā)環(huán)境的預(yù)設(shè)工具或調(diào)度用于具體執(zhí)行測(cè)試的一個(gè)或多個(gè)子測(cè)試機(jī);測(cè)試模塊,用于利用預(yù)設(shè)工具或子測(cè)試機(jī)執(zhí)行測(cè)試用例列表中所列的測(cè)試用例以對(duì)待測(cè)腳本進(jìn)行測(cè)試。作為一種可選的實(shí)施例,上述測(cè)試用例包括:第一類測(cè)試用例和第二類測(cè)試用例,其中,第一類測(cè)試用例中的測(cè)試用例每次運(yùn)行時(shí)都需要重新構(gòu)建測(cè)試環(huán)境;第二類測(cè)試用例中的所有測(cè)試用例共用一個(gè)相同的測(cè)試環(huán)境。作為一種可選的實(shí)施例,上述裝置還包括:劃分單元,用于在測(cè)試執(zhí)行端執(zhí)行測(cè)試用例以對(duì)待測(cè)腳本進(jìn)行測(cè)試之前,將需要執(zhí)行的測(cè)試用例劃分為第一類測(cè)試用例和第二類測(cè)試用例;存儲(chǔ)單元,用于將劃分出的第一類測(cè)試用例和第二類測(cè)試用例分別存儲(chǔ)到第一文件夾和第二文件夾中;執(zhí)行單元,用于分別依次執(zhí)行第一文件夾和第二文件夾中的測(cè)試用例,以對(duì)待測(cè)腳本進(jìn)行測(cè)試,其中,在執(zhí)行第一文件夾中的測(cè)試用例時(shí),每次執(zhí)行測(cè)試時(shí),都會(huì)構(gòu)建一個(gè)新的測(cè)試環(huán)境,當(dāng)次測(cè)試完畢后,銷毀或重置該測(cè)試環(huán)境,在執(zhí)行第二文件中的測(cè)試用例時(shí),在構(gòu)建一個(gè)測(cè)試環(huán)境后,依次執(zhí)行第二文件中的所有的測(cè)試用例,當(dāng)?shù)诙募A中的全部測(cè)試用例執(zhí)行完畢后,銷毀或重置該測(cè)試環(huán)境。作為一種可選的實(shí)施例,上述裝置還包括:獲取單元,用于在測(cè)試執(zhí)行端執(zhí)行測(cè)試用例以對(duì)待測(cè)腳本進(jìn)行測(cè)試之后,獲取腳本提交者標(biāo)識(shí);反饋單元,用于根據(jù)獲取的腳本提交者標(biāo)識(shí),將對(duì)待測(cè)腳本進(jìn)行測(cè)試后生成的測(cè)試報(bào)告反饋給相應(yīng)的腳本提交者。需要說(shuō)明的是,實(shí)施例2中裝置部分的實(shí)施方式與實(shí)施例1中方法部分的實(shí)施方式對(duì)應(yīng)相同或類似,其解決的技術(shù)問(wèn)題和達(dá)到的技術(shù)效果也對(duì)應(yīng)相同或類似,在此不再贅述。上述本發(fā)明實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。在本發(fā)明的上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒(méi)有詳述的部分,可以參見(jiàn)其他實(shí)施例的相關(guān)描述。在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的技術(shù)內(nèi)容,可通過(guò)其它的方式實(shí)現(xiàn)。其中,以上所描述的裝置實(shí)施例僅僅是示意性的,例如所述單元的劃分,可以為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可為個(gè)人計(jì)算機(jī)、服務(wù)器或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤、只讀存儲(chǔ)器(ROM,Read-OnlyMemory)、隨機(jī)存取存儲(chǔ)器(RAM,RandomAccessMemory)、移動(dòng)硬盤、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本
技術(shù)領(lǐng)域:
的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。當(dāng)前第1頁(yè)1 2 3