專利名稱:自動測試過程中資源使用的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種自動測試過程中的資源使用方法,尤其是一種在自動測試過程中,利用資源池分配向測試用例腳本分配資源的資源使用方法。
背景技術(shù):
在自動化測試中,用例通常由用例預(yù)處理、后處理和一個或多個執(zhí)行腳本三種腳本構(gòu)成的,其中用例預(yù)處理腳本和后處理腳本是可有可無的,根據(jù)需要而定,但至少要包含一個執(zhí)行腳本,執(zhí)行用例時,先執(zhí)行用例預(yù)處理腳本,再并發(fā)執(zhí)行一個或多個執(zhí)行腳本,最后執(zhí)行后處理腳本。圖1表示了用例執(zhí)行的過程。
用戶可以自由選定一些用例,按任意的執(zhí)行序列(串行和并行)來執(zhí)行,這種執(zhí)行序列稱之為規(guī)程,規(guī)程是按一定規(guī)則執(zhí)行的用例集合。規(guī)程是由多個步驟組成,每個步驟由多個用例組成,步驟之間是順序執(zhí)行的,步驟內(nèi)的用例可以并行執(zhí)行也可以順序執(zhí)行。圖2表示了規(guī)程執(zhí)行的過程。
但不幸的是,常常有一些資源是排他的,一個用例使用了,其他用例便不能使用,例如200業(yè)務(wù)中的卡號資源,以圖1中的步驟2為例,如果用例1使用了一個卡號,用例2、用例3就不能使用同一卡號。而且這些資源也是有限的,不可能為每一個用例分配一個不同的資源,仍然以圖1中的步驟2為例,假定這個并行步驟中有100個用例,可能我們只有有限的10個卡號資源。在這種情況下就會造成資源使用的沖突。
現(xiàn)有技術(shù)解決用例并行時資源沖突問題常常使用三種方法第一種是讓每個用例都使用不同的資源,允許用戶隨意改變執(zhí)行序列(串行和并行),第二種是每個用例都使用同一個資源,不允許用戶改變執(zhí)行序列,第三種是不對資源沖突負(fù)責(zé),全部由用戶自己想辦法解決。
這幾種方法的缺陷是顯而易見的,第一種方法需要大量的資源,這在實(shí)際過程中幾乎是不可能的,第二種方法用例只能串行,執(zhí)行效率非常低下,第三種方法則把難題轉(zhuǎn)嫁給了用戶,根本不能稱之為方法,用戶在實(shí)際使用過程中往往為這些問題困惑,經(jīng)常束手無策。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種自動測試過程中的資源使用方法,通過自動測試的過程中,利用資源池進(jìn)行資源的管理和分配,解決現(xiàn)有技術(shù)中用例并行時資源沖突問題,提高用例執(zhí)行的速度和效率。
為了實(shí)現(xiàn)上述的發(fā)明目的,本發(fā)明提供了一種自動測試過程中的資源使用方法,包括如下步驟步驟1、在自動測試的過程中,多個測試用例組成一并發(fā)過程,向資源池申請資源;步驟2、資源池將其存儲的資源向多個測試用例進(jìn)行分配,并根據(jù)資源池中存儲資源的數(shù)量,將所述多個測試用例重新組合成多個并發(fā)過程;步驟3、執(zhí)行所述多個并發(fā)過程。
所述步驟2具體為;步驟21、資源池將其存儲的資源逐一向申請資源的并發(fā)過程中的測試用例分配;步驟22、判斷是否所有的測試用例都分配到了資源,如果是,則執(zhí)行步驟3,否則執(zhí)行步驟23;步驟23、判斷是否分配完資源池中所有資源,如果是,則執(zhí)行步驟24,否則,執(zhí)行步驟21;步驟24、將資源池的資源進(jìn)行復(fù)位;步驟25、創(chuàng)建新的并發(fā)過程,將未申請到資源的測試用例移至該并發(fā)過程中,并向資源池進(jìn)行資源申請,然后執(zhí)行步驟21。
本發(fā)明具有如下有益效果1)通過本發(fā)明的方法,將常常變化的數(shù)據(jù)和經(jīng)常不變的腳本徹底分離,從根本上解決了用例并發(fā)執(zhí)行時的資源沖突問題。如果數(shù)據(jù)發(fā)生了變化,只需要簡單更改一下資源池中的資源,大量的測試腳本則不需要進(jìn)行任何改動。
2)使得用戶執(zhí)行序列和測試用例徹底分離,用戶在編寫測試用例時,不用關(guān)心這些用例以后是按什么序列執(zhí)行的;用戶執(zhí)行時如果改變了執(zhí)行序列,也不用對測試用例本身產(chǎn)生任何影響。
3)提高了用例執(zhí)行的速度和效率。
4)使用戶可以將全部注意力集中在用例的設(shè)計和編寫上,而不用考慮用例的執(zhí)行序列和資源沖突問題。
下面通過附圖和實(shí)施例,對本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。
圖1為現(xiàn)有技術(shù)中用例腳本的執(zhí)行流程;圖2為現(xiàn)有技術(shù)中規(guī)程示意圖;圖3為本發(fā)明的自動測試過程中的資源使用方法的具體實(shí)施例的流程圖;圖4為本發(fā)明的經(jīng)資源池調(diào)整后的測試用腳本執(zhí)行序列示意圖。
具體實(shí)施例方式
在自動化測試中,常常有一些資源是排他的,一個用例使用了,其他用例便不能使用。舉個例子,在200電話卡業(yè)務(wù)中,卡號就是這樣一個資源,如果有一個人正在用這個卡打電話,另外一個人再使用這張卡,系統(tǒng)則會提示此卡正在使用中。如果不能有效地管理這種資源,每個用例單獨(dú)執(zhí)行可能都是正確的,但組合在一起批量執(zhí)行時,如果執(zhí)行序列發(fā)生變化,例如由串行變成并行,則會出現(xiàn)上述資源沖突的問題。這種會引起沖突的資源其實(shí)有很多,除了卡號,還有縮位帳號、主叫號碼、被叫號碼等等。
為了解決資源沖突問題,本發(fā)明使用了一種獨(dú)特的資源分配機(jī)制-資源池技術(shù),資源池用來存儲和管理測試用例使用的資源。在自動測試的過程中,多個測試用例向資源池申請資源;資源池將其存儲的資源向多個測試用例進(jìn)行分配,并根據(jù)資源池中存儲資源的數(shù)量,將所述多個測試用例重新組合成多個并發(fā)過程;并執(zhí)行各個并發(fā)過程,上述資源的分配完全是由資源池來完成的,不需要人為的干預(yù)。
參見圖3,其為本發(fā)明的自動測試過程中的資源使用方法的具體實(shí)施例的流程圖,包括如下步驟步驟101、在自動測試的過程中,多個測試用例組成一并發(fā)過程,向資源池申請資源;步驟102、資源池將其存儲的資源逐一向申請資源的并發(fā)過程中的測試用例分配;步驟103、判斷是否所有的測試用例都分配到了資源,如果是,則執(zhí)行步驟107,否則執(zhí)行步驟104;步驟104、判斷是否分配完資源池中所有資源,如果是,則執(zhí)行步驟105,否則,執(zhí)行步驟102;步驟105、將資源池的資源進(jìn)行復(fù)位;步驟106、創(chuàng)建新的并發(fā)過程,將未申請到資源的測試用例移至該并發(fā)過程中,并向資源池進(jìn)行資源申請,然后執(zhí)行步驟102。
步驟107、執(zhí)行所述多個并發(fā)過程。該步驟可進(jìn)一步具體為所述多個并發(fā)過程按其生成順序逐一獲取資源,當(dāng)一并發(fā)過程獲取到資源后,便執(zhí)行,該并發(fā)過程執(zhí)行完成后,釋放資源,下一并發(fā)過程獲取資源并執(zhí)行,直到所有并發(fā)過程執(zhí)行完畢。
資源池可以根據(jù)資源的使用策略設(shè)定資源分配順序;相應(yīng)的在所述步驟102中,資源池將其存儲的資源按照設(shè)定的資源分配順序逐一分配給測試用例。所述的資源使用策略是由測試者設(shè)定,例如資源為多個電話卡的號碼,則可以按照電話號碼的順序來分配資源;另外用戶也可以通過設(shè)定資源池的資源使用策略,隨意組織測試用例、隨意更改用例執(zhí)行的串行和并行特性。在所述步驟102中,資源池也可以采用隨機(jī)的方式將資源池的資源逐一分配給測試用例。
在所述步驟101中,資源池可以根據(jù)測試用例的執(zhí)行策略(例如,多個測試用例要按照一定優(yōu)先級別來執(zhí)行,優(yōu)先級高的要先申請到資源),設(shè)定測試用例的資源申請順序,用戶可以通過設(shè)定測試用例的執(zhí)行策略來安排測試用例申請資源的順序。
下面從具體程序的實(shí)現(xiàn)上,對資源池使用過程進(jìn)行詳細(xì)的介紹(為清晰起見,各步驟除了用文字進(jìn)行說明外,還用類TCL(Tool Commend Language,工具命令語言)的代碼段來描述,行首#表示此行是注釋)1、資源池定義資源池可以在整個用例工程的預(yù)處理腳本中定義。
#定義卡號資源resource_pool CardA 67557123450-67557123459定義了一個名為CardA的資源池,池子中有10個連續(xù)的資源,從67557123450到67557123459。
2、資源申請可以在用例的預(yù)處理腳本中申請資源。
#申請卡號資源resource_apply CardC CardC1表示從資源池CardA中申請一個空閑的資源,存放在變量CardC1中。如果前面沒有用例從這個資源池中申請資源,則本次申請到資源池中第一個資源,即67557123450;如果前面的用例申請到了第一個資源,則本次申請到資源池中第二個資源,即67557123451;如果前面的用例把10個資源都申請去了,則本次無法申請到合法的資源。按資源池的機(jī)制,應(yīng)該自動將用例的執(zhí)行序列調(diào)整為前10個用例形成一個并行過程,并執(zhí)行;后面的用例調(diào)整到下一個并行過程中(當(dāng)前一個并行過程執(zhí)行完后,資源池會自動復(fù)位,因此未獲取到資源的用例又會從第一個資源開始重新申請資源)。
3、使用資源在腳本中使用資源。
InputAccount $CardC1CardC1是一個變量,$CardC1表示取此變量的值。由第2步可以得知,此時變量的值已經(jīng)是資源池中某個確定的資源了。
下面再具體描述一下資源池機(jī)制解決資源使用過程中排他和沖突問題的方法和算法用例或規(guī)程在運(yùn)行前先要進(jìn)行編譯。系統(tǒng)實(shí)際是在編譯時申請資源,按資源池定義的申請順序一個個地申請的。并發(fā)過程中的第1個用例申請到資源池中的第1個資源,并發(fā)過程中的第2個用例申請到資源池中的第2個資源,如果資源池中的資源都被占用了,則后續(xù)的用例無法申請到合法的資源,按資源池機(jī)制,此時應(yīng)自動對用例的執(zhí)行序列進(jìn)行調(diào)整。
調(diào)整的方法為已經(jīng)申請到資源的用例保留在原來的并發(fā)過程中,沒有申請到資源的用例則被調(diào)整到下一個并發(fā)過程中(當(dāng)完成一個并發(fā)過程的資源分配后,資源池會自動復(fù)位,因此,后面的測試用例又會從地1個資源開始重新申請資源),新的并發(fā)過程是等原來的并發(fā)過程執(zhí)行完后才啟動的。整個調(diào)整是自動進(jìn)行的,不需要用戶進(jìn)行任何干預(yù)。如上例,資源池CardA中有10個資源,假設(shè)在規(guī)程中有100個用例并行,由于只有10個卡號資源,因此第11個用例就申請不到空閑資源了,因此系統(tǒng)將第11個用例起的10個用例自動調(diào)整到了下一個并發(fā)過程中,在新的并發(fā)過程中,用例又可以從頭開始申請資源了。經(jīng)資源池調(diào)整后的用例序列如圖4所示。
作個比方資源池中的資源就好像是一批令牌,并行過程中的用例則是一大群搶著過關(guān)的人。只有那些拿到了令牌的人才可以出閘過關(guān),出閘之后令牌傳回來重新分發(fā)。沒有拿到令牌的人則必須在下一個過程中才能過關(guān)。
要強(qiáng)調(diào)的是,整個調(diào)整過程都是由資源池自動完成的,用戶不必花費(fèi)精力去關(guān)心數(shù)據(jù)沖突這些問題,而是可以把精力更多地放在用例設(shè)計上了。
在上述例子中,資源池中包括10個連續(xù)的資源,實(shí)際上,資源池還支持離散的資源,離散資源和連續(xù)資源也可以混合使用,例如resource_pool channel1 aa,bb,10-19資源池名稱為channel1,里面有12個資源,2個離散的資源,10個連續(xù)的資源。下面在一個預(yù)處理腳本中申請四個資源
resource_apply channel1 var1resource_apply channel1 var2resource_apply channel1 var3resource_apply channel1 var4再把結(jié)果打印出來puts var1=$var1puts var2=$var2puts var2=$var3puts var2=$var4puts是一個打印命令。最終輸出結(jié)果為var1=aavar2=bbvar3=10var2=11另外,資源池機(jī)制還支持一種綁定型的資源。一個最常見的應(yīng)用就是手機(jī),手機(jī)包括號碼和IMSI號,這兩個號碼必須成對出現(xiàn),不可分割。綁定式資源的定義方法為resource_pool{IMSIH1 MSISDNH1}{{460070360010200-460070360010209}{13900100200-13900100209}}定義了10個表示手機(jī)的資源,IMSIH1表示IMSI號,MSISDNH1表示手機(jī)號碼,這兩個資源是綁定在一起的,號碼為13900100200的手機(jī),其IMSI號為460070360010200,同理,號碼為13900100201的手機(jī),其IMSI號為460070360010201,依次類推。
按以下方法申請資源resource_apply{IMSIH1 MSISDNH1}{imsi1 msisdn1}resource_apply{IMSIH1 MSISDNH1}{imsi2 msisdn2}打印結(jié)果
puts ″imsi1=$imsi1 msisdn1=$msisdn1″puts ″imsi2=$imsi2 msisdn2=$msisdn2″輸出為imsi1=460070360010200 msisdn1=13900100200imsi2=460070360010201 msisdn2=13900100201離散型資源池和綁定型資源池對執(zhí)行序列的影響和連續(xù)型資源池類似,遵守同一個原則如果用例申請不到空閑的資源,則被自動調(diào)整到下一個并發(fā)過程中。在此不贅述。
從上面的例子可以清楚地看出,通過使用資源池,我們將數(shù)據(jù)和邏輯已經(jīng)明顯地分離出來了數(shù)據(jù)體現(xiàn)在資源池定義中,而資源池可以在整個用例工程的預(yù)處理腳本中定義,邏輯體現(xiàn)在測試用例中。數(shù)據(jù)和邏輯是嚴(yán)格分離的,一旦數(shù)據(jù)發(fā)生了變化,我們只需要更改一下預(yù)處理腳本中的資源池定義,成千上萬的測試用例不需要進(jìn)行任何變化,也就是說,使用資源池后,測試用例時可重用、可移植的。
最后所應(yīng)說明的是,以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案而非限制,盡管參照較佳實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,可以對本發(fā)明的技術(shù)方案進(jìn)行修改或者等同替換,而不脫離本發(fā)明技術(shù)方案的精神和范圍。
權(quán)利要求
1.一種自動測試過程中資源使用的方法,其特征在于包括如下步驟步驟1、在自動測試的過程中,多個測試用例組成一并發(fā)過程,向資源池申請資源;步驟2、資源池將其存儲的資源向多個測試用例進(jìn)行分配,并根據(jù)資源池中存儲資源的數(shù)量,將所述多個測試用例重新組合成多個并發(fā)過程;步驟3、執(zhí)行所述多個并發(fā)過程。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于所述步驟2具體為步驟21、資源池將其存儲的資源逐一向申請資源的并發(fā)過程中的測試用例分配;步驟22、判斷是否所有的測試用例都分配到了資源,如果是,則執(zhí)行步驟3,否則執(zhí)行步驟23;步驟23、判斷是否分配完資源池中所有資源,如果是,則執(zhí)行步驟24,否則,執(zhí)行步驟21;步驟24、將資源池的資源進(jìn)行復(fù)位;步驟25、創(chuàng)建新的并發(fā)過程,將未申請到資源的測試用例移至該并發(fā)過程中,并向資源池進(jìn)行資源申請,然后執(zhí)行步驟21。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于所述步驟3具體為所述多個并發(fā)過程按其生成順序逐一獲取資源,當(dāng)一并發(fā)過程獲取到資源后,便執(zhí)行,該并發(fā)過程執(zhí)行完成后,釋放資源,下一并發(fā)過程獲取資源并執(zhí)行,直到所有并發(fā)過程執(zhí)行完畢。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于在所述步驟21中,資源池將其存儲的資源按照設(shè)定的資源分配順序逐一分配給測試用例。
5.根據(jù)權(quán)利要求2所述的方法其特征在于在所述步驟21中,資源池采用隨機(jī)的方式將資源池的資源逐一分配給測試用例。
6.根據(jù)權(quán)利要求2所述的方法其特征在于在所述步驟1中,資源池根據(jù)測試用例的執(zhí)行策略,設(shè)定測試用例的資源申請順序。
全文摘要
本發(fā)明涉及一種自動測試過程中資源使用的方法,該方法包括如下步驟步驟1、在自動測試的過程中,多個測試用例組成一并發(fā)過程,向資源池申請資源;步驟2、資源池將其存儲的資源向多個測試用例進(jìn)行分配,并根據(jù)資源池中存儲資源的數(shù)量,將所述多個測試用例重新組合成多個并發(fā)過程;步驟3、執(zhí)行所述多個并發(fā)過程。通過本發(fā)明提供的方法,從根本上解決了用例并發(fā)執(zhí)行時的資源沖突問題;并使得用戶執(zhí)行序列和測試用例徹底分離,用戶在編寫測試用例時,不用關(guān)心這些用例以后是按什么序列執(zhí)行的,用戶執(zhí)行時如果改變了執(zhí)行序列,也不用對測試用例本身產(chǎn)生任何影響;并且提高了用例執(zhí)行的速度和效率。
文檔編號G06F9/46GK1967500SQ20061007661
公開日2007年5月23日 申請日期2006年4月19日 優(yōu)先權(quán)日2006年4月19日
發(fā)明者馮敬濤, 林文立 申請人:華為技術(shù)有限公司