對于性能測試工具,它的性能腳本執(zhí)行效率,決定了在一個加壓的機器上,能夠運行多少個虛擬用戶(virtual user)。比如,執(zhí)行一個測試腳本的時間是100ms,相對于執(zhí)行相同的測試腳本時間為20ms,就相差了5倍。
在早期的performanceRunner(簡稱PR)版本,單臺壓力機的較大虛擬用戶大概在300-500左右。當(dāng)使用更高的虛擬用戶,會導(dǎo)致性能數(shù)據(jù)不準(zhǔn)確,無法達到較大壓力。
PR的較新版本,改進了測試腳本的核心算法,使得單個腳本的執(zhí)行時間大幅度縮減,這樣就可以執(zhí)行更多的VU。
我們知道,PR和JMeter都采用了beanshell作為腳本。根據(jù)各個腳本語言的性能對比測試(與python、js、java等),我們可以發(fā)現(xiàn),beanshell是性能較糟糕的腳本語言。因此,其實不是非常適合用來做高性能處理。具體的內(nèi)容,如果讀者有興趣可以去搜索網(wǎng)站上關(guān)于beanshell的相關(guān)文章。
那么,如果提升beanshell腳本的執(zhí)行效率,就是PR執(zhí)行器提升VU的核心問題。
通過研究我們發(fā)現(xiàn),beanshell的腳本執(zhí)行,具有2個步驟:第一,把腳本編譯成語法樹;第二,執(zhí)行語法樹上的語法元素。從編譯原理的角度來看,編譯的復(fù)雜度比執(zhí)行高很多,也就是說,beanshell的測試腳本執(zhí)行,大多數(shù)的時間用在編譯上。
對于性能測試而言,單個腳本基本是不改變的,但是它需要倍執(zhí)行上萬次,甚至百萬次。
如果我們能夠讓系統(tǒng)只執(zhí)行一次編譯,之后都只執(zhí)行語法樹,而不再編譯,是不是可以大幅度提升系統(tǒng)的性能?
按照以上的原來,我們在PR中,對測試腳本執(zhí)行進行了優(yōu)化,果然,性能得到大幅度提升,比原來快了5倍以上?。?!也就是執(zhí)行測試腳本的所消耗時間,縮短到不足原來的20%。
這樣,我們就使得加壓機上的較大VU格式,提升到能夠支持2000 VU(在十代i7上)。
帶來的好處是顯而易見的。比如,我們要執(zhí)行4萬VU的一次性能測試,原來較多只能執(zhí)行較大VU格式為200的設(shè)備的前提下,我們需要200臺設(shè)備,才能夠達到需要?,F(xiàn)在,在十代i7的設(shè)備下,我們可以只使用20臺設(shè)備,即可實現(xiàn)4萬VU的性能測試!
節(jié)省了大量的設(shè)備,同時也減少了軟件安裝部署、執(zhí)行監(jiān)控的時間。對于需要進行海量壓力加壓的客戶而言,價值非常高。
推薦閱讀:
本文內(nèi)容不用于商業(yè)目的,如涉及知識產(chǎn)權(quán)問題,請權(quán)利人聯(lián)系SPASVO小編(021-60725088-8054),我們將立即處理,馬上刪除。