±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcsdn£¬±¾ÎÄÖ÷Òª½²ÊöÁ˴ÐÔÄܲâÊÔÁ÷³Ì£¬»·¾³ÐèÇ󣬰²×°±ØÒªÈí¼þ£¬Jmeter
GUIÉÏÖÆ¶¨²âÊԼƻ®£¬Éú³É²âÊԼƻ®jmxÎļþ£¬non-GUI·½Ê½Ö´ÐÐJmeter£¬Éú³É±¨¸æÍ¼±íµÈ·½·¨¡£ |
|
1¡¢ÐÔÄܲâÊÔÁ÷³Ì
¸ÃÐÔÄܲâÊÔ¿ò¼Ü¹¤×÷µÄÁ÷³ÌÖ÷ÒªÓУº´¥·¢²âÊÔ¨C>²¿Êð²âÊԽű¾¨C>²¿Êð±»²âϵͳ¨C>Jmeter´òѹ¨C>±»²âϵͳÈÕÖ¾·ÖÎö£¬5¸ö½×¶Î¡£
ÌåÏÖÔÚJenkinsÉÏ£¬¾ÍÊÇÏÂÃæÕâ¸öjenkins µÄMultiJob
Project¡ª¡ªPerformance-test-jobs£º

×¢Ò⣺ÔÚÑ¡ÔñPerformance-test-jobsµÄ¹¹½¨²½Öèʱ£¬ÒªÑ¡ÔñConditional
steps£¨multiple£©¡£
ÏÂÃæ¶Ô¸ÃÐÔÄܲâÊÔ¿ò¼Ü´î½¨µÄ¹ý³Ì½øÐÐÏêϸµÄ½éÉÜ¡£
2¡¢»·¾³ÐèÇó
Õû¸ö²âÊÔ¿ò¼ÜÐèÒªÒÔÏ»úÆ÷£º
1£©jenkins master£ºÓÃÓÚ¹ÜÀí²âÊÔ»ú¡¢½¨Á¢ÐÔÄܲâÊÔjob¡¢Æô¶¯ÐÔÄܲâÊÔ¡¢Õ¹Ê¾ÐÔÄܲâÊÔ½á¹û¡£
2£©Load generator£ºÓÃÀ´¸ø±»²âÊÔ·þÎñÆ÷·¢ËÍÇëÇ󣬵±Ò»Ì¨Load
generator·¢Ë͵IJ¢·¢ÇëÇóÊý´ï²»µ½²âÊÔÒªÇóʱ£¬¿ÉÄÜÐèÒªÅäÖöą̀¡£Setup ENV½×¶ÎµÄPerformance-test-script-deploymentÒÔ¼°Run
test½×¶ÎµÄjob¶¼ÊÇÔËÐÐÔÚÕâ»úÆ÷Éϵġ£
3£©±»²âÊÔ·þÎñÆ÷£ºÓÃÓÚ°²×°±»²âÊÔ·þÎñµÄ»úÆ÷£¬·ÖÎö±»²âÊÔ·þÎñµÄlogµÄjobÒ²ÊÇÔËÐÐÔÚÕâ¸ö»úÆ÷Éϵġ£
ÆäÖУ¬Load generatorºÍ±»²âÊÔ·þÎñÆ÷¶¼ÊÇ×÷Ϊslave½Úµã¹ÒÔØÔÚjenkins
masterÉϵġ£
3¡¢°²×°±ØÒªÈí¼þ
3.1¡¢°²×°Jenkins¼°²å¼þ
°²×°JenkinsµÄ²½Ö裬ÕâÀï²»Õ¹¿ª½²ÁË¡£ÕâÀïÖ÷Òª½éÉÜÒ»ÏÂÓëÐÔÄܲâÊÔÓйصÄjenkins²å¼þ¡ª¡ªPerformance
Plugin¡£Õâ¸ö²å¼þµÄ×÷ÓÃÊǽâÎöJmeterÉú³ÉµÄ²âÊÔ±¨¸æ£¬Ö±¹ÛµÄչʾ³öÀ´¡£
°²×°²å¼þµÄ·½·¨ºÜ¼òµ¥£¬µÇ½Jenkins£¬ÔÚManage Plugins½çÃæËÑË÷¡°Performance
Plugin¡±µã»÷°²×°¼´¿É¡£
Èç¹û°²×°ÕýÈ·£¬ÔÚÐÔÄܲâÊÔjobµÄÅäÖÃÒ³ÃæµÄ ¡°Add post-build
action¡± ²½ÖèÀïÃæÄܹ»¿´µ½ ¡°Publish Performance Test Result
Report¡± Ñ¡Ïî¡£
3.2¡¢Jmeter°²×°¼°ÅäÖÃ
ÔÚÐÔÄܲâÊÔѹÁ¦»úÉÏ£¬ÏÂÔØ²¢°²×°Jmeter£¨ÏÂÔØµØÖ·£ºhttp://jmeter.apache.org/download_jmeter.cgi£©£¬½âѹµ½Ä¿Â¼/usr/local¡£[ÏÂÔØ¶þ½øÖƵÄ]
Ö®ºó£¬ÏÂÔØjmeter-plugins²å¼þJMeterPlugins-Standard-1.2.0.zip£¨ÏÂÔØµØÖ·http://jmeter-plugins.org/downloads/all/£©¡£
½âѹºó½«ÆäÖеÄjar°ü¿½±´ÖÁjmeter°²×°Ä¿Â¼/lib/ext/Ŀ¼£¨Èç¹ûûÓÐÔò´´½¨Ö®£©Ï¼´¿É¡£
Õâ¸ö²å¼þµÄ×÷ÓÃÊÇ£¬µ±Í¨¹ýno-GUI·½Ê½Ö´ÐвâÊÔÖ®ºó£¬½«Éú³ÉµÄ²âÊÔ½á¹ûÎļþ*.jtl½âÎö³ÉͼƬµÄÐÎʽ£¬±È½ÏÖ±¹Û¡£
3.3¡¢°²×°ÏµÍ³×ÊÔ´¼à¿Ø²å¼þ
ΪÁË¼à¿Ø±»²â·þÎñÆ÷µÄϵͳ×ÊÔ´£¬ÐèÒªÔÚ±»²âÊÔ»úÉϰ²×°ServerAgent£¬ÏÂÔØServerAgent-2.2.1.zip£¨ÏÂÔØµØÖ·http://jmeter-plugins.org/downloads/all/£©£¬²¢ÔÚ±»²âÊÔ»úÉÏÆô¶¯startAgent.sh¡£¸Ã²å¼þÄܹ»¶Ô·þÎñÆ÷µÄ
CPU¡¢ÄÚ´æ¡¢Swap¡¢´ÅÅÌ I/O¡¢ÍøÂç I/O ½øÐÐ¼à¿Ø£¡
4¡¢Jmeter GUIÉÏÖÆ¶¨²âÊԼƻ®
ÎÒÃǵIJâÊÔÖ´ÐÐʵÔÚJenkinsÖÐͨ¹ý·ÇGUI·½Ê½Ö´ÐÐJmeterѹÁ¦²âÊԵġ£ÔÚJmeterGUIÉÏÖÆ¶¨²âÊԼƻ®µÄÄ¿µÄÊÇ£¬½«²âÊԼƻ®±£´æ³É.jmxÎļþ£¬ÒÔ±ãÄܹ»ÔÚJmeterµÄ·ÇGUIģʽÏÂÖ´ÐвâÊÔ¡£
4.1¡¢½¨Á¢Thread Group
ÓÐÈý¸ö±ØÐëÉèÖõÄÊôÐÔ£¨¼ûÏÂͼºì¿ò²¿·Ö£©£¬ÕâÀï²ÉÓú¯Êý__P()ÉèÖÃÊôÐÔÃûºÍĬÈÏÖµµÄÐÎʽÉèÖÃÕâÈý¸öÊôÐÔ£¬ÒÔ·½±ãÔÚʹÓÃno-GUIģʽÆô¶¯Jmeter½øÐвâÊÔʱ£¬Ê¹ÓèCjmeterpropertyÑ¡Ïî¶ÔÊôÐÔÖµ½øÐи³Öµ¡£

