




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
使用JMeter完成常用的壓力測試本文介紹了JMeter相關(guān)的基本概念。并以JMeter為例,介紹了使用它來完成最常用的三種類型服務(wù)器,即Web服務(wù)器、數(shù)據(jù)庫服務(wù)器和消息中間件,壓力測試的方法、步驟以及注意事項。講到測試,人們腦海中首先浮現(xiàn)的就是針對軟件正確性的測試,即常說的功能測試。但是軟件僅僅只是功能正確是不夠的。在實際開發(fā)中,還有其它的非功能因素也起著決定性的因素,例如軟件的響應(yīng)速度。影響軟件響應(yīng)速度的因素有很多,有些是因為算法不夠高效;還有些可能受用戶并發(fā)數(shù)的影響。在眾多類型的軟件測試中,壓力測試正是以軟件響應(yīng)速度為測試目標(biāo),尤其是針對在較短時間內(nèi)大量并發(fā)用戶的訪問時,軟件的抗壓能力。本文以JMeter為例,介紹了如何使用它來完成常用的壓力測試:Web測試、數(shù)據(jù)庫測試和JMS測試。概述JMeter最早是為了測試Tomcat的前身JServ的執(zhí)行效率而誕生的。到目前為止,它的最新版本是2.1.1,它的測試能力也不再僅僅只局限于對于Web服務(wù)器的測試,而是涵蓋了數(shù)據(jù)庫、JMS、WebService、LDAP等多種對象的測試能力。在最新的2.1.1中,它還提供了對于JUNIT的測試。JMeter的安裝非常簡單,從官方網(wǎng)站上下載,解壓之后即可使用。運行命令在%JMETER_HOME%/bin下,對于Windows用戶來說,命令是jmeter.bat。運行前請檢查JMeter的文檔,查看是否具備相關(guān)的運行條件。對于最新版(即2.1.1),需要JDK的版本要求是JDK1.4。JMeter的主要測試組件總結(jié)如下:測試計劃是使用JMeter進(jìn)行測試的起點,它是其它JMeter測試元件的容器。線程組代表一定數(shù)量的并發(fā)用戶,它可以用來模擬并發(fā)用戶發(fā)送請求。實際的請求內(nèi)容在Sampler中定義,它被線程組包含。監(jiān)聽器負(fù)責(zé)收集測試結(jié)果,同時也被告知了結(jié)果顯示的方式。邏輯控制器可以自定義JMeter發(fā)送請求的行為邏輯,它與Sampler結(jié)合使用可以模擬復(fù)雜的請求序列。斷言可以用來判斷請求響應(yīng)的結(jié)果是否如用戶所期望的。它可以用來隔離問題域,即在確保功能正確的前提下執(zhí)行壓力測試。這個限制對于有效的測試是非常有用的。配置元件維護(hù)Sampler需要的配置信息,并根據(jù)實際的需要會修改請求的內(nèi)容。前置處理器和后置處理器負(fù)責(zé)在生成請求之前和之后完成工作。前置處理器常常用來修改請求的設(shè)置,后置處理器則常常用來處理響應(yīng)的數(shù)據(jù)。定時器負(fù)責(zé)定義請求之間的延遲間隔。JMeter的使用非常的容易,在ONJ上的文章UsingJMeter提供了一個非常好的入門。常用測試壓力測試不同于功能測試,軟件的正確性并不是它的測試重點。它所看重的是軟件的執(zhí)行效率,尤其是短時間內(nèi)訪問用戶數(shù)爆炸性增長時軟件的響應(yīng)速度,壓力測試往往是在功能測試之后進(jìn)行的。在實際的開發(fā)過程中,軟件潛在的效率瓶頸一般都是那些可能有多個用戶同時訪問的節(jié)點。就目前JavaEE的平臺下開發(fā)的軟件來說,這種節(jié)點通常可能是:Web服務(wù)器、數(shù)據(jù)庫服務(wù)器和JMS服務(wù)器。它們都是請求主要發(fā)生的地點,請求頻率較其它的節(jié)點要高,而且處于請求序列的關(guān)鍵路徑之上。如果它們效率無法提高的話,對于整個軟件的效率有致命的影響。而且在這些節(jié)點上一般都會發(fā)生較大規(guī)模的數(shù)據(jù)交換,有時其中還包含有業(yè)務(wù)邏輯處理,它們正是在進(jìn)行壓力測試時首先需要考慮的。本文以這三種節(jié)點為例,介紹如何使用JMeter來完成針對于它們的壓力測試。Web服務(wù)器對于大多數(shù)的項目來說,并不會自行開發(fā)一個Web服務(wù)器,因此Web服務(wù)器壓力測試的對象實際就是--發(fā)布到Web服務(wù)器中的軟件。最簡單的Web測試計劃只需要三個JMeter的測試元件,如下圖:?込測試計劃@ 線程殂;;存ht[f請親S用表裕察看結(jié)果其中:在線程組中定義線程數(shù)、產(chǎn)生線程發(fā)生的時間和測試循環(huán)次數(shù)。在http請求中定義服務(wù)器、端口、協(xié)議和方法、請求路徑等。表格監(jiān)聽器負(fù)責(zé)收集和顯示結(jié)果。這種設(shè)置對于包含了安全機(jī)制的web應(yīng)用是不夠的,典型的web應(yīng)用一般都會:1.有一個登錄頁,它是整個應(yīng)用的入口。當(dāng)用戶登錄之后,應(yīng)用會將用戶相關(guān)的安全信息放到session中。2.有一^個filter,它攔截請求,檢查每個請求相關(guān)的session中是否包含有用戶安全信息。如果沒有,那么請求被重定向到登錄頁,要求用戶提供安全信息。在這種配置下應(yīng)用上面的測試計劃,那么除了登錄頁之外的其它請求都將因為缺少用戶安全信息,而使請求實際定位到登錄頁。如果不加斷言,那么在監(jiān)聽器看來所有的請求都是成功。而實際上,這些請求最終都沒有到達(dá)它們應(yīng)該去的地方。顯然,這種測試結(jié)果不是我們所期望的。為了成功的測試,至少有2種方法:方法一,去掉程序的安全設(shè)置,如filter,使得不需要用戶安全信息也能訪問受限內(nèi)容;方法二,不修改程序,使用JMeter提供的"HttpURL重寫修飾符"或"HttpCookie管理器"。對于第一種方法,有其局限性:需要修改程序配置,如去掉web.xml中關(guān)于安全filter的設(shè)置。需要維護(hù)多個版本的web.xml,如壓力測試和功能測試分別各自的web.xml,增加了維護(hù)成本,而且有可能會在測試之后忘記將web.xm1修改回來。對于一些需要用戶安全信息的頁面無能為力,如某些業(yè)務(wù)審計操作需要用戶安全信息來記錄。因為缺少這樣的信息,注定了測試的失敗。如果解決為了這個問題進(jìn)一步的修改程序,那么因為存在多個版本的程序,那么其維護(hù)難度將大大增加。雖然,第二種方法配置難度增加了,但是它不用修改程序。而且還可將測試計劃保存成文件,以便重復(fù)使用。因此,選用第二種方法是較為理想的做法。下面以一個簡化的例子說明使用方法二的配置步驟。1.例子由以下幾個文件組成:AuthorizenFilter.java,過濾器負(fù)責(zé)檢驗session中是否存在用戶信息。如果沒有,那么就轉(zhuǎn)向到login.jsp。它的主要方法doFilter內(nèi)容如下:pub1icvoiddoFi1ter(Serv1etRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{HttpServletRequestreq=(HttpServletRequest)request;HttpServletResponseres=(HttpServletResponse)response;HttpSessionsession=req.getSession();Useruser=(User)session.getAttribute("user");if(null==user){Stringuri=req.getRequestURI();//如果請求頁是登錄頁,不轉(zhuǎn)向if(uri.equalsIgnoreCase("/gWeb/login.jsp")){chain.doFilter(request,response);}else{res.sendRedirect("/gWeb/login.jsp");}}else{chain.doFilter(request,response);}}User.java,用戶類負(fù)責(zé)記錄用戶的信息。為了簡化,這里的登錄操作只允許指定用戶名和密碼。主要內(nèi)容如下:publicclassUser{privateStringuser;privateStringpwd;publicUser(Stringuser,Stringpwd){this.user=user;this.pwd=pwd;}publicbooleanlogin(){returnuser.equals("foxgem")&&pwd.equals("12345678");}publicStringgetUser(){returnuser;}publicvoidsetUser(Stringuser){this.user=user;}}Login.jsp和welcome.jsp。其中l(wèi)ogin.jsp負(fù)責(zé)生成User對象,并調(diào)用User的login。當(dāng)login返回為true時轉(zhuǎn)向到welcome.jsp。其驗證部分的代碼:<%if(request.getParameter("Submit")!=null){Userur=newUser(request.getParameter("user"),request.getParameter("pwd"));if(ur.login()){session.setAttribute("user",ur);response.sendRedirect("/gWeb/welcome.jsp");}else{session.setAttribute("LOGIN_ERROR_MSG","無效的用戶,可能原因:用戶不存在或被禁用。");response.sendRedirect("/gWeb/index.jsp");return;}}%>web.xml,配置filter攔截所有訪問JSP頁面的請求:<filter><filter-name>authorizen</filter-name><filter-class>org.foxgem.jmeter.AuthorizenFilter</filter-class></filter><filter-mapping><filter-name>authorizen</filter-name><url-pattern>*.jsp</url-pattern></filter-mapping>2.創(chuàng)建如下結(jié)構(gòu)的Web測試計劃:HTTP請求Q晌應(yīng)斷言HTTP請瑣就認(rèn)直9[專循不技制雅中HTTP謫求口響應(yīng)斷言0用表格察看結(jié)果HTTPCookie肯理器其中主要測試元件說明如下:http請求默認(rèn)值負(fù)責(zé)記錄請求的默認(rèn)值,如服務(wù)器、協(xié)議、端口等。第一^個http請求,請求login.jsp,并附加驗證所需要的參數(shù)(user=foxgem,pwd=12345678,Submit=Submit);其包含的響應(yīng)斷言驗證url中包含"welcome.jsp",這一點可以從程序中反應(yīng)。第二個http請求,請求是welcome.jsp;其包含的響應(yīng)斷言驗證響應(yīng)文本中包含"foxgem",它是welcome.jsp頁面邏輯的一部分。httpcookie管理器負(fù)責(zé)管理整個測試過程中使用的cookie,它不需要設(shè)置任何屬性。循環(huán)控制器設(shè)置發(fā)送第二個請求的循環(huán)次數(shù),表格監(jiān)聽器負(fù)責(zé)收集和顯示第二個請求的測試結(jié)果。啟動測試計劃之后,執(zhí)行的順序是:首先,第一個請求登錄頁進(jìn)行登錄;
成功登錄之后,使用循環(huán)控制器執(zhí)行第二個請求。請求welcome.jsp時,響應(yīng)斷言用來驗證是否確實是welocme.jsp來處理請求,而不是因為其它頁。在這個測試計劃中需要注意的是httpcookie管理器。正是由于它的作用,使得第二個請求能順利的發(fā)送到welcome.jsp進(jìn)行處理,而不是因為缺少用戶安全信息轉(zhuǎn)發(fā)到login.jsp。在這個例子中,我們并沒有在程序中使用cookie(使用的是session),那么httpcookie管理器怎么會起作用呢?這是因為在servlet/jsp規(guī)范中對于session的狀態(tài)跟蹤有2種方式:使用cookie,保留和傳遞sessionid。它不要求程序?qū)τ趗rl有什么特殊的處理,但是要求瀏覽器允許cookie。在這個例子中,就是這種情形。使用url重寫,每次顯式的在瀏覽器和服務(wù)器之間傳遞sessionid。它要求程序?qū)rl進(jìn)行編碼,對瀏覽器沒有要求。對于第二種情形,可以使用JMeter前置管理器中的httpurl重寫修飾符來完成。對于Tomcat,Session參數(shù)是jsessionid,路徑擴(kuò)展使用";"。使用url編碼時需要注意,必須將瀏覽器的cookie功能關(guān)閉。因為url編碼函數(shù),如encodeURL,會判斷是否需要將sessionid編碼到url中。當(dāng)瀏覽器允許cookie時,就不會進(jìn)行編碼。如果cookie而不是session來保存用戶安全信息,那么直接使用httpcookie管理器就行了。此時,需要將使用的cookie參數(shù)和值直接寫到管理器中,由它負(fù)責(zé)管理。對于其它的cookie使用,也是如此操作。登錄問題解決之后,對于Web服務(wù)器的測試就沒什么難點了。剩下的就是根據(jù)實際需要,靈活運用相關(guān)的測試組件搭建編寫的測試計劃。(當(dāng)然,對于安全問題還有其它的使用情景。在使用時需要明確:JMeter是否支持,如果支持使用哪種測試組件解決。)數(shù)據(jù)庫服務(wù)器數(shù)據(jù)庫服務(wù)器在大多數(shù)企業(yè)項目中是不可缺少的,對于它進(jìn)行壓力測試是為了找出:數(shù)據(jù)庫對象是否可以有效地承受來自多個用戶的訪問。這些對象主要是:索引、觸發(fā)器、存儲過程和鎖。通過對于SQL語句和存儲過程的測試JMeter可以間接的反應(yīng)數(shù)據(jù)庫對象是否需要優(yōu)化。JMeter使用JDBC發(fā)送請求,完成對于數(shù)據(jù)庫的測試。一個數(shù)據(jù)庫測試計劃,建立如下結(jié)構(gòu)即可:甲爲(wèi)則試計劃甲惑線檢殂JDBfConnectionConfigurationJDBGRequest其中:JDBC連接配置,負(fù)責(zé)配置數(shù)據(jù)庫連接相關(guān)的信息。如:數(shù)據(jù)庫url、數(shù)據(jù)庫驅(qū)動類名、用戶名和密碼等等。在這些配置中,"綁定到池的變量名"(VariableNameBoundtoPool)是一個非常重要的屬性,這個屬性會在JDBC請求中被引用。通過它,JDBC請求和JDBC連接配置建立關(guān)聯(lián)。(測試前,請將所需要的數(shù)據(jù)庫驅(qū)動放到JMeter的classpath中)。JDBC請求,負(fù)責(zé)發(fā)送請求進(jìn)行測試。圖形結(jié)果,收集顯示測試結(jié)果。在實際的項目中,至少有2種類型的JDBC請求需要關(guān)注:select語句和存儲過程。前者反應(yīng)了select語句是否高效,以及表的索引等是否需要優(yōu)化;后者則是反應(yīng)存儲過程的算法是否高效。它們?nèi)绻实拖拢厝粫眄憫?yīng)上的不盡如人意。對于這兩種請求,JDBC請求的配置略有區(qū)別:Select語句存儲過程callPR_BB_ZCJL(2005|6)如果對于Oracle,如果測試的是函數(shù),那么也可以使用select語句來進(jìn)行配置,此時可以使用:select函數(shù)(入?yún)ⅲゝromdual形式的語句來測試,其中dual是oracle的關(guān)鍵字,表示啞表。對于其它廠商的數(shù)據(jù)庫產(chǎn)品,請查找手冊。JMS服務(wù)器MOM作為消息數(shù)據(jù)交換的平臺,也是影響應(yīng)用執(zhí)行效率的潛在環(huán)節(jié)。在Java程序中,是通過JMS與MOM進(jìn)行交互的。作為Java實現(xiàn)的壓力測試工具,JMeter也能使用JMS對應(yīng)用的消息交換和相關(guān)的數(shù)據(jù)處理能力進(jìn)行測試。這一點應(yīng)該不難理解,因為在整個測試過程中,JMeter測試的重點應(yīng)該是消息的產(chǎn)生者和消費者的本身能力,而不是MOM本身。根據(jù)JMS規(guī)范,消息交換有2種方式:發(fā)布/訂閱和點對點。JMeter針對這兩種情形,分別提供了不同的Sampler進(jìn)行支持。以下MOM我們使用ActiveMQ3.2.1,分別描述這兩種消息交換方式是如何使用JMeter進(jìn)行測試。測試前的準(zhǔn)備(兩種情況都適用)JMeter雖然能使用JMS對MOM進(jìn)行測試,但是它本身并沒有提供JMS需要使用的包。因此,在測試之前需要將這些包復(fù)制到%JMETER_HOME%/lib下。對于ActiveMQ來說,就是復(fù)制%ACTIVEMQ_HOME%/lib。%ACTIVEMQ_HOME%/optional是可選包,可根據(jù)實際情況來考慮是否復(fù)制。JMeter在測試時使用了JNDI,為了提供JNDI提供者的信息,需要提供perties。同時需要將perties放到JMeter的classpath中,建議將它與bin下的ApacheJMeter.jar打包在一起。對于ActiveMQ,perties的示例內(nèi)容如下:java.naming.factory.initial=org.activemq.jndi.ActiveMQInitialContextFactoryvider.url=tcp://localhost:61616#指定connectionFactory的jndi名字,多個名字之間可以逗號分隔。#以下為例:#對于topic,使用(TopicConnectionFactory)context.lookup("connectionFactry")#對于queue,(QueueConnectionFactory)context.lookup("connectionFactory")connectionFactoryNames=connectionFactory#注冊queue,格式:#queue.[jndiName]=[physicalName]#使用時:(Queue)context.lookup("jndiName"),此處是MyQueuequeue.MyQueue=example.MyQueue#注冊topic,格式:#topic.[jndiName]=[physicalName]#使用時:(Topic)context.lookup("jndiName"),此處是MyTopictopic.MyTopic=example.MyTopic發(fā)布/訂閱在實際測試時,發(fā)布者和訂閱者并不是需要同時出現(xiàn)的。例如,有時我們可能想測試單位時間內(nèi)消息發(fā)布者的消息產(chǎn)生量,此時就不需要消息發(fā)布者,只需要訂閱者就可以了。本例為了說明這兩種Sampler的使用,因此建立如下的測試計劃:甲匚測試計劃|"線程蟲JMSPubli$heiJMS-Sub$triberk用表胳察看結(jié)果其中JMSPublisher和JMSSubscriber的屬性:選擇"使用perties",連接工廠是connectionFactory,主題是MyTopic,其它使用默認(rèn)配置。對于JMSPublisher,還需提供測試用的文本消息。啟動ActiveMQ,運行測試計劃。如果配置正確,那么與ActiveMQ成功連接之后,在JMeter的后臺會打印出相關(guān)信息。在測試過程中,JMeter后臺打印可能會出現(xiàn)java.lang.InterruptedException信息,這個是正?,F(xiàn)象,不會影響測試過程和結(jié)果
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國多頭絲軸帽數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國雙盤腸粉爐數(shù)據(jù)監(jiān)測研究報告
- 辦公室環(huán)境的健康風(fēng)險分析與數(shù)據(jù)挖掘研究
- 游泳救生員應(yīng)急流程知識試題及答案
- 足球裁判員社區(qū)互動試題及答案
- 裁判員如何建設(shè)良好的賽場氛圍試題及答案
- 創(chuàng)新教育中的區(qū)塊鏈技術(shù)與知識產(chǎn)權(quán)保護(hù)策略
- 場地直播服務(wù)合同協(xié)議
- 傳統(tǒng)教育主題班會
- 地平車維修合同協(xié)議
- 2024年全球及中國通信用氮化鋁陶瓷基板行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2024年護(hù)士資格證考試內(nèi)外科基礎(chǔ)護(hù)理試題及答案
- 慢性病管理的重要試題及答案
- 業(yè)務(wù)轉(zhuǎn)讓合同協(xié)議
- 銷售差價提成管理制度
- 《東歐社會主義國家的改革與演變》社會主義國家的改革與演變化課件-2
- 2025-2030中國口服輪狀病毒疫苗行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025年鄭州鐵路職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測試題庫必考題
- 2025年中鐵特貨物流股份有限公司招聘(75人)筆試參考題庫附帶答案詳解
- 2025年行政執(zhí)法人員執(zhí)法資格考試必考題庫及答案(共232題)
- 山東省自然科學(xué)基金申報書-青年基金、面上項目
評論
0/150
提交評論