您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源性能測(cè)試工具 > Jmeter
使用 JMeter 完成常用的壓力測(cè)試
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2012/12/3 14:26:54 ] 推薦標(biāo)簽:

本文介紹了 JMeter 相關(guān)的基本概念。并以 JMeter 為例,介紹了使用它來完成常用的三種類型服務(wù)器,即 Web 服務(wù)器、數(shù)據(jù)庫服務(wù)器和消息中間件,壓力測(cè)試的方法、步驟以及注意事項(xiàng)。

講到測(cè)試,人們腦海中首先浮現(xiàn)的是針對(duì)軟件正確性的測(cè)試,即常說的功能測(cè)試。但是軟件僅僅只是功能正確是不夠的。在實(shí)際開發(fā)中,還有其它的非功能因素也起著決定性的因素,例如軟件的響應(yīng)速度。影響軟件響應(yīng)速度的因素有很多,有些是因?yàn)樗惴ú粔蚋咝;還有些可能受用戶并發(fā)數(shù)的影響。

在眾多類型的軟件測(cè)試中,壓力測(cè)試正是以軟件響應(yīng)速度為測(cè)試目標(biāo),尤其是針對(duì)在較短時(shí)間內(nèi)大量并發(fā)用戶的訪問時(shí),軟件的抗壓能力。本文以 JMeter 為例,介紹了如何使用它來完成常用的壓力測(cè)試:Web 測(cè)試、數(shù)據(jù)庫測(cè)試和 JMS 測(cè)試。

概述

JMeter 早是為了測(cè)試 Tomcat 的前身 JServ 的執(zhí)行效率而誕生的。到目前為止,它的新版本是2.1.1,它的測(cè)試能力也不再僅僅只局限于對(duì)于Web服務(wù)器的測(cè)試,而是涵蓋了數(shù)據(jù)庫、JMS、Web Service、LDAP等多種對(duì)象的測(cè)試能力。在新的 2.1.1 中,它還提供了對(duì)于 JUNIT 的測(cè)試。

JMeter 的安裝非常簡(jiǎn)單,從官方網(wǎng)站上下載,解壓之后即可使用。運(yùn)行命令在%JMETER_HOME%/bin 下,對(duì)于 Windows 用戶來說,命令是 jmeter.bat。運(yùn)行前請(qǐng)檢查JMeter 的文檔,查看是否具備相關(guān)的運(yùn)行條件。對(duì)于新版(即2.1.1),需要JDK的版本要求是JDK 1.4。

JMeter 的主要測(cè)試組件總結(jié)如下:

1. 測(cè)試計(jì)劃是使用 JMeter 進(jìn)行測(cè)試的起點(diǎn),它是其它 JMeter 測(cè)試元件的容器。

2. 線程組代表一定數(shù)量的并發(fā)用戶,它可以用來模擬并發(fā)用戶發(fā)送請(qǐng)求。實(shí)際的請(qǐng)求內(nèi)容在Sampler中定義,它被線程組包含。

3. 監(jiān)聽器負(fù)責(zé)收集測(cè)試結(jié)果,同時(shí)也被告知了結(jié)果顯示的方式。

4. 邏輯控制器可以自定義JMeter發(fā)送請(qǐng)求的行為邏輯,它與Sampler結(jié)合使用可以模擬復(fù)雜的請(qǐng)求序列。

5. 斷言可以用來判斷請(qǐng)求響應(yīng)的結(jié)果是否如用戶所期望的。它可以用來隔離問題域,即在確保功能正確的前提下執(zhí)行壓力測(cè)試。這個(gè)限制對(duì)于有效的測(cè)試是非常有用的。

6. 配置元件維護(hù)Sampler需要的配置信息,并根據(jù)實(shí)際的需要會(huì)修改請(qǐng)求的內(nèi)容。

7. 前置處理器和后置處理器負(fù)責(zé)在生成請(qǐng)求之前和之后完成工作。前置處理器常常用來修改請(qǐng)求的設(shè)置,后置處理器則常常用來處理響應(yīng)的數(shù)據(jù)。

8. 定時(shí)器負(fù)責(zé)定義請(qǐng)求之間的延遲間隔。

JMeter的使用非常的容易,在 ONJava.com 上的文章 Using JMeter 提供了一個(gè)非常好的入門。

常用測(cè)試

壓力測(cè)試不同于功能測(cè)試,軟件的正確性并不是它的測(cè)試重點(diǎn)。它所看重的是軟件的執(zhí)行效率,尤其是短時(shí)間內(nèi)訪問用戶數(shù)爆炸性增長時(shí)軟件的響應(yīng)速度,壓力測(cè)試往往是在功能測(cè)試之后進(jìn)行的。在實(shí)際的開發(fā)過程中,軟件潛在的效率瓶頸一般都是那些可能有多個(gè)用戶同時(shí)訪問的節(jié)點(diǎn)。

