轉自:http://my.oschina.net/hellotest/blog/516079
一、Jmeter+ant
1、首先我們默認Jmeter腳本已經錄制好了,並測試通過,存在(查詢模塊.jmx)腳本
2、將 JMeter所在目錄下extras子目錄里的ant-JMeter-1.1.1.jar復制到Ant所在目錄lib子目錄之下,這樣Ant運行時才能找 到"org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"這個類,從而成功觸發JMeter腳本
3、jmeter默認保存的是.csv格式的文件,所以我們先要設置一下bin/jmeter.properties文件內容,保存
jmeter.save.saveservice.output_format=xml
4、主要邏輯思路:運行D:\jemeterTest\script下面的.jmx腳本,生成.jtl文件放入
D:\jemeterTest\resultLog\jtl文件中,ant在將相應的文件轉換為對應的html文件放入D:\jemeterTest\resultLog\html中
build.xml文件中的內容如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
project
name
=
"JmeterTest"
default
=
"all"
basedir
=
"."
>
<
tstamp
>
<
format
property
=
"time"
pattern
=
"yyyyMMddhhmm"
/>
</
tstamp
>
<!-- 需要改成自己本地的 Jmeter 目錄-->
<
property
name
=
"jmeter.home"
value
=
"D:\soft\apache-jmeter-2.9"
/>
<!-- jmeter生成jtl格式的結果報告的路徑-->
<
property
name
=
"jmeter.result.jtl.dir"
value
=
"D:\jemeterTest\resultLog\jtl"
/>
<!-- jmeter生成html格式的結果報告的路徑-->
<
property
name
=
"jmeter.result.html.dir"
value
=
"D:\jemeterTest\resultLog\html"
/>
<!-- 生成的報告的前綴 -->
<
property
name
=
"ReportName"
value
=
"TestReport"
/>
<
property
name
=
"jmeter.result.jtlName"
value
=
"${jmeter.result.jtl.dir}/${ReportName}${time}.jtl"
/>
<
property
name
=
"jmeter.result.htmlName"
value
=
"${jmeter.result.html.dir}/${ReportName}${time}.html"
/>
<!-- 接收測試報告的郵箱 -->
<
property
name
=
"mail_to"
value
=
"LIUCHAO448@pingan.com.cn"
/>
<!-- 電腦地址 -->
<
property
name
=
"ComputerName"
value
=
"jkqsh-l0285"
/>
<
target
name
=
"all"
>
<
antcall
target
=
"test"
/>
<
antcall
target
=
"report"
/>
</
target
>
<
target
name
=
"test"
>
<
taskdef
name
=
"jmeter"
classname
=
"org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"
/>
<
jmeter
jmeterhome
=
"${jmeter.home}"
resultlog
=
"${jmeter.result.jtlName}"
>
<!-- 聲明要運行的腳本。"*.jmx"指包含此目錄下的所有jmeter腳本 -->
<
testplans
dir
=
"D:\jemeterTest\script"
includes
=
"*.jmx"
/>
</
jmeter
>
</
target
>
<
target
name
=
"report"
>
<
xslt
in
=
"${jmeter.result.jtlName}"
out
=
"${jmeter.result.htmlName}"
style
=
"${jmeter.home}/extras/jmeter-results-detail-report_90Line.xsl"
/>
<!-- 因為上面生成報告的時候,不會將相關的圖片也一起拷貝至目標目錄,所以,需要手動拷貝 -->
<
copy
todir
=
"${jmeter.result.html.dir}"
>
<
fileset
dir
=
"${jmeter.home}/extras"
>
<
include
name
=
"collapse.png"
/>
<
include
name
=
"expand.png"
/>
</
fileset
>
</
copy
>
</
target
>
<!-- 發送郵件 -->
</
project
>
|
切換到D:\jemeterTest目錄下,輸入ant查看運行結果
運行前
運行后
瀏覽器打開HTML文件,顯示正確
二、Jmeter+ant+Jenkins
1、下載Jenkins安裝
2、命令行切換到jenkins.war的根目錄,輸入 java -jar jenkins.war
3、瀏覽器輸入地址http://localhost:8080/顯示界面,安裝成功
4、新建一個任務並配置
5、配置參數
舊的構建保存了你在一次構建中的所有臨時文件,如果構建沒有保留的必要,就勾選丟棄舊的構建,同時設置保持構建天使和保持構建的最大個數兩個參數。
注意:三個設置必須同時設置,否則無效
6、設置定時運行間隔,這里,設置間隔時間為15分鍾運行一次
7、設置invoke ant,完成后點擊保存
8、點擊立即構建,就可以調用ant,執行打包過程。在這里,也就是執行生成測試報告的步驟
三、Tomcat配置虛擬目錄
在tomcat文件夾的conf/Catalina/localhost(對於Tomcat6版本及其以上,需要自己創建catalina和localhost這兩個文件夾)下新建一個xml文件。
內容為:
|
1
2
3
4
5
|
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
Context
docBase
=
"換成你的路徑"
reloadable
=
"true"
>
</
Context
>
|
文件名改成你自己的譬如http://localhost:8080/infces ,文件名就為infces.xml
其他配置:
打開 Tomcat/conf/web.xml 文件,找到:
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
把false設成true保存,重啟Tomcat,讓tomcat支持文件列表顯示
輸入地址:http://localhost:8080/infces/
前期條件:存在Jmeter聚合測試報告TestReport201510100244.jtl
1、Ant安裝
下載ant地址
配置環境變量
命令行窗口輸入ant
安裝成功
2、將Jmeter保存的xml格式的聚合報告TestReport201510100244.jtl,放到相應的文件夾中
文件夾目錄結構:
D:\jemeterTest
3、編輯build.xml文件
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
project
name
=
"JmeterTest"
default
=
"all"
basedir
=
"."
>
<!-- 需要改成自己本地的 Jmeter 目錄-->
<
property
name
=
"jmeter.home"
value
=
"D:\soft\apache-jmeter-2.9"
/>
<!-- jmeter生成jtl格式的結果報告的路徑-->
<
property
name
=
"jmeter.result.jtl.dir"
value
=
"D:\jemeterTest\resultLog\jtl"
/>
<!-- jmeter生成html格式的結果報告的路徑-->
<
property
name
=
"jmeter.result.html.dir"
value
=
"D:\jemeterTest\resultLog\html"
/>
<!-- jtl文件-->
<
property
name
=
"jmeter.result.jtlName"
value
=
"${jmeter.result.jtl.dir}/TestReport201510100244.jtl"
/>
<!-- 生成HTML文件 -->
<
property
name
=
"jmeter.result.htmlName"
value
=
"${jmeter.result.html.dir}/TestReport201510100244.html"
/>
<
target
name
=
"all"
>
<
antcall
target
=
"report"
/>
</
target
>
<
target
name
=
"report"
>
<
xslt
in
=
"${jmeter.result.jtlName}"
out
=
"${jmeter.result.htmlName}"
>
<!-- Jmeter自帶的XSLT樣式表在目錄extras下面-->
style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" /></
xslt
>
</
target
>
</
project
>
|
4、切換到D:\jemeterTest目錄下,輸入ant查看運行結果,在D:\jemeterTest\resultLog\html目錄下生成TestReport201510100244.html文件
5、打開TestReport201510100244.html文件
6、發現Min Time和Max Time盡然沒有顯示出來顯示的Nan
這個問題比較奇葩,我的初步定為思路如下
1)首先我先看一下Jmeter自帶的XSLT樣式表問題
將TestReport201510100244.jtl文件的第二行加入
<?xml-stylesheet type="text/xsl" href="D:/soft/apache-jmeter-2.9/extras/jmeter-results-detail-report_21.xsl"?>
用瀏覽器打開顯示正常,初步排除了XSLT樣式表問題
2)編寫java程序,用程序去調取jmeter-results-detail-report_21.xsl,運行,發現報錯,提示
致命錯誤: "無法編譯樣式表",
從網上找到了解決方案,要下載一個xalan.jar,serializer.jar包放到項目中即可解決這個問題
3)將這兩個jar包入ant的lib包中再次切換到D:\jemeterTest目錄下,輸入ant查看運行結果,在D:\jemeterTest\resultLog\html目錄下生成TestReport201510100244.html文件,使用瀏覽器查看,OK,顯示了!
7、拓展顯示功能
我們發現在界面上沒有顯示,90%line,這個性能指標項,在這里我們需要修改XSLT樣式表,jmeter-results-detail-report_21.xsl增加部分內容后的文件如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<!--.......................其他內容略....................................-->
<!-- New add 90% line -->
<
xsl:variable
name
=
"allLineTime"
>
<
xsl:call-template
name
=
"line"
>
<
xsl:with-param
name
=
"nodes"
select
=
"/testResults/*/@t"
/>
<
xsl:with-param
name
=
"postion"
select
=
"$allPostion"
/>
</
xsl:call-template
>
</
xsl:variable
>
<!--.......................其他內容略....................................-->
<!-- New add 90% line -->
<
xsl:template
name
=
"line"
>
<
xsl:param
name
=
"nodes"
select
=
"/.."
/>
<
xsl:param
name
=
"postion"
select
=
"/.."
/>
<
xsl:choose
>
<
xsl:when
test
=
"not($nodes)"
>LNaN</
xsl:when
>
<
xsl:otherwise
>
<
xsl:for-each
select
=
"$nodes"
>
<
xsl:sort
data-type
=
"number"
order
=
"descending"
/>
<
xsl:if
test
=
"position() =$postion"
>
<
xsl:value-of
select
=
"number(.)"
/>
</
xsl:if
>
</
xsl:for-each
>
</
xsl:otherwise
>
</
xsl:choose
>
</
xsl:template
>
<!--.......................其他內容略....................................-->
|
注:90%Line邏輯(網上找的釋疑)
一組數由小到大進行排列,找到他的第90%個數(假如是10),那么這個數組中有90%的數將小於等於120。
用在性能測試的響應時間也將非常有意義,也就是90%用戶響應時間不會超過12 秒
1)修改build.xml文件中的內容style="${jmeter.home}/extras/jmeter-results-detail-report_90Line.xsl" 然后切換到D:\jemeterTest目錄下,輸入ant查看運行結果,在
D:\jemeterTest\resultLog\html目錄下生成TestReport201510100244.html文件,成功了!
准備工作:
1.java的運行環境正常,及運行java -version、javac -version能正常輸出java版本;
2.ant的運行環境正常,使用ant需要配置環境變量,編輯/etc/profile,在結尾處添加:
export ANT_HOME="/export/servers/ant"
export PATH="/export/servers/ant/bin":$PATH
保存退出后,執行命令source /etc/profile使環境變量即可生效。
3.將JMeter所在目錄下extras子目錄里的ant-JMeter- 1.1.1.jar復制到Ant所在目錄lib子目錄之下,這樣Ant運行時才能找 到"org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"這個類,從而成功觸發JMeter腳本
配置build.xml:
將本猿編寫的jmetertool.tar.gz上傳到服務器並解壓,編輯其中的build.xml:
- <project name="autotest" default="all" basedir=".">
- <!-- 需要改成自己本地的 Jmeter 目錄-->
- <property name="jmeter.home" value="/export/servers/jmeter"/>
- <!-- jmeter生成jtl格式的結果報告的路徑-->
- <property name="jmeter.result.jtl.dir" value="${basedir}/jtl" />
- <!-- jmeter生成html格式的結果報告的路徑-->
- <property name="jmeter.result.html.dir" value="${basedir}/html" />
- <!-- jmeter生成csv格式的結果報告的路徑-->
- <property name="jmeter.result.csv.dir" value="${basedir}/csv" />
- <!-- 編譯后class文件目錄 -->
- <property name="classes" value="${basedir}/classes"/>
- <!-- 生成的報告的前綴-->
- <property name="ReportName" value="TestTomNgx"/>
- <!-- 參數-->
- <property name="threads1" value="5" />
- <property name="threads2" value="5" />
修改其中的jmeter目錄一定要修改成你本地所在的目錄,根據需要修改ReportName以及線程數。
- <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl"><testplans dir="${basedir}" includes="test.jmx"/>
上傳被測的jmx文件到當前目錄,並修改build.xml中的jmx文件名。
為了能夠動態修改壓測的線程數,我們使用vi命令打開被測的jmx文件:
- <stringProp name="ThreadGroup.num_threads">${__P(request.threads1)}</stringProp>
將線程數設置項改為該參數,名字與build.xml中的對應即可。
- <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl">
- <testplans dir="${basedir}" includes="testbaidu.jmx"/>
- <property name="jmeter.save.saveservice.output_format" value="csv"/>
- <property name="jmeter.save.saveservice.response_message" value="false" />
- <jvmarg value="-Xincgc"/>
- <jvmarg value="-Xms1024m"/>
- <jvmarg value="-Xmx1024m"/>
- <property name="request.threads1" value="${threads1}"/>
- <property name="request.threads2" value="${threads2}"/>
參數 ${threads1}、${threads2}當前默認值是5個線程,可自行修改。
開始壓測:
做完上面的工作,運行命令ant或者ant -Dthreads=8 -Dthreads=3即可,會自動啟動jmeter進行壓測,jmeter運行完畢后,會自動執行將生成的jtl文件分析為csv文件的工作,執行完畢后會有類似如下輸出:

