李金萌
關(guān)鍵詞:性能測試;性能測試工具;LoadRunner;JMeter
1 資產(chǎn)管理系統(tǒng)的介紹
隨著現(xiàn)在信息化時(shí)代的快速發(fā)展,對計(jì)算機(jī)軟件的要求也越來越高,特別是對于資產(chǎn)管理系統(tǒng)來說,如何提高資產(chǎn)管理系統(tǒng)的準(zhǔn)確性、便捷性以及后期維護(hù)起來的困難性。對于資產(chǎn)系統(tǒng)來說,需要符合用戶的需求、實(shí)際工作中的需要、對企業(yè)資產(chǎn)信息維護(hù)是迫切的,該系統(tǒng)就是基于這樣的需求開發(fā)出來的資產(chǎn)管理系統(tǒng),對于用戶來說,減少手動(dòng)分析數(shù)據(jù)的事情,對于管理人員來說,將其交給資產(chǎn)管理系統(tǒng),可以提高工作質(zhì)量和效率[1]。
2 LoadRunner 和JMeter 基于資產(chǎn)管理系統(tǒng)的不同
2.1 腳本添加
腳本的添加是性能測試最基本的內(nèi)容,后面所有的操作基本上都是基于腳本的操作,然而LoadRunner和JMeter對于腳本添加來說,區(qū)別還是很大的。
對于LoadRunner來說,腳本的添加其實(shí)是錄制腳本并回放,需要使用LoadRunner—Virtual User Gen?erator錄制腳本并進(jìn)行回放。腳本內(nèi)容基本上是進(jìn)行錄制的,錄制成功后對部分腳本內(nèi)容進(jìn)行代碼的添加和修改,然而對于JMeter來說,是腳本添加和運(yùn)行。對于JMeter的來說需要注意的是:JMeter中一個(gè)腳本即是一個(gè)測試計(jì)劃,也是一個(gè)管理單元。然而在測試計(jì)劃中,測試計(jì)劃只有一個(gè);測試計(jì)劃中至少要有一個(gè)線程組;測試計(jì)劃中至少要有一個(gè)取樣器;測試計(jì)劃中至少要有一個(gè)監(jiān)聽器。腳本中還需添加HTTPCookie 管理器、Sampler-HTTP 請求、Web 服務(wù)器、HTTP請求等元件。
針對腳本添加來說,LoadRunner使用性會比JMe?ter更加方便,對于初學(xué)者來說,LoadRunner更加容易接受,但對公司來說,使用各有千秋。
2.2 思考時(shí)間
思考時(shí)間是對于性能測試來說很關(guān)鍵的,也有另外一種說法叫休眠時(shí)間,從業(yè)務(wù)的角度來說,思考時(shí)間其實(shí)就是用戶在進(jìn)行某些操作時(shí)和下一個(gè)操作之間需要的間隔。對于交互式應(yīng)用來說,用戶在使用資產(chǎn)管理系統(tǒng)的時(shí)候,請求不是一直不斷地點(diǎn)擊發(fā)出的,而是用戶在發(fā)出一個(gè)請求后,需要等待一段時(shí)間,才進(jìn)行下一個(gè)請求發(fā)出[2]。因此,從性能測試實(shí)現(xiàn)的角度來說,要真實(shí)地模擬用戶操作,就必須在測試腳本中讓各個(gè)操作之間等待一段時(shí)間。
思考時(shí)間的設(shè)置,LoadRunner和JMeter都是需要手動(dòng)添加的,針對于LoadRunner來說,就是需要在進(jìn)行操作之前放置一個(gè)思考時(shí)間的函數(shù)——ThinkTime,具體思考時(shí)間可以根據(jù)實(shí)際需求進(jìn)行填寫,這樣可以在兩個(gè)操作的中間加一個(gè)緩沖時(shí)間,可以讓下一個(gè)操作頁面充分的加載。比如,當(dāng)前操作因?yàn)榫W(wǎng)速等原因沒有正常的顯示,這個(gè)時(shí)候就可以使用到lr_think_time()函數(shù),括號里面寫上具體的思考時(shí)間,例如:3秒。在回放的時(shí)候,如果想看到具體思考時(shí)間的回放結(jié)果,需要在Runtime Settings 中選擇ThinkTime中選擇:Replay think time as recorded,這樣在回放腳本時(shí),就可以查看日志中思考時(shí)間回放結(jié)果。如圖1所示。
對于在JMeter腳本中,思考時(shí)間是用定時(shí)器來模擬實(shí)現(xiàn)的。主要有固定定時(shí)器和高斯隨機(jī)定時(shí)器,兩個(gè)都是可以選擇的,其中,如果需要讓線程按指定的時(shí)間停頓,這個(gè)時(shí)候就需要選擇固定定時(shí)器(ConstantTimer) 。但如果需要讓線程在請求前按隨機(jī)時(shí)間停頓,那么可以使用高斯隨機(jī)定時(shí)器(Gaussian RandomTimer) ,在設(shè)置過程中選擇,偏差:設(shè)置的偏差值,是一個(gè)浮動(dòng)范圍,單位毫秒。固定延遲偏移:固定延遲時(shí)間[3]。比如:偏差設(shè)置1000毫秒,固定延遲偏移設(shè)置3000毫秒,如圖2所示。
對于“事務(wù)控制器”來說,定時(shí)器相當(dāng)于LoadRun?ner中的Think Time。對于思考時(shí)間來說,固定思考時(shí)間是一樣的,但是在JMeter中的高斯隨機(jī)定時(shí)器和固定思考時(shí)間不同,高斯隨機(jī)定時(shí)器是讓線程在請求前按隨機(jī)時(shí)間停頓,在思考時(shí)間方面,JMeter 比Load?Runner更加靈活。
2.3 檢查點(diǎn)
對于檢查點(diǎn)來說,如果是針對添加成功等操作,需要設(shè)置檢查點(diǎn)來進(jìn)行驗(yàn)證。腳本回放成功,只是代表請求成功,并不能代表請求的業(yè)務(wù)成功。要判斷業(yè)務(wù)是否成功,就需要在腳本中加入檢查點(diǎn)[4]。
對于LoadRunner來說,檢查點(diǎn)的原理是在回放腳本時(shí)搜索特定的文本、字符串或者服務(wù)器返回的文字、返回的code鍵值等設(shè)置檢查點(diǎn),從而驗(yàn)證請求業(yè)務(wù)的正確性。而對于JMeter來說,檢查點(diǎn)主要是通過斷言組件來實(shí)現(xiàn)的。
對于LoadRunner來說,檢查點(diǎn)的設(shè)置主要是使用函數(shù)--web_reg_find函數(shù)。在設(shè)置檢查點(diǎn)時(shí),需要注意的是必須將web_reg_find函數(shù)放到該操作前面,否則該檢查點(diǎn)的結(jié)果就會出錯(cuò)。例如:服務(wù)器返回的值是 OK,在 腳 本 中 添 加 web_reg_find“( Text=OK”,LAST) ;,運(yùn)行成功后可以再回放結(jié)果中查看檢查點(diǎn)設(shè)置是否成功。
斷言組件通過獲取服務(wù)器響應(yīng)數(shù)據(jù),然后根據(jù)斷言規(guī)則去匹配這些響應(yīng)數(shù)據(jù);匹配到是正?,F(xiàn)象,此時(shí)看不到任何提醒,如果匹配不到,即出現(xiàn)了異常情況,此時(shí)JMeter就會斷定這個(gè)請求失敗,那么在查看結(jié)果樹中看到的請求名稱就是紅色字體。斷言組件有多個(gè),檢查點(diǎn)可以運(yùn)用響應(yīng)斷言元件來實(shí)現(xiàn)[5]。
斷言添加成功后,進(jìn)行斷言結(jié)果的查看,需在測試計(jì)劃中添加監(jiān)聽器-斷言結(jié)果。對于請求,正常通過時(shí)在斷言結(jié)果里面會打印一行請求的名稱;如沒有通過,在斷言結(jié)果里有請求的名稱,以及出現(xiàn)失敗的原因。如果不同類型的斷言,則顯示的斷言結(jié)果不同。
對于檢查點(diǎn)來說,LoadRunner和JMeter是非常重要的元件,LoadRunner添加后只需運(yùn)行后查看檢查點(diǎn)即可,而對于JMeter,是添加監(jiān)聽器-斷言結(jié)果,才可看到斷言的結(jié)果。
2.4 參數(shù)化
性能測試工具通常會模擬多個(gè)用戶對系統(tǒng)進(jìn)行操作。比如現(xiàn)在對于新增資產(chǎn)登錄,資產(chǎn)名稱進(jìn)行參數(shù)化。對于LoadRunner來說,對于資產(chǎn)名稱進(jìn)行參數(shù),在回放的時(shí)候,可以對參數(shù)化里面的數(shù)據(jù)進(jìn)行數(shù)據(jù)順序選擇,每次都進(jìn)行更新[6]。在回放的結(jié)果中也可以看到參數(shù)的具體取值情況,如圖3所示。
然而對于JMeter來說,創(chuàng)建CSV數(shù)據(jù)文件設(shè)置,文件的位置以及變量名稱,文件是.dat文件,需要提前創(chuàng)建好的。設(shè)置好CSV數(shù)據(jù)文件設(shè)置,需要到對應(yīng)的地方將值設(shè)置為${value},這樣整個(gè)過程才算是可以的。在查看結(jié)果樹中,查看參數(shù)取值如圖4所示。
對于LoadRunner和JMeter來說,參數(shù)化是同樣重要,因?yàn)槟M用戶登錄,或者進(jìn)行多條信息進(jìn)行添加,這個(gè)時(shí)候使用參數(shù)化來說會更加便捷。
2.5 事務(wù)與集合點(diǎn)
事務(wù)(Transaction) :為了衡量服務(wù)器的性能,需要定義事務(wù)。比如:在登錄時(shí),可以對登錄操作設(shè)置成一個(gè)事務(wù)[7]。
在LoadRunner 中設(shè)置事務(wù)需要有開始事務(wù)和結(jié)束事務(wù),而且事務(wù)的運(yùn)行時(shí)間會在結(jié)果中顯示[8]。在LoadRunner中,添加事務(wù)操作可以在錄制過程中進(jìn)行添加,也可以在錄制結(jié)束后選擇插入步驟進(jìn)行添加。而且,LoadRunner 對于事務(wù)的數(shù)量是沒有限制的。在JMeter中,事務(wù)是通過定時(shí)器-Synchronizing Timer實(shí)現(xiàn)的。
集合點(diǎn)是達(dá)到特定的用戶數(shù)后再“一起”進(jìn)行某個(gè)操作,比如“一起”進(jìn)行登錄,“一起”進(jìn)行新增資產(chǎn)維修等[9],其中,“一起”就是集合點(diǎn)設(shè)置的內(nèi)涵所在。
對于LoadRunner 來說,集合點(diǎn)使用的函數(shù)是lr_rendezvous“( login”),后面在分析器中需要對集合點(diǎn)策略進(jìn)行設(shè)置,而在JMeter中,增加同步定時(shí)器元件就可以。
集合點(diǎn)的使用可以進(jìn)行壓力測試,這對于Load?Runner 和JMeter 來說都是很重要的,在使用方面,LoadRunner需要設(shè)置集合點(diǎn)策略,在LoadRunner中集合點(diǎn)策略的設(shè)置是在控制器中,比較容易遺漏。
3 小結(jié)
對于資產(chǎn)管理系統(tǒng)來說,性能測試可以使用不同的性能測試工具,只是在具體的使用方面不一樣。對于LoadRunner 來說是三個(gè)組件,分別是Virtual UserGenerator、Controller、Analysis[10],在使用方面來說,JMeter更方便些,不需要使用那么多的組件。對于腳本添加來說,初學(xué)者使用LoadRunner會更加方面,因?yàn)槟_本是通過錄制生成的;對于思考時(shí)間來說,JMeter除了固定式定時(shí)器來說,還有高斯定時(shí)器;對于檢查點(diǎn)來說,LoadRunner 添加后只需要在運(yùn)行后查看即可,然而對于JMeter來說,是需要進(jìn)行添加監(jiān)聽器-斷言結(jié)果,才可以看到斷言的結(jié)果;對于參數(shù)化來說,兩個(gè)工具基本上差不多;對于事務(wù)來說,LoadRunner需要添加開始事務(wù)和結(jié)束事務(wù),而JMeter只需要添加定時(shí)器-Synchronizing Timer 即可;對于集合點(diǎn)來說,LoadRunner設(shè)置集合點(diǎn)時(shí),需在控制器中設(shè)置集合點(diǎn)策略。
兩個(gè)性能測試工具都有自己的特點(diǎn),沒有說哪個(gè)工具一定比另外一個(gè)工具強(qiáng),公司在選擇工具使用方面,不僅考慮使用方面,還要考慮費(fèi)用方面的問題。但是不管使用哪個(gè)性能測試工具,都是為了提高測試的速度和質(zhì)量。