本申請屬于計(jì)算機(jī)軟件測試領(lǐng)域,具體地說,涉及一種壓力模擬方法和裝置。
背景技術(shù):
近年來,隨著互聯(lián)網(wǎng)技術(shù)的迅速發(fā)展,非結(jié)構(gòu)化數(shù)據(jù)、大數(shù)據(jù)、云存儲已經(jīng)毫無爭議地成為了信息技術(shù)發(fā)展趨勢和熱點(diǎn),分布式文件系統(tǒng)作為核心基礎(chǔ)被推到了浪潮之巔,廣泛被工業(yè)界和學(xué)術(shù)界熱推。
分布式系統(tǒng)通常由網(wǎng)絡(luò)、數(shù)據(jù)庫、應(yīng)用服務(wù)器多個部分組成。現(xiàn)代分布式文件系統(tǒng)普遍具有高性能、高擴(kuò)展、高可用、高效能、易使用、易管理等特點(diǎn)。然而,在確定一個分布式系統(tǒng)具有上述優(yōu)點(diǎn)之前,需要對系統(tǒng)進(jìn)行各方面的測試,從而保證系統(tǒng)足以滿足用戶的需求。
對于分布式系統(tǒng)而言,壓力測試非常重要。一個分布式系統(tǒng)能夠承受多大的壓力是衡量這個分布式系統(tǒng)的關(guān)鍵因素之一。因此,為了測試的真實(shí),每個測試壓力器都會盡可能的模擬分布式集群產(chǎn)生的壓力。
在現(xiàn)有的技術(shù)方案中,通常采用極限壓力的測試方法對文件操作使用方式進(jìn)行模擬。其問題在于,隨著壓力測試場景的變換和增加,需要不斷的增加壓力生成方式進(jìn)行測試,這樣需要不斷增加新的開發(fā),造成技術(shù)資源的浪費(fèi);與此同時,現(xiàn)有技術(shù)不能通過配置的方式配置模擬出任意復(fù)雜的壓力測試場景,模擬方式較單一。
因此,一種新型的分布式壓力模擬方法和裝置亟待提出。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本申請所要解決的技術(shù)問題是提供了一種壓力模擬方法和裝置。
為了解決上述技術(shù)問題,本申請公開了一種壓力模擬方法,包括如下步驟:
獲取壓力模擬類型,并讀取所述模擬類型相對應(yīng)的配置文件;解析所述配置文件并根據(jù)所述配置文件的解析結(jié)果創(chuàng)建一定數(shù)量的線程;所述線程調(diào)用execute方法,根據(jù)所述配置文件的解析結(jié)果執(zhí)行與所述壓力模型相對應(yīng)的預(yù)設(shè)的原子操作。
其中,所述壓力模擬類型包括文件類型以及文件的操作類型。
其中,執(zhí)行與所述壓力模型相對應(yīng)的預(yù)設(shè)的原子操作之前,所述方法還包括:將一種文件類型的一種操作類型封裝成一個原子操作。
其中,根據(jù)配置文件創(chuàng)建一定數(shù)量的線程,還包括:在每個所述線程中創(chuàng)建一個原子操作的類的對象。
其中,解析所述配置文件包括:由執(zhí)行框架解析第一類參數(shù),其中所述第一類參數(shù)包括所述壓力模擬類型對應(yīng)的當(dāng)前原子操作的執(zhí)行時間、所述當(dāng)前原子操作的執(zhí)行頻率以及為所述當(dāng)前原子操作創(chuàng)建的線程數(shù)。
其中,解析所述配置文件包括:所述執(zhí)行框架將第二類參數(shù)傳遞至所述原子操作的類的對象,并由所述原子操作的類的對象解析所述第二類參數(shù)。
其中,所述方法還包括:在所述第二類參數(shù)中,使用分布的方式描述所述原子操作的參數(shù)。
本申請公開了一種壓力模擬裝置,包括:
參數(shù)獲取模塊,用于獲取壓力模擬類型,并讀取所述模擬類型相對應(yīng)的配置文件;
解析與創(chuàng)建模塊,用于解析所述配置文件并根據(jù)所述配置文件的解析結(jié)果創(chuàng)建一定數(shù)量的線程;
壓力產(chǎn)生模塊,所述線程調(diào)用execute方法,用于根據(jù)所述配置文件的解析結(jié)果執(zhí)行與所述壓力模型相對應(yīng)的預(yù)設(shè)的原子操作。
其中,所述壓力模擬類型包括文件類型以及文件的操作類型。
所述裝置還包括原子操作封裝模塊:所述原子操作封裝模塊,用于執(zhí)行與所述壓力模型相對應(yīng)的預(yù)設(shè)的原子操作之前,將一種文件類型的一種操作類型封裝成一個原子操作。
所述解析與創(chuàng)建模塊還用于:在每個所述線程中創(chuàng)建一個原子操作的類的對象。
所述解析與創(chuàng)建模塊具體用于:由執(zhí)行框架解析第一類參數(shù),其中所述第一類參數(shù)包括所述壓力模擬類型對應(yīng)的當(dāng)前原子操作的執(zhí)行時間、所述當(dāng)前原子操作的執(zhí)行頻率以及為所述當(dāng)前原子操作創(chuàng)建的線程數(shù)。
所述解析與創(chuàng)建模塊具體用于:所述執(zhí)行框架將第二類參數(shù)傳遞至所述原子操作的類的對象,并由所述原子操作的類的對象解析所述第二類參數(shù)。
所述裝置還包括:在所述第二類參數(shù)中,使用分布的方式描述所述原子操作的參數(shù)。
與現(xiàn)有技術(shù)相比,本申請可以獲得包括以下技術(shù)效果:
1)采用配置文件的方式為壓力測試編程進(jìn)行配置描述,可以通過對配置文件的修改模擬出任意復(fù)雜的壓力測試場景;
2)將復(fù)雜的壓力生成方式拆分成不同類型的原子操作,并通過原子操作的任意組合實(shí)現(xiàn)不同場景下的壓力測試,降低迭代開發(fā)成本;
3)采用分布的方式來描述原子操作的參數(shù),使得參數(shù)可以動態(tài)變化從而動態(tài)模擬分布式集群產(chǎn)生的壓力,更加真實(shí)。
當(dāng)然,實(shí)施本申請的任一產(chǎn)品必不一定需要同時達(dá)到以上所述的所有技術(shù)效果。
附圖說明
此處所說明的附圖用來提供對本申請的進(jìn)一步理解,構(gòu)成本申請的一部分,本申請的示意性實(shí)施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:
圖1是本申請實(shí)施例一的技術(shù)流程圖;
圖2是本申請實(shí)施例二的技術(shù)流程圖;
圖3是本申請實(shí)施例三的技術(shù)流程圖;
圖4是本申請實(shí)施例四的裝置結(jié)構(gòu)示意圖。
具體實(shí)施方式
以下將配合附圖及實(shí)施例來詳細(xì)說明本申請的實(shí)施方式,藉此對本申請如何應(yīng)用技術(shù)手段來解決技術(shù)問題并達(dá)成技術(shù)功效的實(shí)現(xiàn)過程能充分理解并據(jù)以實(shí)施。
在一個典型的配置中,計(jì)算設(shè)備包括一個或多個處理器(cpu)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲器,隨機(jī)存取存儲器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲器(rom)或閃存(flashram)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。
計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實(shí)現(xiàn)信息存儲。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機(jī)存取存儲器(sram)、動態(tài)隨機(jī)存取存儲器(dram)、其他類型的隨機(jī)存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計(jì)算設(shè)備訪問的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括非暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號和載波。
如在說明書及權(quán)利要求當(dāng)中使用了某些詞匯來指稱特定組件。本領(lǐng)域技術(shù)人員應(yīng)可理解,硬件制造商可能會用不同名詞來稱呼同一個組件。本說明書及權(quán)利要求并不以名稱的差異來作為區(qū)分組件的方式,而是以組件在功能上的差異來作為區(qū)分的準(zhǔn)則。如在通篇說明書及權(quán)利要求當(dāng)中所提及的“包 含”為一開放式用語,故應(yīng)解釋成“包含但不限定于”?!按笾隆笔侵冈诳山邮盏恼`差范圍內(nèi),本領(lǐng)域技術(shù)人員能夠在一定誤差范圍內(nèi)解決所述技術(shù)問題,基本達(dá)到所述技術(shù)效果。此外,“耦接”一詞在此包含任何直接及間接的電性耦接手段。因此,若文中描述一第一裝置耦接于一第二裝置,則代表所述第一裝置可直接電性耦接于所述第二裝置,或通過其他裝置或耦接手段間接地電性耦接至所述第二裝置。說明書后續(xù)描述為實(shí)施本申請的較佳實(shí)施方式,然所述描述乃以說明本申請的一般原則為目的,并非用以限定本申請的范圍。本申請的保護(hù)范圍當(dāng)視所附權(quán)利要求所界定者為準(zhǔn)。
還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的商品或者系統(tǒng)不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種商品或者系統(tǒng)所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的商品或者系統(tǒng)中還存在另外的相同要素。
圖1是本申請實(shí)施例一的技術(shù)流程圖,結(jié)合圖1,本申請實(shí)施例一種壓力模擬方法,可以由如下的步驟實(shí)現(xiàn):
步驟s110:獲取壓力模擬類型,并讀取所述模擬類型相對應(yīng)的配置文件;
步驟s120:解析所述配置文件并根據(jù)所述配置文件的解析結(jié)果創(chuàng)建一定數(shù)量的線程;
步驟s130:所述線程調(diào)用execute方法,根據(jù)所述配置文件的解析結(jié)果執(zhí)行與所述壓力模型相對應(yīng)的預(yù)設(shè)的原子操作。
需要說明的是,本申請實(shí)施例中,預(yù)先將每個文件類型的一次寫或讀或刪除或創(chuàng)建封裝成一個原子操作,例如,現(xiàn)有的壓力測試文件有a、b、c三種文件類型,那么對于讀、寫、刪除、創(chuàng)建這四種操作類型,將會得到3*4=12種原子類型,即a文件的寫、b文件的寫、c文件的寫、a文件的讀、b文件的讀、c文件的讀、a文件的刪除、b文件的刪除、c文件的刪除、a文件的創(chuàng)建、b文件的創(chuàng)建、c文件的創(chuàng)建等等,共12種壓力測試類型。
具體的,在步驟s110中,獲取壓力模擬類型,所述壓力模擬類型可以是測試人員選擇的,也可以是壓力模擬器配置的。壓力模擬類型中主要包括文件類型以及文件的操作類型,即當(dāng)前的壓力測試想要采用哪種文件類型的 那些操作對當(dāng)前的系統(tǒng)進(jìn)行壓力測試。其中,文件的操作類型主要包括讀、寫、刪除、創(chuàng)建、調(diào)用等。不同的文件類型適用于不同的讀寫刪除創(chuàng)建等,其性能不同,自然對系統(tǒng)產(chǎn)生的壓力也不同,例如txt的讀、doc的寫等等。
對于每一種壓力模擬類型,為其配置一個相應(yīng)的配置文件,配置文件中描述了壓力模擬過程中的壓力生成方式,例如,壓力模擬類型對應(yīng)的原子操作類型、執(zhí)行時間、執(zhí)行頻率等。
比如:一個壓力場景可以表示為1個a文件的寫和1個b文件的讀。
一個典型的配置文件的描述方式舉例如下:
[a_write]
class=awrite
time=100
thread=10
qps=g1(1,2)
arg1=g4(111)
如上配置文件所示,兩個配置文件描述的壓力模擬類型分別是a文件的寫。在a文件的寫這一壓力模擬類型的配置文件中,class=awrite表示a文件的寫對應(yīng)的原子操作類型以及原子操作對應(yīng)的類的對象;time=100表示a文件的寫對應(yīng)的原子操作的執(zhí)行時間;thread=10表示為a文件的寫這一壓力模擬類型創(chuàng)建的線程數(shù);qps=g1(1,2)表示a文件的寫對應(yīng)的原子操作的執(zhí)行頻率,arg1=g4(111)表示a文件對應(yīng)的原子操作在執(zhí)行時的寫入的文件長度,其中,g()函數(shù)表示一種分布,通過分布類將其解析后通常會返回一個數(shù)值或者字符串。
具體的,在步驟s120中,首先對所述配置文件進(jìn)行解析。配置文件中主要包含兩類參數(shù),具體解析時,先由執(zhí)行框架frame對第一類參數(shù)進(jìn)行解析,其中,所述第一類參數(shù)具體包括所述壓力模擬類型對應(yīng)的當(dāng)前原子操作的執(zhí)行時間、所述當(dāng)前原子操作的執(zhí)行頻率以及為所述當(dāng)前原子操作創(chuàng)建的線程數(shù)等。
在本步驟中,當(dāng)執(zhí)行框架frame對第一類參數(shù)進(jìn)行解析的結(jié)果包括當(dāng)前原子操作創(chuàng)建的線程數(shù)時,為當(dāng)前的所述壓力模擬類型創(chuàng)建相應(yīng)數(shù)量的線程。
具體的,在創(chuàng)建線程之后,在每個所述線程中創(chuàng)建一個原子操作的類的對象,所述原子操作的類的對象是根據(jù)所述壓力模擬類型進(jìn)行創(chuàng)建的。例如,當(dāng)壓力模擬類型是“a文件的讀”時,創(chuàng)建的原子操作的類的對象即是“a文件的讀”,記為classa。所述classa能夠解析與原子操作有關(guān)的參數(shù)。因此,對于配置文件中的第二類參數(shù),所述執(zhí)行框架frame將其傳遞至classa進(jìn)行解析。
需要說明的是,所述第二類參數(shù)主要是原子操作的需求參數(shù),包括當(dāng)前原子操作的文件的長度、文件大小等。通常采用分布的方式動態(tài)描述這些參數(shù),例如cauchy(柯西分布),constant(常量分布),empirical(經(jīng)驗(yàn)分布),exponent(指數(shù)分布),extreme(極值分布),geometric(幾何分布),lognormal(對數(shù)正態(tài)分布),normal(正態(tài)分布),poisson(泊松分布),uniform(均勻分布)等。利用這些不同的分布來描述原子操作的參數(shù),使得這些參數(shù)能夠不斷的動態(tài)變化,可以在一次設(shè)置的情況下,模擬出不同的壓力生成方式,對系統(tǒng)的測試更加真實(shí),同時也能夠節(jié)省時間,避免對配置文件的不斷修改。
具體的,在步驟130中,建立的每個線程在執(zhí)行的時候,調(diào)用當(dāng)前線程中創(chuàng)建的原子操作的類的對象的execute方法,每調(diào)用一次execute方法就是執(zhí)行一次原子操作,即完成一次預(yù)設(shè)類型的壓力模擬。
本實(shí)施例中,通過將不同類型文件的不同操作封裝成原子操作并通過配置文件的方式對原子操作進(jìn)行配置描述,能夠組合成任意復(fù)雜的壓力測試場景;與此同時,采用分布的方式來描述原子操作的參數(shù),使得原子操作的參數(shù)能夠動態(tài)變化從而實(shí)現(xiàn)了對壓力的動態(tài)模擬,實(shí)現(xiàn)了更加真實(shí)的壓力測試。
圖2是本申請實(shí)施例二的技術(shù)流程圖,結(jié)合圖2,本申請一種壓力模擬方法還可以有如下可行的實(shí)施方式:
步驟s210:將不同文件類型的一次執(zhí)行操作封裝成一個原子操作。
其中,所述不同文件類型包括能夠在系統(tǒng)操作并對系統(tǒng)產(chǎn)生一定壓力的 所有文件的類型;所述執(zhí)行操作包括寫或讀或刪除或創(chuàng)建或調(diào)用等,當(dāng)然,應(yīng)當(dāng)理解,所有能夠?qū)ξ募?zhí)行的操作都應(yīng)在本發(fā)明的保護(hù)范圍之內(nèi)。
步驟s220:為壓力模擬寫配置文件。
所述配置文件中描述了產(chǎn)生模擬壓力的壓力器的壓力生產(chǎn)方式,解析所述配置文件能夠得到所述壓力器在進(jìn)行壓力模擬時采用何種壓力模擬類型、壓力模擬類型對應(yīng)的原子操作、原子操作的執(zhí)行時間、執(zhí)行頻率以及第二參數(shù)的傳遞對象等等。
本實(shí)施例中,假設(shè)現(xiàn)有file1\file2兩種不同類型的文件,其適用的兩種操作分別為讀\寫。假設(shè)file1的讀\寫、file2的讀\寫對應(yīng)的所述配置文件分別如下所展示的:
[file1_write]
class=a
qps=g1(n1)
thread=20
time=100
arg1=g1(n2)
[file1_read]
class=b
qps=g4(n3)
thread=10
time=120
arg2=g2(n4)
[file2_read]
class=c
qps=g4(n5)
thread=20
time=100
arg3=g3(n6)
[file2_write]
class=d
qps=g1(n7)
thread=20
time=150
arg4=g4(n8)
在file1_write的配置文件中,對file1這一文件類型的寫操作對應(yīng)的原子操作是a,且在為file1的寫操作創(chuàng)建線程后,在每個線程中創(chuàng)建a的類的對象classa,并由a來解析file1_write的配置文件中的第二參數(shù);qps=g1(n1)表示,以n1的g1()分布來描述file1_write對應(yīng)的原子操作的執(zhí)行頻率;thread=20,表示為file1_write這一壓力模擬創(chuàng)建20個進(jìn)程;time=100表示ile1_write對應(yīng)的原子操作的執(zhí)行時間為100;arg1=g1(n2)表示以n2的g2()f分布來描述ile1_write對應(yīng)的原子操作的文件長度。其中,每執(zhí)行一次原子操作,qps=g1(n1)以及arg1=g1(n2)都會返回一個值或者字符串供壓力器直接使用。
file1_read、file2_read以及file2_write的配置文件參考以上描述進(jìn)行理解,此處不做贅述。
需要說明的是,本申請實(shí)施例中,步驟s210和步驟s220并無固定的先后順序,也可以是先寫配置文件再進(jìn)行原子操作的封裝,上述分步描述僅供闡述說明使用,對本申請實(shí)施例并不構(gòu)成限制。
步驟s230:獲取壓力模擬類型并讀取所述壓力模擬類型對應(yīng)的配置文件。
本實(shí)施例中,壓力模擬類型可以是自定義的,可由測試人員進(jìn)行選擇。假設(shè)本實(shí)施例中,測試類型為file1文件的讀以及file2文件的寫。當(dāng)獲取到壓力模擬類型之后,可根據(jù)所述壓力模擬類型讀取寫好的配置文件,承接上一步驟中所舉的例子,本實(shí)施例中,讀取的是file1_read以及file2_write。
步驟s240:執(zhí)行框架frame對所述配置文件進(jìn)行解析并創(chuàng)建相應(yīng)的線程。
在配置文件中,執(zhí)行框架并非能夠完全解析所有的參數(shù),它只能夠解析部分特殊參數(shù),即第一類參數(shù),例如步驟s220中的class、qps、thread、tim等。除這些參數(shù)外,還有另一類參數(shù)是執(zhí)行框架frame不能直接解析的,即第二類參數(shù)。frame將自己不能解析的第二類參數(shù)傳遞給能夠?qū)Φ诙悈?shù)進(jìn)行解析的類,具體傳遞對象就是frame解析出的class。例如,承接步驟s230,執(zhí)行框架對配置文件的解析結(jié)果中,class=a,則第二類參數(shù)的將由執(zhí)行框架傳遞給classa進(jìn)行解析,例如file1_write配置文件中的arg1=g1(n2)。
所述執(zhí)行框架frame除解析配置文件以及傳遞參數(shù)之外,還需根據(jù)解析到的壓力模擬類型創(chuàng)建的線程數(shù)為當(dāng)前壓力模擬創(chuàng)建相應(yīng)數(shù)量的線程。承接步驟s220以及s230中的例子,為file1的讀操作創(chuàng)建20個線程,為file2的寫操作創(chuàng)建20個線程。
步驟s250:在每個線程中創(chuàng)建一個原子操作的類的對象并將第二參數(shù)傳遞至每個線程里的對象;
每個原子操作都是一個類,本實(shí)施例中,在每個線程中為原子操作創(chuàng)建類的對象。承接上一步驟的例子,為file1的讀操作創(chuàng)建20個線程之后,在每個線程中創(chuàng)建classa的對象,并將第二參數(shù),即arg1=g1(n2)傳遞給classa里的對象。
步驟s260:每個線程執(zhí)行調(diào)用execute方法執(zhí)行相應(yīng)的原子操作。
本步驟中,每個線程的參數(shù)配置好之后,即可調(diào)用execute方法,執(zhí)行與所述壓力模擬類型相對應(yīng)的原子操作。例如,在file1的讀操作創(chuàng)建的線程中調(diào)用execute方法時,執(zhí)行的是與file1的讀操作相對應(yīng)的原子操作;同理,若是在file2的寫操作創(chuàng)建的線程中調(diào)用execute方法時,執(zhí)行的是與file2的寫操作相對應(yīng)的原子操作。
在每個線程中,每調(diào)用一次execute方法都是執(zhí)行一次原子操作,重復(fù)執(zhí)行步驟s270直至到timeout或出現(xiàn)任何異常。
優(yōu)選的,在步驟s260之后,本申請實(shí)施例還可包括步驟s270以及步驟s280。
步驟s270:修改壓力模擬類型。
壓力測試場景越接近真實(shí)的壓力場景對系統(tǒng)抗壓能力的測試越有效,然而真實(shí)的系統(tǒng)產(chǎn)生壓力時是多變的且不定性的,因此,如上述步驟所示的單一壓力測試方式并不能夠完全滿足測試需求。本申請實(shí)施例中,當(dāng)壓力測試所需的壓力模擬類型修改或增加時,并不需要重新進(jìn)行進(jìn)行測試代碼的編寫,只需要告知進(jìn)行壓力模擬的壓力器需要進(jìn)行模擬的壓力類型是什么。
例如,本申請實(shí)施例中,測試類型更改為file1文件的寫以及file1文件的讀以及file2文件的刪除。
步驟s280:根據(jù)所述壓力模擬類型讀取相應(yīng)的配置文件。
不同壓力模擬類型的配置文件是已經(jīng)寫好的,當(dāng)獲知壓力測試的壓力模擬類型時,直接根據(jù)所需讀取現(xiàn)有的配置文件并進(jìn)行解析即可。
承接上一步驟的例子,根據(jù)壓力模擬類型讀取file1文件的寫的配置文件file1_write、file1文件的讀的配置文件file1_read以及file2文件的刪除的配置文件file2_delete。
在步驟s280之后的步驟如步驟s240~步驟s260所述,此處不做贅述。
特別的,當(dāng)壓力模擬類型增加時,將分別為不同類型的壓力模擬創(chuàng)建預(yù)設(shè)數(shù)量的線程,并在不同類型的線程中調(diào)用execute方法執(zhí)行相應(yīng)不同類型的原子操作。承接上述例子,本實(shí)施例中,將在為file1文件的寫創(chuàng)建的線程中,調(diào)用execute方法執(zhí)行寫file1文件的原子操作,在為file1文件的讀創(chuàng)建的線程中,調(diào)用execute方法執(zhí)行讀file1文件的原子操作,為file2文件的刪除創(chuàng)建的線程中,調(diào)用execute方法執(zhí)行刪除file2文件的原子操作。
當(dāng)壓力模擬類型再變化或是更加復(fù)雜時,只需獲取目標(biāo)模擬類型,便可讀取相應(yīng)的配置文件并執(zhí)行相應(yīng)的原子操作,從而通過不同類型原子操作的組合實(shí)現(xiàn)任意類型的壓力模擬。
本實(shí)施例中,通過將壓力測試拆分成不同的原子操作,并且通過不同的原子操作進(jìn)行組合的方式實(shí)現(xiàn)不同場景的壓力測試,降低了壓力測試的開發(fā)成本,簡易而高效。
圖3是本申請實(shí)施例三的技術(shù)流程圖,結(jié)合圖2,本申請一種壓力模擬方法還有如下另一種可行的實(shí)施方式:
步驟s310:將不同文件類型的一次執(zhí)行操作封裝成一個原子操作。
其中,所述不同文件類型包括能夠在系統(tǒng)操作并對系統(tǒng)產(chǎn)生一定壓力的所有文件的類型;所述執(zhí)行操作包括寫或讀或刪除或創(chuàng)建或調(diào)用等,當(dāng)然,應(yīng)當(dāng)理解,所有能夠?qū)ξ募?zhí)行的操作都應(yīng)在本發(fā)明的保護(hù)范圍之內(nèi)。
步驟s320:為壓力模擬寫配置文件。
所述配置文件中描述了產(chǎn)生模擬壓力的壓力器的壓力生產(chǎn)方式,解析所述配置文件能夠得到所述壓力器在進(jìn)行壓力模擬時采用何種壓力模擬類型、壓力模擬類型對應(yīng)的原子操作、原子操作的執(zhí)行時間、執(zhí)行頻率以及第二參數(shù)的傳遞對象等等。
本實(shí)施例中,假設(shè)現(xiàn)有file1\file2兩種不同類型的文件,其適用的兩種操作分別為讀\寫。假設(shè)file1的讀\寫、file2的讀\寫對應(yīng)的所述配置文件分別如下所展示的:
[file1_write]
class=a
qps=g1(n1)
thread=20
time=100
arg1=g1(n2)
[file1_read]
class=b
qps=g4(n3)
thread=10
time=120
arg2=g2(n4)
[file2_read]
class=c
qps=g4(n5)
thread=20
time=100
arg3=g3(n6)
[file2_write]
class=d
qps=g1(n7)
thread=20
time=150
arg4=g4(n8)
在file1_write的配置文件中,對file1這一文件類型的寫操作對應(yīng)的原子操作是a,且在為file1的寫操作創(chuàng)建線程后,在每個線程中創(chuàng)建a的類的對象classa,并由a來解析file1_write的配置文件中的第二參數(shù);qps=g1(n1)表示,以n1的g1()分布來描述file1_write對應(yīng)的原子操作的執(zhí)行頻率;thread=20,表示為file1_write這一壓力模擬創(chuàng)建20個進(jìn)程;time=100表示ile1_write對應(yīng)的原子操作的執(zhí)行時間為100;arg1=g1(n2)表示以n2的g2()f分布來描述ile1_write對應(yīng)的原子操作的文件長度。其中,每執(zhí)行一次原子操作,qps=g1(n1)以及arg1=g1(n2)都會返回一個值或者字符串供壓力器直接使用。
file1_read、file2_read以及file2_write的配置文件參考以上描述進(jìn)行理解,此處不做贅述。
需要說明的是,本申請實(shí)施例中,步驟s310和步驟s320并無固定的先后順序,也可以是先寫配置文件再進(jìn)行原子操作的封裝,上述分步描述僅供闡述說明使用,對本申請實(shí)施例并不構(gòu)成限制。
步驟s330:獲取壓力模擬類型并讀取所述壓力模擬類型對應(yīng)的配置文件。
本實(shí)施例中,壓力模擬類型可以是自定義的,可由測試人員進(jìn)行選擇。假設(shè)本實(shí)施例中,測試類型為file1文件的讀以及file2文件的寫。當(dāng)獲取到壓力模擬類型之后,可根據(jù)所述壓力模擬類型讀取寫好的配置文件,承接上一步驟中所舉的例子,本實(shí)施例中,讀取的是file1_read以及file2_write。
步驟s340:執(zhí)行框架frame對所述配置文件進(jìn)行解析并創(chuàng)建相應(yīng)的線程。
在配置文件中,執(zhí)行框架并非能夠完全解析所有的參數(shù),它只能夠解析部分特殊參數(shù),即第一類參數(shù),例如步驟s320中的class、qps、thread、time等。除這些參數(shù)外,還有另一類參數(shù)是執(zhí)行框架frame不能直接解析的,即第二類參數(shù)。frame將自己不能解析的第二類參數(shù)傳遞給能夠?qū)Φ诙悈?shù)進(jìn)行解析的類,具體傳遞對象就是frame解析出的class。例如,承接步驟s230,執(zhí)行框架對配置文件的解析結(jié)果中,class=a,則第二類參數(shù)的將由執(zhí)行框架傳遞給classa進(jìn)行解析,例如file1_write配置文件中的arg1=g1(n2)。
所述執(zhí)行框架frame除解析配置文件以及傳遞參數(shù)之外,還需根據(jù)解析到的壓力模擬類型創(chuàng)建的線程數(shù)為當(dāng)前壓力模擬創(chuàng)建相應(yīng)數(shù)量的線程。承接步驟s320以及s330中的例子,為file1的讀操作創(chuàng)建20個線程,為file2的寫操作創(chuàng)建20個線程。
步驟s350:在每個線程中創(chuàng)建一個原子操作的類的對象并將第二參數(shù)傳遞至每個線程里的對象;
每個原子操作都是一個類,本實(shí)施例中,在每個線程中為原子操作創(chuàng)建類的對象。承接上一步驟的例子,為file1的讀操作創(chuàng)建20個線程之后,在 每個線程中創(chuàng)建classa的對象,并將第二參數(shù),即arg1=g1(n2)傳遞給classa里的對象。
步驟s360:每個線程執(zhí)行調(diào)用execute方法執(zhí)行相應(yīng)的原子操作。
本步驟中,每個線程的參數(shù)配置好之后,即可調(diào)用execute方法,執(zhí)行與所述壓力模擬類型相對應(yīng)的原子操作。例如,在file1的讀操作創(chuàng)建的線程中調(diào)用execute方法時,執(zhí)行的是與file1的讀操作相對應(yīng)的原子操作;同理,若是在file2的寫操作創(chuàng)建的線程中調(diào)用execute方法時,執(zhí)行的是與file2的寫操作相對應(yīng)的原子操作。
在每個線程中,每調(diào)用一次execute方法都是執(zhí)行一次原子操作,重復(fù)執(zhí)行步驟s370直至到timeout或出現(xiàn)任何異常。
優(yōu)選的,在步驟s360之后,本申請實(shí)施例還可包括步驟s370以及步驟s380。
步驟s370:修改壓力模擬類型對應(yīng)的的配置文件。
在本實(shí)施例中,假設(shè)這樣一種壓力測試場景,對file1的寫操作的測試時間需要加長,且測試頻率需要更快,按照本申請實(shí)施例的技術(shù)方案,不需要重新編寫測試程序,只需更改file1的寫操作的配置文件即可,配置文件中的第一類參數(shù)和第二類參數(shù)都可根據(jù)測試的需要進(jìn)行修改。
承接步驟s320中的例子,file1的寫操作的配置文件可以更改如下:
[file1_write]
class=a
qps=g1(n7)
thread=20
time=200
arg1=g1(n8)
上述對配置文件的修改,更新了寫file1原子操作對應(yīng)的執(zhí)行頻率,創(chuàng)建的線程數(shù)、執(zhí)行時間以及寫文件的長度等。當(dāng)然,應(yīng)當(dāng)理解,上述修改僅供舉例使用,對本申請實(shí)施例不構(gòu)成任何限制。
本申請實(shí)施例中,當(dāng)壓力測試所需的壓力模擬類型的壓力生成方式產(chǎn)生變化時,并不需要重新進(jìn)行進(jìn)行測試代碼的編寫,只需更改相應(yīng)的配置文件即可實(shí)現(xiàn)不同場景、不同壓力大小的壓力測試。
步驟s380:執(zhí)行框架frame對所述配置文件進(jìn)行解析并創(chuàng)建相應(yīng)的線程。
在上一步驟中,配置文件經(jīng)過修改更新,此步驟中,需重新讀取更新后的配置文件,并對更新后的配置文件進(jìn)行解析,從而根據(jù)配置文件產(chǎn)生目標(biāo)壓力對系統(tǒng)進(jìn)行測試。
在步驟s380之后的步驟如步驟s350~步驟s360所述,此處不做贅述。
本實(shí)施例中,通過修改不同壓力測試類型對應(yīng)的配置文件,改變壓力模擬的壓力產(chǎn)生方式,即使壓力測試的要求有所更改,也無需增加新的測試代碼,修改配置文件即可模擬出任意場景的壓力測試。
圖4是本申請實(shí)施例四的裝置結(jié)構(gòu)示意圖,結(jié)合圖4,本申請一種壓力模擬裝置,包括:
參數(shù)獲取模塊410,用于獲取壓力模擬類型,并讀取所述模擬類型相對應(yīng)的配置文件;
解析與創(chuàng)建模塊420,用于解析所述配置文件并根據(jù)所述配置文件的解析結(jié)果創(chuàng)建一定數(shù)量的線程;
壓力產(chǎn)生模塊430,所述線程調(diào)用execute方法,用于根據(jù)所述配置文件的解析結(jié)果執(zhí)行與所述壓力模型相對應(yīng)的預(yù)設(shè)的原子操作。
其中,所述壓力模擬類型包括文件類型以及文件的操作類型。
所述裝置還包括原子操作封裝模塊440:所述原子操作封裝模塊,用于執(zhí)行與所述壓力模型相對應(yīng)的預(yù)設(shè)的原子操作之前,將一種文件類型的一種操作類型封裝成一個原子操作。
所述解析與創(chuàng)建模塊420還用于:在每個所述線程中創(chuàng)建一個原子操作的類的對象。
所述解析與創(chuàng)建模塊420具體用于:由執(zhí)行框架解析第一類參數(shù),其中所述第一類參數(shù)包括所述壓力模擬類型對應(yīng)的當(dāng)前原子操作的執(zhí)行時間、所述當(dāng)前原子操作的執(zhí)行頻率以及為所述當(dāng)前原子操作創(chuàng)建的線程數(shù)。
所述解析與創(chuàng)建模塊420具體用于:所述執(zhí)行框架將第二類參數(shù)傳遞至所述原子操作的類的對象,并由所述原子操作的類的對象解析所述第二類參數(shù)。
所述裝置還包括:在所述第二類參數(shù)中,使用分布的方式描述所述原子操作的參數(shù)。
圖4所示實(shí)施例可以執(zhí)行圖1、圖2及圖3所示實(shí)施例所述方法,其實(shí)現(xiàn)原理和技術(shù)效果不做贅述。
上述說明示出并描述了本發(fā)明的若干優(yōu)選實(shí)施例,但如前所述,應(yīng)當(dāng)理解本發(fā)明并非局限于本文所披露的形式,不應(yīng)看作是對其他實(shí)施例的排除,而可用于各種其他組合、修改和環(huán)境,并能夠在本文所述發(fā)明構(gòu)想范圍內(nèi),通過上述教導(dǎo)或相關(guān)領(lǐng)域的技術(shù)或知識進(jìn)行改動。而本領(lǐng)域人員所進(jìn)行的改動和變化不脫離本發(fā)明的精神和范圍,則都應(yīng)在本發(fā)明所附權(quán)利要求的保護(hù)范圍內(nèi)。