4.2¡¢Ìí¼ÓHTTP Request
ÓÉÓÚÎÒÃǵIJâÊÔÊÇ·¢ËÍHTTPÇëÇó¸øServing·þÎñÆ÷£¬Òò´ËÕâÀïÑ¡ÔñÌí¼ÓµÄSamplerÊÇHTTP
Request¡£
ÕâÀïÐèÒªÌí¼Ó±»²â·þÎñÆ÷µÄÓòÃû»òÕßÍøÖ·£¬ÕâÀïÒ²²ÉÓú¯Êý__P()ÉèÖÃÊôÐÔÃûºÍĬÈÏÖµµÄÐÎʽÉèÖÃÕâ¸öÊôÐÔ¡£

ÁíÍ⣬»¹ÒªÉèÖÃÇëÇóµÄ¾ßÌ嵨ַPath¡£ÓÉÓÚÎÒÃDzâÊÔ¹ý³ÌÖÐÇëÇóµÄÍøÖ·ÊDz»Ò»ÑùµÄ¡£Òò´ËÐèÒªÐèÒª¶ÔÕâ¸öPath½øÐвÎÊý»¯£¬Ö¸¶¨Îª±äÁ¿${path}¡£ÓÖÓÉÓÚÎÒÃÇÇëÇóµÄÍøÖ·ÊÇ´æ·Åµ½Ò»¸ö½Ð×÷path.logµÄÎļþÖеġ£Òò´Ë£¬²ÎÊý»¯µÄ·½·¨ÊÊÒ˲ÉÓÃCSV
Data Set Config¡£ÕâÀïFilenameÎÒÃÇÉèÖÃΪÊôÐÔUrlFile£¬¸ÃÊôÐÔ¿ÉÒÔÔÚʹÓÃno-GUIģʽÆô¶¯Jmeter½øÐвâÊÔʱ£¬Ê¹ÓèCjmeterpropertyÑ¡ÏîÖ¸¶¨¾ßÌåµÄÎļþ¡£

