利用jmeter對mysql數(shù)據(jù)庫進行壓力測試_第1頁
利用jmeter對mysql數(shù)據(jù)庫進行壓力測試_第2頁
利用jmeter對mysql數(shù)據(jù)庫進行壓力測試_第3頁
利用jmeter對mysql數(shù)據(jù)庫進行壓力測試_第4頁
利用jmeter對mysql數(shù)據(jù)庫進行壓力測試_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

利用jmeter對mysql數(shù)據(jù)庫進行壓力測試前期準備工作:Jmeter的安裝包可以在公司W:\engineering\software\linux\jmeter下可以找到oJmeter的運行需要java環(huán)境的支持的,要運行jmeter首先要安裝JDKjava運行環(huán)境,此安裝包可以在公司的W:\engineering\software\linux\java下找到。此外要使用jmeter對mysql進行壓力測試還要安裝mysql的JDBC驅動,例如驅動包mysql-connector-java-5.1.14-bin放到jmeter的解壓包下的lib文件夾下。這樣測試環(huán)境就部署好了,接下來進行測試計劃的創(chuàng)建。創(chuàng)建測試計劃:1.添加用戶(1)添加線程組測試計劃9添加9線程組,如下圖所示。線程組◎錐續(xù)0倍止踐程0線程組◎錐續(xù)0倍止踐程0倍止測試銭程屬性Ramp-UpP&riod(inseconds^:1狷曲真埶□永遠”□I周度器蜒程組 I:iff:在肌祥器錯課啟要楓務的動作“線程數(shù)”表示的是JMeter會同時創(chuàng)建多少個線程來進行壓力測試,對于一個網站而言,也就是模擬一次存在多少個用戶來訪問該網站;而"Ramp-UpPeriod(inseconds)”表示JMeter每個秒發(fā)動多少并發(fā);"循環(huán)次數(shù)”則是指配置好的并發(fā)情形發(fā)生多少次。

這里新增一個線程組,重命名為“JDBCUSER”,如下圖所示。⑵在"線程組”下創(chuàng)建一個"UserDefinedVariables”JDBCUSER9天加一>配置元器件9用戶自定義的變量即用戶自定義變量,重命名為“我們定義的動態(tài)語句部分”,這里我們使用它來生成動態(tài)SQL語句,讓用戶每次訪問數(shù)據(jù)庫的SQL語句都不一樣,這樣減少mysql數(shù)據(jù)庫對相同SQL語句的緩存對測試結果所帶來的影響??梢杂肅trl+F來打開函數(shù)代碼輔助工具生成我們所需的函數(shù)調用。

2)接下來是配置JDBC連接設置JDBCUSER9添加一>配置元器件9JDBCConnectionConfigurationJDBCConnectionConfiguration名稱二JDBCConneclionConfigurationVariableHamoBoundt&PoolVariableName:MYSQLCoran&ctionP&olConfigurationJDBCDriverclaasiUsername;Password:匚oneihelionValFdaliunbyPoolDatabaseConnactionConftgurationDatabaseURL:創(chuàng)建一個具體的JDBC請求JDBCUSER9添加9Sampler9JDBCRequest,如下圖所示。名稱KocakVariableMams:M/sqlJDBCRequestSQLQueryParametervalu&SL昭_Random(1,200,accourtde-0_.AC00UNT_ID■}Parametertypes:iniselectacccuntserO_.IDasID4&_0_,accountserO_.ACCQUNf^l□asACCOUNT2_45_0_名稱KocakVariableMams:M/sqlJDBCRequestSQLQueryParametervalu&SL昭_Random(1,200,accourtde-0_.AC00UNT_ID■}Parametertypes:iniselectacccuntserO_.IDasID4&_0_,accountserO_.ACCQUNf^l□asACCOUNT2_45_0_1acccuntserO_.NAMEsbNAME45_0accDuntserO_.DESCRIP710NasDESCRIPT4_45_0_,accountserO_TAGSasTAGS45_0._.accounts&r0_.WEB8FTEasWESSITE45_0_.acccuntserO_.EXPERIENCEasEXPERIENCE45._0_fromwrtmysql.account_serviceaccounts&r0_whereaccduntser0_.ACCQUNT_I□=?:Q:H&jyT^pe:Pr&par&dSelectStatementthePoolName:MySQL(sameasintheconfigurationelement)"QueryType"中選擇的是預編譯語句;SQL語句當中,動態(tài)內容的代碼行是"whereaccountserO_.ACCOUNT_ID二?〃,這里的〃?〃就是預編譯語句中的動態(tài)參數(shù),在屬性頁下面的"ParameterValues〃和"Parametertypes"來指定,由于預編譯語句在Java教程已有很多講解,這里不再贅述。(4)創(chuàng)建監(jiān)聽器JDBCUSER9添加9監(jiān)聽器9圖形結果(5)保存測試計劃文件9保存測試計劃案例http:///s/2009T0-28/10361112119.shtml【IT168技術文檔】作為一名開發(fā)人員,大多情況下都會認真的做好功能測試,但是卻常常忽略了軟件開發(fā)之后的壓力測試,尤其是在面向大量用戶同時使用的Web應用系統(tǒng)的開發(fā)過程,壓力測試往往是不夠充分的。近期我在一個求職招聘型的網站項目中就對壓力測試的重要性體會頗深。在項目中,我負責開發(fā)職位信息的搜索部分,但是由于缺乏壓力測試,倉促將搜素部分的功能提交到生產環(huán)境,結果當并發(fā)量稍稍到達一定程度時,數(shù)據(jù)庫系統(tǒng)便已經不堪重負。無奈之下向網上資源查詢解決方法,其中一個就是對現(xiàn)有的應用做足夠到位的壓力測試。壓力測試有著很豐富的內容,而這里,我只針對應用中所遇到的問題以及解決方法做一個簡單的描述,希望對以后遇到同樣問題的朋友能夠起到些許幫助作用。我自己做的例子使用的環(huán)境是:測試工具:JMeter2.3.1數(shù)據(jù)庫:Oracle10G其他環(huán)境:JDK1.6.0_05(也可以使用JDK1.4及以上版本)創(chuàng)建好的JMeter測試計劃樹形結構圖如下:

