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

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

Select語句

存儲(chǔ)過程

如果對(duì)于Oracle,如果測(cè)試的是函數(shù),那么也可以使用select語句來進(jìn)行配置,此時(shí)可以使用:select 函數(shù)(入?yún)? from dual形式的語句來測(cè)試,其中dual是oracle的關(guān)鍵字,表示啞表。對(duì)于其它廠商的數(shù)據(jù)庫產(chǎn)品,請(qǐng)查找手冊(cè)。

JMS服務(wù)器

MOM 作為消息數(shù)據(jù)交換的平臺(tái),也是影響應(yīng)用執(zhí)行效率的潛在環(huán)節(jié)。在 Java 程序中,是通過 JMS 與 MOM 進(jìn)行交互的。作為 Java 實(shí)現(xiàn)的壓力測(cè)試工具,JMeter 也能使用 JMS 對(duì)應(yīng)用的消息交換和相關(guān)的數(shù)據(jù)處理能力進(jìn)行測(cè)試。這一點(diǎn)應(yīng)該不難理解,因?yàn)樵谡麄(gè)測(cè)試過程中,JMeter 測(cè)試的重點(diǎn)應(yīng)該是消息的產(chǎn)生者和消費(fèi)者的本身能力,而不是 MOM本身。

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

1. 測(cè)試前的準(zhǔn)備(兩種情況都適用)

JMeter 雖然能使用 JMS 對(duì) MOM 進(jìn)行測(cè)試,但是它本身并沒有提供JMS需要使用的包。因此,在測(cè)試之前需要將這些包復(fù)制到 %JMETER_HOME%/lib 下。對(duì)于 ActiveMQ 來說,是復(fù)制 %ACTIVEMQ_HOME%/lib。%ACTIVEMQ_HOME%/optional 是可選包,可根據(jù)實(shí)際情況來考慮是否復(fù)制。

JMeter 在測(cè)試時(shí)使用了 JNDI,為了提供 JNDI 提供者的信息,需要提供 jndi.properties。同時(shí)需要將 jndi.properties 放到 JMeter 的 classpath 中,建議將它與 bin下的 ApacheJMeter.jar 打包在一起。對(duì)于 ActiveMQ,jndi.properties 的示例內(nèi)容如下:

java.naming.factory.initial = org.activemq.jndi.ActiveMQInitialContextFactory
            java.naming.provider.url = tcp://localhost:61616
            #指定connectionFactory的jndi名字,多個(gè)名字之間可以逗號(hào)分隔。
            #以下為例:
            #對(duì)于topic,使用(TopicConnectionFactory)context.lookup("connectionFactry")
            #對(duì)于queue,(QueueConnectionFactory)context.lookup("connectionFactory")
            connectionFactoryNames = connectionFactory
            #注冊(cè)queue,格式:
            #queue.[jndiName] = [physicalName]
            #使用時(shí):(Queue)context.lookup("jndiName"),此處是MyQueue
            queue.MyQueue = example.MyQueue
            #注冊(cè)topic,格式:
            # topic.[jndiName] = [physicalName]
            #使用時(shí):(Topic)context.lookup("jndiName"),此處是MyTopic
            topic.MyTopic = example.MyTopic
             
2. 發(fā)布/訂閱

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

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

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

3. 點(diǎn)對(duì)點(diǎn)

對(duì)于點(diǎn)對(duì)點(diǎn),JMeter只提供了一種Sampler:JMS Point-to-Point。在例子中,建立如下圖的測(cè)試計(jì)劃:

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

結(jié)論

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

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