4.3¡¢Ìí¼ÓListener
ÔÚTestPlanÉÏÓÒ»÷£¬Add¨C>Listener¨C>Aggregate
Report¡£
ÁíÍ⣬Ìí¼ÓÁËPerfMon Metrics CollectorµÄListner£¬À´ÊÕ¼¯±»²âÊÔ»úµÄCPU,memoryÐÅÏ¢¡£



¿ÉÒÔÖ¸¶¨½«report±£´æµ½Ä³¸öÎļþ£¬ÈçÉÏͼÖÐËùʾ±£´æµ½jtlÎļþ£¬ÔÚ·ÇGUIģʽÏÂÔËÐÐJmeterÕâÊǷdz£±ØÒªµÄ¡£
4.4¡¢Éú³É²âÊԼƻ®jmxÎļþ
Ò»ÇÐÉèÖÃÍ×µ±Ö®ºó£¬µã»÷²Ëµ¥À¸ÉϵÄFile->Save Test
Plan As.
´Ë²½Öè¿ÉÒÔ½«¸ÃTest Plan±£´æÎª.jmx¸ñʽµÄÎļþ¡£¸ÃÎļþÓÃÀ´½øÐÐnon-GUI·½Ê½½øÐÐJmeter²âÊÔ¡£

5¡¢non-GUI·½Ê½Ö´ÐÐJmeter
non-GUI·½Ê½Ö´ÐÐJmeterµÄÃüÁ
jmeter.sh -n
-t test.jmx -l result.jtl \
--jmeterproperty threadCount=${CONCURRENCY} \
--jmeterproperty LoopCount=${LOOPCOUNT} \
--jmeterproperty adclient=${SERVER} \
--jmeterproperty UrlFile=path.log \
--jmeterproperty RampUp=${RAMPUP} \
--jmeterproperty throughput=${THROUGHPUT} |
˵Ã÷£º
-n ·Ç GUI ģʽ -> ÔÚ·Ç GUI ģʽÏÂÔËÐÐ JMeter
-t ²âÊÔÎļþ -> ÒªÔËÐÐµÄ JMeter ²âÊԽű¾Îļþ
-l ÈÕÖ¾Îļþ -> ¼Ç¼½á¹ûµÄÎļþ
¨CjmeterpropertyÉèÖÃtest.jmxÖеÄÊôÐÔ£¨¼û¡°Jmeter
GUIÉÏÖÆ¶¨²âÊԼƻ®¡±²¿·Ö£©
6¡¢Éú³É±¨¸æÍ¼±í
ÎÒÃÇ¿ÉÒÔͨ¹ýJenkinsÉϰ²×°µÄJMeterPlugins-Standard²å¼þÀ´½«²âÊÔ½á¹ûÎļþ.jtl¸ñʽµÄÎļþ½âÎö³Éͼ±í¡£
$JMETEREXT
= /usr/local /apache- jmeter-2.13 /lib/ext
java -jar $ JMETEREXT/CMDRunner.jar --tool Reporter
\
--generate- png ResponseTimesOverTime.png -- input-jtl
result.jtl -- plugin-type ResponseTimesOverTime
java -jar $JMETEREXT / CMDRunner.jar --tool Reporter
\
-- generate- png CPU. png --input-jtl cpu.jtl
--plugin-type PerfMon
java -jar $ JMETEREXT / CMDRunner.jar --tool Reporter
\
--generate-png MEM.png --input-jtl mem.jtl --
plugin- type PerfMon
java -jar $ JMETEREXT / CMDRunner.jar --tool Reporter
\
-- generate - png TransactionsPerSecond .png --
input - jtl trans.jtl --plugin- type TransactionsPerSecond |
7¡¢job shellÉèÖÃ
JenkinsµÄjobÖÐͨ¹ý²ÎÊý´«µÝ¸øjmeterpropertyÖеıäÁ¿ÖС£
Execute shellµÄÄÚÈÝ£º
source /etc/
profile
THROUGHPUT =`expr 60 \* ${QPS}`
RUNFOLDER =/usr/local/jmeter-demo/src/test/jmeter
JMETERBIN =/usr/local/apache-jmeter-2.13/bin
JMETEREXT =/usr/local/apache-jmeter-2.13/lib/ext
RESULTJTL =$RUNFOLDER/result.jtl
CPUJTL =$RUNFOLDER/cpu.jtl
MEMJTL =$RUNFOLDER/mem.jtl
TRANSJTL =$RUNFOLDER/trans.jtl
rm -f $RUNFOLDER /path.log
rm -f $RUNFOLDER /*.jtl
rm -f $RUNFOLDER /*.png
rm -f $WORKSPACE /*.png
rm -f $WORKSPACE /*.jtl cd / usr/local /jmeter
-demo /src /test /jmeter && python appending.py
${ APPENDING}
cd /usr/local/ jmeter-demo /src/test /jmeter &&
$JMETERBIN/ jmeter.sh - n - t test.jmx -l result
.jtl \
-- jmeterproperty threadCount =${CONCURRENCY}
\
-- jmeterproperty LoopCount =${LOOPCOUNT} \
-- jmeterproperty adclient =${SERVER} \
-- jmeterproperty UrlFile =path.log \
--jmeterproperty RampUp=${RAMPUP} \
-- jmeterproperty throughput =${THROUGHPUT}
java - jar $JMETEREXT/ CMDRunner.jar -- tool Reporter
-- generate-png ${RESULTJTL%.*}_ ResponseTimesOverTime
.png -- input-jtl $ RESULTJTL -- plugin- type
ResponseTimesOverTime
java -jar $JMETEREXT/ CMDRunner.jar -- tool Reporter
-- generate-png ${CPUJTL%.*} _CPU.png -- input-jtl
$CPUJTL -- plugin-type PerfMon
java -jar $JMETEREXT/ CMDRunner.jar -- tool Reporter
-- generate-png ${MEMJTL%.*}_ MEM.png -- input-jtl
$MEMJTL --plugin-type PerfMon
java -jar $JMETEREXT/ CMDRunner.jar -- tool Reporter
-- generate- png ${TRANSJTL%.*}_ TransactionsPerSecond
.png -- input-jtl $TRANSJTL --plugin-type TransactionsPerSecond
cp /usr/local/ jmeter-demo/src/test /jmeter/ *.png
$WORKSPACE
cp /usr/local/ jmeter-demo/src/test /jmeter/ result.jtl
$WORKSPACE |
|