亍払懊的的救幄鱷測軾訃珈I?;使劭庚北的藝L來融歌諾隼國力測試渺戳帕定文的動憲沿旬…粉血BC連協(xié)設賣彳*產品塔堂丈羌曬爭JDBCRequest卜才嚴晶名li燉JOBCRecfue^亍払懊的的救幄鱷測軾訃珈I?叵I甲衰胳來看響應吐杲囹樹形斤式若結果囹曲理WorkB&rcth在剛打開JMeter的時候,默認會存在兩個節(jié)點,一個是“TestPlan",點擊這個節(jié)點,在右邊的屬性頁面中,命名為“我們的數(shù)據(jù)庫測試計劃”在屬性頁的最下面,我們看到設置jar包所在路徑的選項,默認存在一個選項"E:\software\develop\testunit\jMeter\jakarta—jmeter—2.3.1\lib",這個是我的機器中JMeter的lib目錄,在這個例子中,Oracle的jdbc驅動也已經拷貝到該目錄下。內容導航新增一個“ThreadGroup”,重命名為“使用變化的SQL來做數(shù)據(jù)庫壓力測試"。其中,"NumberofThreads"表示的是JMeter會同時創(chuàng)建多少個線程來進行壓力測試,對于一個網站而言,也就是模擬一次存在多少個用戶來訪問該網站;而"Ramp-UpPeriod(inseconds)"表示JMeter每個多少秒發(fā)動并發(fā);"LoopCount”則是指配置好的并發(fā)情形發(fā)生多少次。在“TheadGroup"下創(chuàng)建一個“UserDefinedVariables”,即用戶自定義變量,重命名為"我們定義的動態(tài)語句部分”,這里我們使用它來生成動態(tài)SQL語句,讓用戶每次訪問數(shù)據(jù)庫的SQL語句都不一樣,這樣減少Oracle數(shù)據(jù)庫對相同SQL語句的緩存對測試結果所帶來的影響。CornmemsName:|我們定乂的動態(tài)甬鋸丹UserDefinedVariablesuscfDermetivariablesCornmemsName:|我們定乂的動態(tài)甬鋸丹UserDefinedVariablesuscfDermetivariablesNamef[Valuestr \${_split(D610or3gie本Q61Dor”2。|"2。服務器.keywordj)}mzny.sqipnamelike*%D610%'orp^nametike%AJX抵[p^name!fkeF筆…smt澱一創(chuàng)i!%訕n7」織簡訛|)}變量定義的完整內容如下:NameValue-strJLsplit(D610ofMt3^|D610orn620|D620|^器民河o「d」)}many_sqlp_namelike'^DGIO^orp_namelikeMX^'If>_namelike綏筆記本喝orp_namelikeTO610W|pnamelike^D610%J|pnamelike^IX%' -srrit辭split^rrianyBql},smt,|)}注:${__split(...)}是JMeter中自帶的拆分字符串為數(shù)組的函數(shù),可以通過JMeter工具欄"Options"->"FunctionHelperDialog"來打開函數(shù)代碼輔助工具生成我們所需的函數(shù)調用。另外有個需要注意的問題是:在${__split(...)}中,如果拆分字符串中的內容包含有符號〃,〃,一定得用符號〃\〃進行轉義,否則可能被JMeter誤認為是參數(shù)分隔符,會導致無法正確生成字符串數(shù)組。內容導航接下來是配置JDBC連接設置JDBCConnectionConfigurationName:|jDB^連接設蠱Comments:VariableNameBoundtoP?jo!VariableName:ConnectionP導也Configuration匚onnectionValidation昨PuulDatabaseConneciionConfigurationDatabaseURL:jcibd;oracle:triin:@i:27.O.O.1:1521'OracleJDBCDriverclass:oratle.jdbc.driyer.OracleDriverUsername:■testPassword:;■test創(chuàng)建一個具體的JDBC請求