同時當前目錄會自動創建jtl、html、csv三個文件夾:

查看結果:
那么問題來了,我們怎么查看壓測的結果呢?很簡單,在當前機器上配置一個tomcat,將當前的目錄(我的是/export/servers/jmeter/script)配置為tomcat的虛擬目錄,在tomcat的web.xml中找到
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
設置為true以開啟目錄瀏覽功能。好了,我們訪問該tomcat即可,http://ip:port/html。

每執行一次測試,都會自動建立一個文件夾,點進相應的文件夾,有幾個接口就會html,點擊相應的html我們就可以看到圖表方式的TPS、響應時間等。


批量定時運行:
使用linux的crontab命令即可,crontab -e 每行添加一條ant命令例如:
30 1 11 * * ant -Dthreads1=8 Dthreads2=6
30 2 11 * * ant -Dthreads1=16 Dthreads2=12
或者使用at命令也很方便,從此再也不用因為加班到很晚而得罪老婆大人了,第二天早上來打開瀏覽器看結果就行。
如果需要多機負載的話,在<jmeter jmeterhome="${jmeter.home}" runremote="true" resultlog="${jmeter.result.jtl.dir}/${ReportNam
e}${time}.jtl">
然后修改jmeter/bin目錄下的jmeter.propties即可






















