專利名稱:實現(xiàn)腳本并行執(zhí)行的方法
技術(shù)領(lǐng)域:
本發(fā)明屬于通訊的測試領(lǐng)域,具體地說,是一種實現(xiàn)腳本并行執(zhí)行的方法。
背景技術(shù):
在智能網(wǎng)產(chǎn)品測試中,目前普遍采用基于腳本的測試技術(shù),如TCL腳本。腳本是為了達到測試目的而編寫的,通過執(zhí)行該腳本命令后判斷執(zhí)行后的結(jié)果以達到測試的目的。一般來說,腳本是由一系列的腳本語句組成的,但腳本語句本身不會執(zhí)行,其執(zhí)行是在其相應(yīng)的解釋器中執(zhí)行的,每一腳本都有其配套的解釋器,在解釋器中有解釋程序,當(dāng)腳本執(zhí)行時,由解釋器執(zhí)行腳本中定義的腳本語句。這樣,有時會涉及多個測試腳本需要同時一起運行的問題,即測試腳本并行執(zhí)行的問題。
現(xiàn)有的腳本并行實現(xiàn)方法主要有兩種并行腳本執(zhí)行器方法、多解釋器方法。
并行腳本執(zhí)行器方法,如圖1所示,這種方法通過實現(xiàn)一個特殊的并行腳本執(zhí)行器(1),該并行腳本執(zhí)行器可以根據(jù)事先制定的規(guī)則創(chuàng)建多個線程,然后在線程中創(chuàng)建解釋器,在不同線程上執(zhí)行不同的腳本,來達到腳本的并行執(zhí)行效果的。圖1中,有4個線程,分別是線程1(2)、線程2(3)、線程3(4)、線程4(5),分別創(chuàng)建解釋器1(10)、解釋器2(11)、解釋器3(12)、解釋器4(13),在線程1(2)、線程2(3)、線程3(4)、線程4(5)上分別執(zhí)行腳本1(6)、腳本2(7)、腳本3(8)、腳本4(9)。
這種實現(xiàn)方法有以下缺陷1、由于這種并行執(zhí)行功能依賴于并行腳本執(zhí)行器,使得該功能依賴于具體的測試工具,無法應(yīng)用到其他工具,無法做到在各個測試工具上的通用。這樣,并行腳本執(zhí)行器本身的配置情況也會影響測試腳本的執(zhí)行,當(dāng)不斷更換測試腳本進行測試時,就會進行很多無謂的與被測系統(tǒng)無關(guān)的腳本執(zhí)行器的配置工作,影響使用效率。并行腳本執(zhí)行器需要從腳本當(dāng)中識別出用例和并行執(zhí)行的腳本部分,這都會限制測試腳本的實現(xiàn),使測試腳本的編寫只能依賴特定的工具。
2、由于這種實現(xiàn)方法不同的線程運行不同的腳本文件,難于做到在同一個腳本文件上實現(xiàn)多個并行執(zhí)行的動作。
3、腳本的執(zhí)行控制由并行腳本執(zhí)行器負責(zé),但是一般一套腳本就是一套測試用例,用例自己才知道不同的腳本何時和怎樣來執(zhí)行,檢測的用戶很難知道腳本的具體執(zhí)行情況,只知道一個結(jié)果,所以這種實現(xiàn)方法也就很難做到靈活的執(zhí)行控制。
多解釋器方法,如圖2所示,它是利用TCL腳本自身支持在一個線程里運行多個解釋器,每個解釋器有自己獨立的變量空間和運行自己的腳本的特性,通過這個特性,直接利用TCL的解釋器(interp)命令族的命令可達到腳本并行執(zhí)行的效果。在圖2中,14代表任意腳本執(zhí)行器,15是一個運行多個解釋器的線程,在該線程中運行解釋器1(10)、解釋器2(11)、解釋器3(12)、解釋器4(13),分別執(zhí)行腳本1(6)、腳本2(7)、腳本3(8)、腳本4(9)。
這種實現(xiàn)方法雖然在同一線程內(nèi)可以執(zhí)行多個腳本,提高了運行的效率,但也有以下缺點1、腳本執(zhí)行器也需要從腳本當(dāng)中識別出用例和并行執(zhí)行的腳本部分,這都會限制測試腳本的實現(xiàn),使測試腳本的編寫只能依賴特定的工具。
2、由于TCL的解釋器(interp)命令族僅做到腳本級并行,由于這種實現(xiàn)方法仍然是不同的解釋器運行不同的腳本文件,難于做到在同一個腳本文件上實現(xiàn)多個并行執(zhí)行的動作。
3、由于TCL自身的解釋器(interp)命令族僅支持獨立的命名空間、過程和全局變量、腳本,所以腳本的執(zhí)行控制不夠靈活,而且并行之間的通信方法單調(diào)。
目前支持TCL語言的測試儀器、工具很多,由于TCL語言自身的并行執(zhí)行功能很弱,所以現(xiàn)有的工具對此支持都很不夠,無法滿足測試當(dāng)中對于多路并發(fā)的各種復(fù)雜需求??偨Y(jié)前面所述的并行實現(xiàn)方法的缺點如下1、并行執(zhí)行功能依賴于具體的測試工具,無法應(yīng)用到其他測試儀器和工具,即并行執(zhí)行功能不通用于所有支持標(biāo)準TCL的環(huán)境。測試工具的配置會影響測試腳本的執(zhí)行,測試腳本更換時必須重新配置測試工具的參數(shù)。
2、難于做到在同一個腳本文件上實現(xiàn)多個并行執(zhí)行的動作。
3、用例自己才知道不同的腳本何時和怎樣來執(zhí)行,檢測的用戶很難知道腳本的具體執(zhí)行情況,很難做到靈活的執(zhí)行控制。
另外,下面這樣情況也是現(xiàn)有的并行執(zhí)行方法很難實現(xiàn)的1、腳本之間進行同步,同時也要保證這種能力通用于所有測試儀器和工具。
2、達到函數(shù)級并行,即并行執(zhí)行的可以是TCL語句或語句塊,實現(xiàn)函數(shù)級的并行。
3、主執(zhí)行體創(chuàng)建子執(zhí)行體時,要求子執(zhí)行體繼承主執(zhí)行體的各種全局變量、函數(shù)、文件、數(shù)據(jù)庫連接、遠程登陸(Telnet)連接等。
4、無論怎樣并行,在任何標(biāo)準TCL環(huán)境下都可以自動識別用例,和接收測試結(jié)果。
發(fā)明內(nèi)容
本發(fā)明提供一種實現(xiàn)腳本并行執(zhí)行的方法,以解決現(xiàn)有技術(shù)的并行執(zhí)行方法存在的并行執(zhí)行依賴于具體的測試工具,對于支持TCL語言的測試儀器和工具來說通用性較差的問題。。
為此,本發(fā)明的實現(xiàn)腳本并行執(zhí)行的方法,它包括以下步驟a、建立一套能夠?qū)崿F(xiàn)腳本并行的命令,將其存放在擴展庫中,在需要腳本并行的情況下,把擴展庫中的命令加載到內(nèi)存;b、執(zhí)行擴展庫中的命令,實現(xiàn)腳本并行。
上述的一套實現(xiàn)腳本并行的命令包括主命令、實現(xiàn)同步的命令和記錄測試結(jié)果機制的命令。
其中,主命令包括parellel命令,定義并行執(zhí)行體,并行執(zhí)行體包括若干分支,每一分支是一個欲實現(xiàn)的并行任務(wù),在緩沖區(qū)中建立并行執(zhí)行體和它的分支的數(shù)據(jù);parellel-start命令,把定義并行執(zhí)行體時建立的數(shù)據(jù)保存在緩沖區(qū),然后創(chuàng)建并啟動每個分支對應(yīng)的線程,這個線程執(zhí)行過程中創(chuàng)建解釋器,并在這個解釋器上加載保存的定義并行執(zhí)行體時建立的數(shù)據(jù),最后執(zhí)行該分支對應(yīng)的并行任務(wù);parellel-close命令,終止分支對應(yīng)的線程,它可以終止一個、多個或者全部的分支線程,同時釋放對應(yīng)的解釋器。
parellel-delete命令,會清除并行執(zhí)行體在緩沖區(qū)所占的資源。
所述的實現(xiàn)同步的命令包括parellel-resume命令,啟動一個、多個或者全部的分支線程;parellel-wait命令,執(zhí)行它可以等待該并行執(zhí)行體的其他分支和并行執(zhí)行體主解釋器執(zhí)行完畢后,該命令才終止,進入下一步的情況。
記錄測試結(jié)果機制的命令包括RecordInit命令,負責(zé)連接客戶端應(yīng)用程序編程接口,應(yīng)用程序編程接口在客戶端公用,它創(chuàng)建套接字等待Tcl腳本連接它,同時要求客戶提供一個回調(diào)函數(shù),把該回調(diào)函數(shù)登記到這個應(yīng)用程序編程接口上,當(dāng)該應(yīng)用程序編程接口收到測試結(jié)果并解析好之后,就通過回調(diào)函數(shù)傳給客戶端;record命令,負責(zé)把測試結(jié)果發(fā)送給客戶端應(yīng)用程序編程接口;RecordExit命令,負責(zé)關(guān)閉到客戶端應(yīng)用程序編程接口的連接;Testcase命令,聲明測試用例,以便在record命令報告測試結(jié)果時,明確報告的是什么用例的結(jié)果。
由于本發(fā)明建立了一套能夠?qū)崿F(xiàn)腳本并行的命令,通過把需要執(zhí)行的各并行任務(wù)放在并行執(zhí)行體的分支中來實現(xiàn)并行執(zhí)行,并行啟動多少個執(zhí)行體、哪些執(zhí)行體是寫在腳本里面的,與測試工具無關(guān),所以測試腳本不依賴于工具配置,對于支持TCL語言的測試儀器和工具來說可以通用。并行執(zhí)行體沒有直接在工具內(nèi)部實現(xiàn),而是以擴展庫方式實現(xiàn),這項改進直接就決定了該并行執(zhí)行體的通用性。
由于本發(fā)明的Testcase命令能夠自動識別用例,在record命令報告測試結(jié)果時,明確報告的是什么用例的結(jié)果,這樣,用戶不但知道測試結(jié)果,而且也知道腳本的具體執(zhí)行情況,能夠做到靈活的執(zhí)行控制,使得并行執(zhí)行時的用例識別以及結(jié)果報告都很容易定位到用例。
由于本發(fā)明通過把需要執(zhí)行的各并行任務(wù)放在并行執(zhí)行體的分支中來實現(xiàn)并行執(zhí)行,所以能夠在同一個腳本文件上實現(xiàn)多個并行執(zhí)行的動作。
另外,本發(fā)明采用parellel-resume命令和parellel-wait命令實現(xiàn)腳本之間的同步,由于這種同步是通過命令的形式,與測試工具無關(guān),所以這種能力能夠通用于所有測試儀器和工具,測試腳本也不依賴工具配置。
再者,由于本發(fā)明并行執(zhí)行體的分支中可以是TCL語句或語句塊,也就是說并行執(zhí)行的是TCL語句或語句塊,分支定義支持的是腳本語句,而不是腳本文件,就實現(xiàn)了函數(shù)級的并行。
又,由于本發(fā)明在啟動parellel-start命令時,把定義并行執(zhí)行體時建立的數(shù)據(jù)包括主執(zhí)行體的各種全局變量、函數(shù)、文件、數(shù)據(jù)庫連接、遠程登陸連接等都保存在緩沖區(qū),然后創(chuàng)建并啟動每個分支對應(yīng)的線程,這個線程執(zhí)行過程中創(chuàng)建解釋器,并在這個解釋器上加載保存的定義并行執(zhí)行體時建立的數(shù)據(jù)包括主執(zhí)行體的各種全局變量、函數(shù)、文件、數(shù)據(jù)庫連接、遠程登陸連接等,最后執(zhí)行該分支對應(yīng)的并行任務(wù),這樣,就達到了主執(zhí)行體的各種全局變量、函數(shù)、文件、數(shù)據(jù)庫連接、遠程登陸連接等都被子執(zhí)行體繼承下來的效果,從而使得測試腳本編寫時腳本和數(shù)據(jù)可以作到完全分離,能夠輕易達到腳本變化而無須配置測試工具。
由于本發(fā)明的Testcase命令能夠自動識別用例,它是通過命令完成的,不依賴于TCL環(huán)境,達到無論怎樣并行,在任何標(biāo)準TCL環(huán)境下都可以自動識別用例,和接收測試結(jié)果的效果。
圖1是現(xiàn)有技術(shù)并行腳本執(zhí)行器實現(xiàn)方法示意圖。
圖2是現(xiàn)有技術(shù)多解釋器實現(xiàn)方法示意圖。
圖3是本發(fā)明的方法流程圖。
圖4是利用10種命令實現(xiàn)本發(fā)明的過程示意圖。
具體實現(xiàn)方式圖3是本發(fā)明的方法流程圖。下面就結(jié)合該流程圖具體講述本發(fā)明的具體實現(xiàn)方式。
首先,建立一套能夠?qū)崿F(xiàn)腳本并行的命令,我們稱作并行支持命令族。并行支持命令族分為三種,分別是主命令、實現(xiàn)同步的命令和記錄測試結(jié)果機制的命令。
主命令包括parellel、parellel-start、parellel-close、parellel-delete,實現(xiàn)同步的命令包括parellel-resume、parellel-wait,記錄測試結(jié)果機制的命令包括record、RecordInit、RecordExit、testcase命令。
為了達到腳本并行方法能夠通用于所有的TCL,那么就要采取不依賴任何測試工具的實現(xiàn)方案。正好TCL支持擴展庫功能,通過把上述功能實現(xiàn)在一個動態(tài)庫,即擴展庫里,在需要腳本并行的情況下,執(zhí)行擴展包加展(Package require)命令后,即可把該擴展庫實現(xiàn)的命令加載進內(nèi)存供用戶使用。擴展包加展(Package require)命令是將擴展庫里的數(shù)據(jù)包加載進內(nèi)存的命令。所以該腳本并行的方法的實現(xiàn),就是靠實現(xiàn)一個這樣的擴展庫來達到目的,該動態(tài)庫名字叫TCLTCM。
下面結(jié)合圖4討論10種命令的功能及利用10種命令實現(xiàn)本發(fā)明目的的過程。
稱執(zhí)行parellel命令的解釋器線程為parellel線程。該線程的解釋器是主解釋器(17),一般是先執(zhí)行parellel命令(14)定義并行執(zhí)行體,然后通過parellel-start(15)或者parellel-resume(16)啟動執(zhí)行體中的一個或多個或者全部的分支,每個分支實際上就是一個線程,它啟動線程運行和新建解釋器(38),創(chuàng)建出分支解釋器(39),執(zhí)行分支中定義的腳本語句。分支線程如圖4右上部所示,它就是我們實現(xiàn)腳本并行,所要啟動的各個并行執(zhí)行的部分,它們可以和parellel所在線程并發(fā)執(zhí)行,而且執(zhí)行不同的腳本。由于分支定義支持腳本語句,而不是腳本文件,所以可以作到函數(shù)級甚至語句級的并行。
下面對10種命令進行分述。
主命令parellel命令(14)定義并行執(zhí)行體,在并行執(zhí)行體緩沖區(qū)(37)中建立并行執(zhí)行體和它的分支的數(shù)據(jù)(26),這些數(shù)據(jù)的字段包括并行執(zhí)行體名字、用戶變量數(shù)組、Tcl環(huán)境數(shù)組、Tcl函數(shù)數(shù)組,還包括分支數(shù)量以及每個分支的名字、分支執(zhí)行的語句等。其次,把所在解釋器(17)的用戶變量聲明為全局變量(25),以便于進行分支解析時,分支能夠見到。
parellel-start命令(15)先把用戶變量、Tcl環(huán)境、Tcl函數(shù)(27)保存在對應(yīng)的并行執(zhí)行體的并行執(zhí)行體緩沖區(qū)(37),然后創(chuàng)建并啟動每個分支對應(yīng)的線程,這個線程執(zhí)行過程中創(chuàng)建分支解釋器(39),并在這個解釋器上加載該并行執(zhí)行體對應(yīng)的用戶變量、Tcl環(huán)境、Tcl函數(shù),最后執(zhí)行該分支對應(yīng)的語句(40),這樣就可以執(zhí)行用戶定義的每個并行部分該執(zhí)行的功能。
parellel-close命令(18)終止分支對應(yīng)的線程(28),它可以終止一個、多個或者全部的分支線程,同時釋放對應(yīng)的解釋器。
parellel-delete命令(19)會清除并行執(zhí)行體在并行執(zhí)行體緩沖區(qū)(37)所占的資源(29),這樣在執(zhí)行該命令之后該并行執(zhí)行體就已經(jīng)不可用,如未執(zhí)行此命令,實際上該并行執(zhí)行體是可以通過parellel-start和parellel-resume重新啟動的。
實現(xiàn)同步的命令parellel-resume命令(16)可以啟動一個、多個或者全部的分支線程(30),啟動之后的分支如parellel-start啟動之后的分支一樣干相同的工作。
parellel-wait命令(20)主要用于并行腳本之間同步,執(zhí)行它可以等待該并行執(zhí)行體的其他分支和并行執(zhí)行體的主解釋器執(zhí)行完畢后,該命令才終止(31),進行下一程序。這在實際測試當(dāng)中,在需要其他多個并行任務(wù)完成才能進入到下一步的情況很有用。
記錄測試結(jié)果機制的命令testcase命令(24),并行執(zhí)行時如果僅僅輸出日志是無法知道每一部分結(jié)果的,所以需要一種識別用例的機制,這是通過testcase來聲明用例(36),而在后面的record命令報告測試結(jié)果時,就知道報告的是什么用例的結(jié)果。這樣,對于用戶來說,不但知道測試的結(jié)果,還知道腳本的具體執(zhí)行情況。
報告測試結(jié)果需要一種公共的機制,否則它就將依賴于具體的測試工具。這里的實現(xiàn)是在需要獲得結(jié)果的客戶端(33)實現(xiàn)一個公用的應(yīng)用程序編程接口(API)可以給所有工具使用,只要該工具調(diào)用該應(yīng)用程序編程接口(API),就可以在需要的時候源源不斷地獲得測試結(jié)果。這個應(yīng)用程序編程接口(API)實際上是一個服務(wù)端,它創(chuàng)建套接字等待Tcl腳本連接它,同時要求用戶提供一個回調(diào)函數(shù),把該回調(diào)函數(shù)登記到這個應(yīng)用程序編程接口(API)上,這樣當(dāng)該應(yīng)用程序編程接口(API)收到測試結(jié)果并解析好之后,就直接通過回調(diào)函數(shù)傳給具體的工具。
RecordInit命令(21)負責(zé)連接客戶端應(yīng)用程序編程接口(API),建立連接的過程在圖4中用32表示。
record命令(22)負責(zé)把測試結(jié)果發(fā)送給客戶端應(yīng)用程序編程接口(API),發(fā)送過程在圖4中用34表示。
RecordExit命令(23)負責(zé)關(guān)閉到客戶端應(yīng)用程序編程接口(API)的連接(35)。
通過上面的過程,就實現(xiàn)了本發(fā)明的腳本并行。
將本發(fā)明的并行支持命令族的10個命令詳細說明如下1、parellel[命令含義]定義一個并行執(zhí)行體。
定義一個并行任務(wù)。這個并行任務(wù)可以包含一個或多個分支,每個分支可以由不同的腳本構(gòu)成,也就是說,每一分支是一個欲實現(xiàn)的并行任務(wù),在執(zhí)行任務(wù)時各個分支將并行執(zhí)行。parellel并行任務(wù)在使用之前預(yù)先定義,使用完以后再刪除。如果當(dāng)前已經(jīng)定義了parellelName,則以新定義為準,刪除舊的任務(wù)定義。所有并行相關(guān)命令都包含在“parellel”域里。
parellel parellelName{branch branchNamel?-hold??-suspend?Scriptbranch branchName2?-delaytime??-hold??-suspend?Script……}[參數(shù)說明]parellelName并行執(zhí)行體的名字。
branchName1、2......并行執(zhí)行體內(nèi)的一個分支的名字,一個執(zhí)行體內(nèi)可以定義多個分支,每個分支是一個需要執(zhí)行的并行任務(wù)的腳本。每個分支都有可以有獨立的變量、函數(shù)、文件、數(shù)據(jù)庫連接、遠程登陸連接等。
夾在兩個?號之間的表示該項為可選項。
-delay time分支延遲啟動時間值,單位為秒,分別標(biāo)識每個分支啟動后過多長時間開始執(zhí)行,如無該項則該分支是啟動后立即執(zhí)行。
-hold指明分支不會自動終止,如無該項表示會自動終止。
-suspend指明分支是阻塞的,即掛起,如無該項表示分支是啟動的。
Script這是實際的TCL語句,可以是用{}括起來的復(fù)合語句。
字符串類型,返回ok代表成功,fail代表失敗。
parellel A{branch aa{source a.tcl}branch bb{set catchReturn2[catch{source b.tcl}]if{catchReturn2 !=“0”}{A close aa}}}在上例中,定義了一個并行執(zhí)行體,該并行執(zhí)行體有2個分支aa和bb。其中,分支aa是較簡單的語句,而分支bb稍復(fù)雜。2、parellel-start[命令含義]啟動一個并行執(zhí)行體。
無。
parellelName start[參數(shù)說明]parellelName并行執(zhí)行體的名字。
字符串類型,返回ok代表成功,fail代表失敗。
A start該命令表示啟動并行執(zhí)行體A,如果要啟動并行執(zhí)行體A的某一特定分支時,要用下面的parellel-resume語句。
3、parellel-close[命令含義]結(jié)束正在運行的并行執(zhí)行體之中的任務(wù)分支,也可以結(jié)束所有分支。
結(jié)束正在運行的任務(wù)分支。如果不指定任務(wù)分支名字,則結(jié)束所有分支。
parellelName close?branchName...?[參數(shù)說明]parellelName并行執(zhí)行體的名字。
branchName并行執(zhí)行體內(nèi)的一個分支的名字,夾在兩個?之間,表明該參數(shù)是可選的,當(dāng)該參數(shù)存在時,則結(jié)束該參數(shù)對應(yīng)的分支,如該參數(shù)不存在,則結(jié)束整個并行執(zhí)行體。
字符串類型,返回ok代表成功,fail代表失敗。
A close aa上述命令表示結(jié)束并行執(zhí)行體A中的分支aa。
4、parellel-delete[命令含義]清除一個并行執(zhí)行體,這個命令會釋放與并行執(zhí)行體有關(guān)的資源。而上面的parenel-close命令則僅是結(jié)束并行執(zhí)行體或其分支,并不釋放其資源。
parellelName delete[參數(shù)說明]parellelName并行執(zhí)行體的名字。
字符串類型,返回ok代表成功,fail代表失敗。
A delete上述命令表示刪除并行執(zhí)行體A,并釋放與其有關(guān)的全部資源。
5、parellel-resume[命令含義]啟動指定的阻塞分支。如果不指定分支名字,則啟動所有的阻塞分支。
parellelName resume?branchName...?[參數(shù)說明]parellelName并行執(zhí)行體的名字。
branchName并行執(zhí)行體內(nèi)的一個分支的名字,夾在兩個?之間,表明該參數(shù)是可選的,如該參數(shù)存在,表示啟動該并行執(zhí)行體中的某個阻塞分支,如該參數(shù)不存在,表示啟動整個并行執(zhí)行體。
字符串類型,返回ok代表成功,fail代表失敗。
A resume aa上述命令表示啟動并行執(zhí)行體A的aa分支。
6、parellel-wait[命令含義]等待指定名字的分支運行返回。
parellelName wait-any?branchName...?[參數(shù)說明]parellelName并行執(zhí)行體的名字。
-any帶該參數(shù)就應(yīng)該省略branchName參數(shù),該參數(shù)指明等待所有的分支運行返回。
branchName并行執(zhí)行體內(nèi)的一個分支的名字,夾在兩個?之間,表明該參數(shù)是可選的,如果該參數(shù)存在,則沒有-any參數(shù),表明等待該分支運行返回,如果無該參數(shù),應(yīng)有-any參數(shù),表明等待所有的分支運行返回。
字符串類型,返回ok代表成功,fail代表失敗。
A wait aa上述命令表示等待并行執(zhí)行體A的分支aa運行返回。
7、RecordInit[命令含義]測試結(jié)果報告機制準備,任何需要報告測試結(jié)果的腳本最初都要執(zhí)行這個腳本命令。
此命令還設(shè)置記錄測試結(jié)果的方式,有通過套接字記錄到客戶端(OUI)、寫測試結(jié)果日志兩種方式,可以兩種方式同時使用,一個參數(shù)都沒有的缺省值為-oui127.0.0.1。
RecordInit-ouix-logLogPathName[參數(shù)說明]-ouix選擇記錄測試結(jié)果到客戶端(OUI)的結(jié)果記錄方式,x是客戶端(OUI)的IP地址,如果缺省x項,則默認缺省值為-oui127.0.0.1。
-logLogPathName選擇寫測試結(jié)果日志記錄方式,LogPathName是設(shè)置的結(jié)果日志文件全路徑。
字符串類型,成功則返回“ok”,失敗將拋出異常,catch可以捕獲。
RecordInit-oui10.76.144.152上述命令表明選擇記錄測試結(jié)果到客戶端(OUI),其IP地址為10.76.144.152。
8、RecordExit[命令含義]測試結(jié)果報告機制關(guān)閉。
RecordExit[返回值說明]字符串類型,總返回ok代表成功。
RecordExit該命令表示測試結(jié)果報告機制關(guān)閉。
9、record[命令含義]報告測試結(jié)果。
record-cmdinfo?message??-result string??-error string??-msg string?[參數(shù)說明]-cmdinf確定發(fā)送的不是測試結(jié)果,而是腳本命令執(zhí)行過程信息,該選項用于腳本、用例調(diào)試;?message?是記錄信息文本,也可以用后面的?-msg string?命令字來記錄文本信息,但兩者不同時出現(xiàn),本參數(shù)是可選的;?-result string?,result是命令字,表示結(jié)果信息,對于命令字result,string是與其對應(yīng)的測試記錄字,本參數(shù)是可選的;?-error string?,error是命令字,表示錯誤信息,對于命令字error,string是與其對應(yīng)的測試記錄字,本參數(shù)是可選的;?-msg string?是記錄信息文本,也可以用前面的?message?命令字來記錄文本信息,但兩者不同時出現(xiàn),本參數(shù)是可選的。
成功返回ok,失敗則拋出異常供catch捕獲。
Record-result ok上述命令表明測試結(jié)果的測試記錄字是ok,結(jié)果測試成功。
10、testcase[命令含義]定義一個測試用例。
testcase name{args}{body}[參數(shù)說明]name測試用例的名稱。
args用例的參數(shù)表。
body測試腳本語句體。
無返回值。
Testcase Dial200{Caller Callee}{Dial 200Redial 1…}上述命令定義了一個測試用例,其名稱叫Dial200,有Caller、Callee兩個參數(shù),腳本語句的意思是先撥號200,再二次撥號1,測試交換機端的反應(yīng)是否正常。
權(quán)利要求
1.一種實現(xiàn)腳本并行執(zhí)行的方法,其特征在于,它包括以下步驟a、建立一套能夠?qū)崿F(xiàn)腳本并行的命令,將其存放在擴展庫中,在需要腳本并行的情況下,把擴展庫中的命令加載到內(nèi)存;b、執(zhí)行擴展庫中的命令,實現(xiàn)腳本并行。
2.根據(jù)權(quán)利要求1所述的實現(xiàn)腳本并行執(zhí)行的方法,其特征在于步驟a中,所述的一套實現(xiàn)腳本并行的命令包括主命令、實現(xiàn)同步的命令和記錄測試結(jié)果機制的命令。
3.根據(jù)權(quán)利要求2所述的實現(xiàn)腳本并行執(zhí)行的方法,其特征在于步驟a中,所述的主命令包括parellel命令,定義并行執(zhí)行體,并行執(zhí)行體包括若干分支,每一分支是一個欲實現(xiàn)的并行任務(wù),在緩沖區(qū)中建立并行執(zhí)行體和它的分支的數(shù)據(jù);parellel-start命令,把定義并行執(zhí)行體時建立的數(shù)據(jù)保存在緩沖區(qū),然后創(chuàng)建并啟動每個分支對應(yīng)的線程,這個線程執(zhí)行過程中創(chuàng)建解釋器,并在這個解釋器上加載保存的定義并行執(zhí)行體時建立的數(shù)據(jù),最后執(zhí)行該分支對應(yīng)的并行任務(wù);parellel-close命令,終止分支對應(yīng)的線程,它可以終止一個、多個或者全部的分支線程,同時釋放對應(yīng)的解釋器;parellel-delete命令,會清除并行執(zhí)行體在緩沖區(qū)所占的資源。
4.根據(jù)權(quán)利要求2所述的實現(xiàn)腳本并行執(zhí)行的方法,其特征在于步驟a中,所述的實現(xiàn)同步的命令包括parellel-resume命令,啟動一個、多個或者全部的分支線程;parellel-wait命令,執(zhí)行它可以等待該并行執(zhí)行體的其他分支和并行執(zhí)行體主解釋器執(zhí)行完畢后,該命令才終止,進入下一步的情況。
5.根據(jù)權(quán)利要求2所述的實現(xiàn)腳本并行執(zhí)行的方法,其特征在于步驟a中,所述的記錄測試結(jié)果機制的命令包括RecordInit命令,負責(zé)連接客戶端應(yīng)用程序編程接口(API),應(yīng)用程序編程接口(API)在客戶端公用,它創(chuàng)建套接字等待Tcl腳本連接它,同時要求客戶提供一個回調(diào)函數(shù),把該回調(diào)函數(shù)登記到這個應(yīng)用程序編程接口(API)上,當(dāng)該應(yīng)用程序編程接口(API)收到測試結(jié)果并解析好之后,就通過回調(diào)函數(shù)傳給客戶端;record命令,負責(zé)把測試結(jié)果發(fā)送給客戶端應(yīng)用程序編程接口(API);RecordExit命令,負責(zé)關(guān)閉到客戶端應(yīng)用程序編程接口(API)的連接;Testcase命令,聲明測試用例,以便在record命令報告測試結(jié)果時,明確報告的是什么用例的結(jié)果。
全文摘要
一種實現(xiàn)腳本并行執(zhí)行的方法,它包括這樣的過程建立一套能夠?qū)崿F(xiàn)腳本并行的命令,將其存放在擴展庫中,在需要腳本并行的情況下,把擴展庫中的命令加載到內(nèi)存;執(zhí)行擴展庫中的命令,實現(xiàn)腳本并行。其效果是使并行執(zhí)行不依賴于具體的測試工具,對于支持TCL語言的測試儀器和工具來說可以通用,編寫的測試腳本能夠靈活控制,能夠在同一個腳本文件上實現(xiàn)多個并行執(zhí)行的動作。
文檔編號H04B17/00GK1501603SQ0215255
公開日2004年6月2日 申請日期2002年11月17日 優(yōu)先權(quán)日2002年11月17日
發(fā)明者戎兵, 楊曉惠, 戎 兵 申請人:華為技術(shù)有限公司