JDBCRequest麻簡世p巳墻全冥關程字JDei5Rg4LJQSt iCcmmcntE:VaFi^leNanusGniuidtoPoolk/ariahlEMaEtic:SQLQtitjfyGuerylypo:tTofiarcd^sieclSlateineiit ▼Queryselect^FROm(se-lectp.p_id,pp_narmc,c.cm|:_naimsfromteGt_productp,tBst_coFnpan\cwh0<ep.tfnp_id-c.cmp」日anccorrtainsfp.p_name,*0and^i.p,-nairielike嗚D映pp.|).帖附總lik&鳴aix巴)ORDERB?p.pjditrYiUWHERE1=1ANDRDWNUW100)WHLRE1 1ANDm>=1 __MH = ParamctorvaEues:i$(_/(Kevwcrd_5!_Rar-dQm(1|1.rn(l}}])7/V)/W也idlWei(KnaS^yflpC-HAF 1—x:—f LL——"QueryType"中選擇的是預編譯語句;SQL語句當中,動態(tài)內容的代碼行是"andcontains(p.p_name,?)>0",這里的"?"就是預編譯語句中的動態(tài)參數(shù),在屬性頁下面的"ParameterValues"和"Parametertypes"來指定,由于預編譯語句在Java教程已有很多講解,這里不再贅述。注:這里有一個JMeter的函數(shù)〃_V...〃沒有提到,將在后面說明另外一個JDBC調用測試的時候進行補充。內容導航創(chuàng)建三個監(jiān)聽器,可以從三個不同的層面來觀察響應結果0用我將來看響曲給果0用我將來看響曲給果曲線圖看響應執(zhí)行一下測試計劃,我們來看看三個監(jiān)聽器所返回的結果是怎樣的。V?e=wRe-suttsinTableName;舟童將貳春響盡嶄杲 「 |CbnunenH!財巾電I色紳rt±iDni?;R?3Lirii]miii?Filcnomc Browse.~LoG/l3i3ialay-(MK:□Etfo「毛 SuccessesGonfigBrf : L *Sample#jThreadNameLstid羽請頁ME贋H孌他帕門味熾數(shù)據(jù)爭助砒…鬥翱全艾則坤血恥曲…

13CS Sample#jThreadNameLstid羽請頁ME贋H孌他帕門味熾數(shù)據(jù)爭助砒…鬥翱全艾則坤血恥曲…

13CS :凝冥優(yōu)啟家斥苗藪傭岸壓力族二證磊君堂文英融士」D肌R&..13C821^75使用荒優(yōu)的旳未啟;揺穿迂力訓膩產謁車圭疫子聲左JDBCRt.■13伽:曲4闘價用時熾購味謝張洞犀岳力麗」亠鬥它交矣孵!J0歸二心:皿:曲戲丁便胃獎化的3味做數(shù)祐岸壓劃M試…廬金艾擁字血口丙匸疋邛前一普□伽閔堀誠親恤新栃庫壓力狽懺-13CS:?3.^15曲冃蒂化的尬71.親舷盤誦庫空力刑喊童文矢曲JDEIGRE二1D3220931SS91911■13:血也主朝俺用躬t的購供輙計據(jù)至:W方恥我二■[電WVTt^=JD0DRft...13:08:^-5^使用雯優(yōu)的甜碌做數(shù)檐匪匝力測試…廬品電全交英時JDPC時…’自;呷紹丹2血豹面旳味西就儲庫遷力理臟13^聘勺日閔用頁ft啟和L卡鯛盤堀不■三力列慚定憑矢龍亍JDEU氐,.?1

羊'jy/iajsj d齊倉49i-5065葛Isa165北J0-flS145以上是表格方式查看響應結果的情況,可以看到通過表格可以查看某個范圍內的響應時間和響應狀態(tài)是否正常;ViewR?sutfisTr?eNamw捕舷右式若結期CQimK-i^srWN@rRRiiinstnni?■匱的ti:fromtjirBrowse?, Lo^'DIspiayOnly二]E*「a^|'SuccessesCoi?ftBrowse?, Lo^'DIspiayOnly二]E*「a^|'SuccessesCoi?ft(|<4rcFlfcflameSarnulwh啊nil Ra申tuirl Rjaspunseit汛nResponsehearte-F:Df機吃JdbtdHVgirT4C顫朋i-Cti也ft@j29372tThrenidNaMB.ftffiS^KSQL^fiitES莊力逛fit--Ssmples-ari:200S-tl5-idi3j1B:20tSTL^adlime:3079Liters^'171Siz=Imttyt*毘3SarripkCsatiM:1timrCsuntDR笨昭卿汕左RyspOrii^nst^sdjt-.」衛(wèi)呂名空、:'工誼二一DECFi-qu-.JSCHkiu丄盧品宕蘭宏矢薛l!)^n」衛(wèi)呂名空、:'工誼二一DECFi-qu-.JSCHkiu丄盧品宕蘭宏矢薛l!)^nw站負黑洛2立戈畛JDBUFW丄嚴詁宅爭立芳譚車」DECRpqiij匸產品£2文壬薩于;ULK:hiPqLl吊缶三二.1於*:貳R;護丄產呂圮仝玄姜閔主」DBCRequ:Pifep^ecl5flMe:SlaLeII'l^ntjSELECT”FRdbl(5ELSCTbnp4.RdWNUhrnF口咖sol(;rtt.p」龜po_rKim?.c.cmp_nainQfiomlastproductr,Ijss^compan^gwhereptmp_id=c.cmp」mandi:ijht:3曲就乩或_関帕鼻刃>0-and<p.pnarn=Iike*%DB%Jo=p.priarnuItt?%AJX%,:iORDERBYp.pjddESC)WWHEREI-I^DRW'WUM-=100)WHERE1=rn士叮^eg^estHeaders:山興品帛主立羞禰斗.DBtFequSaniplefre^dtREEHiesttiesiiBns&ilata亠怎出鬼辛立吳因H-D3CRejuu丄產王名寶農芳噪京丄EG局旳u亠&名工交矢遴至川?^咋qu」產岀名全文予謎耳nSCF?fiNU』4丘站全豈;戈港豐?omc冃0q??舍品電全立工覘卓.DBCFuqu令口片-iiTT-VRa-^廠1口CCnni1:PID FNAME CMPNAMERN3 HPv 伽g以上三幅截圖則是來自樹形監(jiān)聽器,樹形監(jiān)聽器在幾種監(jiān)聽器中應該是最細致的,可以查看響應狀態(tài)、時間、以及執(zhí)行的SQL語句,乃至返回的結果均能進行驗證。FilvndrriHCuniMiuiv丄產吊鬲ilcvdDECRequest一丄存啟名ikeJDBCRs;utsL產詁匚ikm」LHi;記FilvndrriHCuniMiuiv丄產吊鬲ilcvdDECRequest一丄存啟名ikeJDBCRs;utsL產詁匚ikm」LHi;記emmt丄?■品名iksjde-cRequest出言品京ikeJDBCRwJUtJsL士產制啟il?-JDBiRejue^t&戸品帛Ell#JOB亡壯questiK3JDBCR^QuGSt」主呂宅ihaJDBCRejuesL」產品呂IKS-JDE'1;Requestj嚴品*IksJDECPecrestPS5.ik.rJDBCRdquosl產西呂ik=JDBCR^zuest_-a i鹿」m弋卩的“parSamplerre^irit1."" Rs(|w&tResH^Dnse氐uwsHi LtHjDi?ii>4av4■駄 Cimi^Sutkubvstrif;f■■■■pareds:-lec:£itit-:rvcnr:wele匚t‘FROM(SELECT昨11*.R01YNUMinFF?CiM(selEEt;n_:,g_iwnacCrnp_nainefromlust_produdp, cx^herentiTi|i_irl=c.cmpizAh:Kp_namellkp勺l.i:iitJ'Ni';GF?DEFFYPi」QdESG;■HiPdHEf?E'-1AT-IDPWHjH"冏VJHfPE1=?AMDrn-=-FJUqut^lJ'-flE:至于上面的圖形監(jiān)聽器,可以宏觀的觀察SQL語句在壓力測試下響應的平滑度,并且有一定的統(tǒng)計信息,能夠觀察平均響應時間等?,F(xiàn)在我們來看另外一種方式編寫我們的JDBC調用。就是使用JMeter提供的函數(shù)動態(tài)生成我們所需要不斷變化的SQL語句部分。之所以需要這么做是為了方便我們觀察執(zhí)行的SQL語句內容。在前面使用預編譯的方式,傳遞動態(tài)參數(shù)的SQL語句執(zhí)行的結果,大家已經看到過,在樹形監(jiān)聽器中,我們觀察到到執(zhí)行過的SQL語句是:CodehighlightingproducedbyActiproCodeHighlighter(freeware)http://www.CodeH/SELECT*FROM(SELECTtmp.*,ROWNUMrnFROM(selectp.p_id,p.p_name,c.cmp_namefromtest_productp,test_companycwherep.cmp_id=c.cmp_idandcontains(p.p_name,?)>0--and(p.p_namelike'%D%'orp.p_namelike'%AIX%')ORDERBYp.p_iddesc)tmpWHERE1=1ANDROWNUM<=100)WHERE1=1ANDrn>=1這樣導致我們無法看出參數(shù)"?"當中表示的具體值是什么,這對我們在某些情況下確定SQL語句的性能是相當不利的。所以我們這里需要使用JMeter的動態(tài)函數(shù)特性。我們創(chuàng)建第二個〃JDBCRequest〃節(jié)點,而后禁用〃產品名全文關鍵字JDBCRequest〃,將新創(chuàng)建的"JDBCRequest〃重命名為〃產品名likeJDBCRequest〃,將其中的SQL語句改寫為:Codehighlightingproducedby

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論