目前 Java EE 的平臺(tái)下開發(fā)的軟件來說,這種節(jié)點(diǎn)通?赡苁牵篧eb 服務(wù)器、數(shù)據(jù)庫服務(wù)器和 JMS 服務(wù)器。它們都是請(qǐng)求主要發(fā)生的地點(diǎn),請(qǐng)求頻率較其它的節(jié)點(diǎn)要高,而且處于請(qǐng)求序列的關(guān)鍵路徑之上。如果它們效率無法提高的話,對(duì)于整個(gè)軟件的效率有致命的影響。而且在這些節(jié)點(diǎn)上一般都會(huì)發(fā)生較大規(guī)模的數(shù)據(jù)交換,有時(shí)其中還包含有業(yè)務(wù)邏輯處理,它們正是在進(jìn)行壓力測(cè)試時(shí)首先需要考慮的。

本文以這三種節(jié)點(diǎn)為例,介紹如何使用 JMeter 來完成針對(duì)于它們的壓力測(cè)試。

Web 服務(wù)器

對(duì)于大多數(shù)的項(xiàng)目來說,并不會(huì)自行開發(fā)一個(gè)Web服務(wù)器,因此Web服務(wù)器壓力測(cè)試的對(duì)象實(shí)際是--發(fā)布到Web服務(wù)器中的軟件。簡(jiǎn)單的Web測(cè)試計(jì)劃只需要三個(gè) JMeter 的測(cè)試元件,如下圖:

其中:

    在線程組中定義線程數(shù)、產(chǎn)生線程發(fā)生的時(shí)間和測(cè)試循環(huán)次數(shù)。
    在http請(qǐng)求中定義服務(wù)器、端口、協(xié)議和方法、請(qǐng)求路徑等。
    表格監(jiān)聽器負(fù)責(zé)收集和顯示結(jié)果。

這種設(shè)置對(duì)于包含了安全機(jī)制的 web 應(yīng)用是不夠的,典型的 web 應(yīng)用一般都會(huì):

1. 有一個(gè)登錄頁,它是整個(gè)應(yīng)用的入口。當(dāng)用戶登錄之后,應(yīng)用會(huì)將用戶相關(guān)的安全信息放到 session 中。

2. 有一個(gè) filter,它攔截請(qǐng)求,檢查每個(gè)請(qǐng)求相關(guān)的 session 中是否包含有用戶安全信息。如果沒有,那么請(qǐng)求被重定向到登錄頁,要求用戶提供安全信息。

在這種配置下應(yīng)用上面的測(cè)試計(jì)劃,那么除了登錄頁之外的其它請(qǐng)求都將因?yàn)槿鄙儆脩舭踩畔ⅲ拐?qǐng)求實(shí)際定位到登錄頁。如果不加斷言,那么在監(jiān)聽器看來所有的請(qǐng)求都是成功。而實(shí)際上,這些請(qǐng)求終都沒有到達(dá)它們應(yīng)該去的地方。顯然,這種測(cè)試結(jié)果不是我們所期望的。

為了成功的測(cè)試,至少有2種方法:

    方法一,去掉程序的安全設(shè)置,如filter,使得不需要用戶安全信息也能訪問受限內(nèi)容;
    方法二,不修改程序,使用JMeter提供的"Http URL重寫修飾符"或"Http Cookie管理器"。

對(duì)于第一種方法,有其局限性:

    需要修改程序配置,如去掉web.xml中關(guān)于安全filter的設(shè)置。需要維護(hù)多個(gè)版本的web.xml,如壓力測(cè)試和功能測(cè)試分別各自的web.xml,增加了維護(hù)成本,而且有可能會(huì)在測(cè)試之后忘記將web.xml修改回來。
    對(duì)于一些需要用戶安全信息的頁面無能為力,如某些業(yè)務(wù)審計(jì)操作需要用戶安全信息來記錄。因?yàn)槿鄙龠@樣的信息,注定了測(cè)試的失敗。如果解決為了這個(gè)問題進(jìn)一步的修改程序,那么因?yàn)榇嬖诙鄠(gè)版本的程序,那么其維護(hù)難度將大大增加。

雖然,第二種方法配置難度增加了,但是它不用修改程序。而且還可將測(cè)試計(jì)劃保存成文件,以便重復(fù)使用。因此,選用第二種方法是較為理想的做法。下面以一個(gè)簡(jiǎn)化的例子說明使用方法二的配置步驟。

上一頁123下一頁
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd