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

在實際的項目中,至少有2種類型的JDBC請求需要關(guān)注:select語句和存儲過程。前者反應(yīng)了select語句是否高效,以及表的索引等是否需要優(yōu)化;后者則是反應(yīng)存儲過程的算法是否高效。它們?nèi)绻实拖,必然會帶來響?yīng)上的不盡如人意。對于這兩種請求,JDBC請求的配置略有區(qū)別:

Select語句

存儲過程

如果對于Oracle,如果測試的是函數(shù),那么也可以使用select語句來進(jìn)行配置,此時可以使用:select 函數(shù)(入?yún)? from dual形式的語句來測試,其中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)生者和消費(fèi)者的本身能力,而不是 MOM本身。

根據(jù) JMS 規(guī)范,消息交換有2種方式:發(fā)布/訂閱和點對點。JMeter針對這兩種情形,分別提供了不同的Sampler進(jìn)行支持。以下MOM我們使用ActiveMQ 3.2.1,分別描述這兩種消息交換方式是如何使用 JMeter 進(jìn)行測試。

1. 測試前的準(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 提供者的信息,需要提供 jndi.properties。同時需要將 jndi.properties 放到 JMeter 的 classpath 中,建議將它與 bin下的 ApacheJMeter.jar 打包在一起。對于 ActiveMQ,jndi.properties 的示例內(nèi)容如下:

java.naming.factory.initial = org.activemq.jndi.ActiveMQInitialContextFactory
            java.naming.provider.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"),此處是MyQueue
            queue.MyQueue = example.MyQueue
            #注冊topic,格式:
            # topic.[jndiName] = [physicalName]
            #使用時:(Topic)context.lookup("jndiName"),此處是MyTopic
            topic.MyTopic = example.MyTopic
             
2. 發(fā)布/訂閱

在實際測試時,發(fā)布者和訂閱者并不是需要同時出現(xiàn)的。例如,有時我們可能想測試單位時間內(nèi)消息發(fā)布者的消息產(chǎn)生量,此時不需要消息發(fā)布者,只需要訂閱者可以了。本例為了說明這兩種Sampler的使用,因此建立如下的測試計劃:

其中JMS Publisher和JMS Subscriber的屬性:選擇"使用jndi.properties",連接工廠是connectionFactory,主題是MyTopic,其它使用默認(rèn)配置。對于JMS Publisher,還需提供測試用的文本消息。

啟動ActiveMQ,運(yùn)行測試計劃。如果配置正確,那么與ActiveMQ成功連接之后,在JMeter的后臺會打印出相關(guān)信息。在測試過程中,JMeter 后臺打印可能會出現(xiàn)java.lang.InterruptedException 信息,這個是正,F(xiàn)象,不會影響測試過程和結(jié)果。這一點可以從 bin 下的 jmeter.log 看出。

3. 點對點

對于點對點,JMeter只提供了一種Sampler:JMS Point-to-Point。在例子中,建立如下圖的測試計劃:

其中:Communication style是Request Only。對于另一種風(fēng)格:Request Response,會驗證收到消息的JMS Header中的JMSCorrelationID,以判斷是否是對請求消息的響應(yīng)。

結(jié)論

本文介紹了如何使用JMeter完成常用的三種類型服務(wù)器的壓力測試,這三種類型的壓力測試涵蓋了很大一部分的使用情形,然而需要記住的是工具畢竟是工具。效果好不好,關(guān)鍵還是在于使用的人。而且,對于壓力測試,測試計劃的好壞是關(guān)鍵。針對不同的情況,分析后有針對的進(jìn)行測試,比起拿槍亂打、無的放矢顯然要高效得多。

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