JMeter主要組件介紹
1.測(cè)試計(jì)劃(Test Plan)是使用 JMeter 進(jìn)行測(cè)試的起點(diǎn),它是其它 JMeter 測(cè)試元件的容器。
2.線程組(Thread Group)代表一定數(shù)量的并發(fā)用戶鉴扫,它可以用來(lái)模擬并發(fā)用戶發(fā)送請(qǐng)求糠馆。
3.取樣器(sampler)定義實(shí)際的請(qǐng)求內(nèi)容,被線程組包含窗怒,我們主要用HTTP請(qǐng)求绢要。
4.監(jiān)聽器(Listener)
5.邏輯控制器(Logic Controller)
6.斷言(Assertions)
7.配置元件(Config Element)
8.前置處理器(Pre Processors)和后置處理器(Post Processors)
9.定時(shí)器(Timer)
JMeter主要組件介紹-測(cè)試計(jì)劃
1.測(cè)試計(jì)劃(Test Plan)是使用 JMeter 進(jìn)行測(cè)試的起點(diǎn)巧颈,它是其它 JMeter 測(cè)試元件的容器。
2.名稱:你可以為你的測(cè)試計(jì)劃取一個(gè)有意義的名字袖扛。
3.注釋:對(duì)測(cè)試計(jì)劃的注釋。
4.用戶定義的變量:用戶可以自己定義變量,在用到此變量的時(shí)候直接用${變量名}引用即可蛆封。例:變量名=url唇礁,值=http://www.baidu.com,在需要http://www.baidu.com時(shí)直接用${url}即可惨篱。
5.Add directory or jar to classpath:向類路徑即%JMETER-HOME%\lib中添加目錄及jar包盏筐。
JMeter主要組件介紹-線程組
1.名稱:為線程組起名字。
3.線程屬性-線程數(shù):設(shè)置發(fā)送請(qǐng)求的用戶數(shù)目 砸讳,即并發(fā)數(shù)琢融。
4.線程屬性-Ramp-Up Period(in second):線程間的時(shí)間間隔,單位是秒簿寂。即所有線程在多少時(shí)間內(nèi)啟動(dòng)漾抬。
5.線程屬性-循環(huán)次數(shù):請(qǐng)求的重復(fù)次數(shù),如果選擇后面的forever(默認(rèn))常遂,那么 請(qǐng)求將一直繼續(xù)纳令,如果不選擇forever,而在輸入框中輸入數(shù)字克胳,那么請(qǐng)求將重復(fù)指定的次數(shù)平绩,如果輸入1,那么請(qǐng)求將執(zhí)行一次漠另,如果是0捏雌,會(huì)出現(xiàn)問(wèn)題。
5.調(diào)度器配置-啟動(dòng)時(shí)間:測(cè)試計(jì)劃什么時(shí)候啟動(dòng)笆搓,啟動(dòng)延遲會(huì)覆蓋它性湿。
6.調(diào)度器配置-結(jié)束時(shí)間:測(cè)試計(jì)劃什么時(shí)候結(jié)束,持續(xù)時(shí)間會(huì)覆蓋它砚作。
7.調(diào)度器配置-持續(xù)時(shí)間:測(cè)試計(jì)劃持續(xù)多長(zhǎng)時(shí)間窘奏,會(huì)覆蓋結(jié)束時(shí)間。
8.調(diào)度器配置-啟動(dòng)延遲:測(cè)試計(jì)劃延遲多長(zhǎng)時(shí)間啟動(dòng)葫录,會(huì)覆蓋啟動(dòng)時(shí)間着裹。
JMeter主要組件介紹-取樣器(HTTP請(qǐng)求)
1.名稱:HTTP請(qǐng)求的名字。
2.Web服務(wù)器-服務(wù)器名稱或IP米同、端口號(hào)骇扇,腳本錄制時(shí)自動(dòng)添加,也可以使用“用戶自定義變量”面粮。
3.HTTP請(qǐng)求:用默認(rèn)值即可少孝。
4.同請(qǐng)求一起發(fā)送參數(shù):請(qǐng)求中的參數(shù)、值可以在此設(shè)置熬苍,需要用到參數(shù)化及動(dòng)態(tài)數(shù)據(jù)關(guān)聯(lián)稍走,我們?cè)诤竺鎸iT介紹袁翁。
5.同請(qǐng)求一起發(fā)送文件:我可以制定同請(qǐng)求一起發(fā)送哪個(gè)文件。
6.其他任務(wù)包括:從HTML文件中獲取所有內(nèi)含的資源婿脸、用作監(jiān)視器粱胜、Embedded URLs must match。
JMeter主要組件介紹-監(jiān)聽器
1.監(jiān)聽器(Listener)負(fù)責(zé)收集測(cè)試結(jié)果狐树,同時(shí)也被告知了結(jié)果顯示的方式焙压。
我們常用的包括:聚合報(bào)告、查看結(jié)果樹抑钟、用表格查看結(jié)果涯曲,都支持將結(jié)果數(shù)據(jù)寫入文件。
其他的添加上去看看就行在塔。聚合報(bào)告前面我們介紹過(guò)幻件,后面是查看結(jié)果樹和用表格查看結(jié)果的截圖。
JMeter主要組件介紹-監(jiān)聽器(用表格查看結(jié)果)
JMeter主要組件介紹-邏輯控制器
1.邏輯控制器(Logic Controller)可以自定義JMeter發(fā)送請(qǐng)求的行為邏輯心俗,它與Sampler結(jié)合使用可以模擬復(fù)雜的請(qǐng)求序列傲武。
v循環(huán)控制器可以設(shè)置請(qǐng)求的循環(huán)次數(shù)或永遠(yuǎn)循環(huán)(如果選中永遠(yuǎn)的話)。
v事務(wù)控制器可以將多個(gè)請(qǐng)求放在同一個(gè)事務(wù)中城榛。如果選中Gegerate parent sample揪利,則聚合報(bào)告中只顯示事務(wù)控制器的數(shù)據(jù),而不會(huì)顯示其中的各個(gè)請(qǐng)求的數(shù)據(jù)狠持,反之則全部顯示疟位。
JMeter主要組件介紹-斷言
1.斷言(Assertions)可以用來(lái)判斷請(qǐng)求響應(yīng)的結(jié)果是否如用戶所期望的。它可以用來(lái)隔離問(wèn)題域喘垂,即在確保功能正確的前提下執(zhí)行壓力測(cè)試甜刻。這個(gè)限制對(duì)于有效的測(cè)試是非常有用的。
JMeter主要組件介紹-配置元件
1.配置元件(Config Element)維護(hù)Sampler需要的配置信息正勒,并根據(jù)實(shí)際的需要會(huì)修改請(qǐng)求的內(nèi)容得院。我們主要在參數(shù)化中用到CSV Data Set Config
JMeter主要組件介紹-前置處理器和后置處理器
1.前置處理器(Pre Processors)和后置處理器(Post Processors)負(fù)責(zé)在生成請(qǐng)求之前和之后完成工作。前置處理器常常用來(lái)修改請(qǐng)求的設(shè)置章贞,后置處理器則常常用來(lái)處理響應(yīng)的數(shù)據(jù)祥绞。我們主要在動(dòng)態(tài)關(guān)聯(lián)中用到后置處理器的正則表達(dá)式提取器。
JMeter主要組件介紹-定時(shí)器
1.定時(shí)器(Timer)負(fù)責(zé)定義請(qǐng)求之間的延遲間隔鸭限。
參數(shù)化設(shè)置
1.在我們的測(cè)試計(jì)劃中我們使用的都是HTTP請(qǐng)求蜕径,在HTTP請(qǐng)求中常常會(huì)提交一些參數(shù),我們?yōu)榱瞬幌朐诿恳淮握?qǐng)求中都使用相同的參數(shù)值败京,就要想辦法讓每一次請(qǐng)求的參數(shù)的值都是不一樣的兜喻,我們就需要進(jìn)行參數(shù)化設(shè)置,這里我們介紹兩種參數(shù)化設(shè)置的方法赡麦。
一種是利用函數(shù)助手中的_Random函數(shù)進(jìn)行參數(shù)化設(shè)置;
一種是利用配置元件中的CSV Data Set Config進(jìn)行參數(shù)化設(shè)置
2.JMeter中有一個(gè)函數(shù)助手的功能,里面內(nèi)置了多個(gè)函數(shù)窍育,我們可以利用其中的_Random函數(shù)來(lái)進(jìn)行請(qǐng)求中的參數(shù)化設(shè)置。
v在JMeter中選擇“選項(xiàng)-函數(shù)助手對(duì)話框”打開函數(shù)助手對(duì)話框渡冻。
v選擇一個(gè)功能_Random。
v設(shè)定最小值為1忧便。
v設(shè)定最大值為100。
v函數(shù)名稱設(shè)為func1帽借。
v點(diǎn)擊生成將生成一個(gè)引用字符串${_Random(1,100,func1}珠增,在需要的請(qǐng)求參數(shù)中拷貝該字符串即可。
v其中函數(shù)名稱用來(lái)在引用中作區(qū)別砍艾,即我們可以設(shè)定不同的名稱在不同的地方引用同一個(gè)函數(shù)的功能
v例如:我們生成了兩個(gè)串${_Random(1,100,func1)}蒂教、 ${_Random(1,100,func2)},在添加圖書的請(qǐng)求中脆荷,我們?cè)赽ookName的參數(shù)值中引用${_Random(1,100,func1)}凝垛,在bookConcern的參數(shù)值中應(yīng)用${_Random(1,100,func2)},見截圖蜓谋,這樣測(cè)試運(yùn)行時(shí)不同的線程將產(chǎn)生不同的bookName和bookConcern梦皮。
參數(shù)化設(shè)置-CSV Data Set Config(1)
v在線程組上點(diǎn)擊右鍵選擇添加-配置元件-CSV Data Set Config,打開CSV Data Set Config桃焕。
vFilename文件名:即參數(shù)化要引用的文件名剑肯。這里是d:\number.txt
vFile encoding文件編碼:可以不填。
vVariable Names(comma-delimited)變量名(用逗號(hào)分割):多個(gè)變量可以引用同一個(gè)文件观堂,用逗號(hào)分割让网。這里是num1,num2
vDelimiter(use ‘\t’ for tab):參數(shù)文件中多個(gè)變量值的分隔符师痕,\t表示用tab鍵分割溃睹,默認(rèn)是逗號(hào)。
vRecycle on EOF?:結(jié)束后是否循環(huán)胰坟?默認(rèn)是True.
vNumber.txt文件內(nèi)容見截圖因篇。
v在添加圖書的請(qǐng)求中,我們?cè)赽ookName的參數(shù)值中引用${num1}腕铸,在bookConcern的參數(shù)值中應(yīng)用${num2}惜犀,見截圖,這樣測(cè)試運(yùn)行時(shí)不同的線程將產(chǎn)生不同的bookName和bookConcern狠裹。
動(dòng)態(tài)數(shù)據(jù)關(guān)聯(lián)
1.在HTTP請(qǐng)求的參數(shù)中經(jīng)常會(huì)遇到一些參數(shù)的值是從服務(wù)器相應(yīng)的動(dòng)態(tài)數(shù)據(jù)虽界,這些數(shù)據(jù)需要進(jìn)行關(guān)聯(lián)才能使得每一次請(qǐng)求都能成功得被服務(wù)器接受,在JMeter中采用正則表達(dá)式提取器來(lái)獲取這些動(dòng)態(tài)的數(shù)據(jù)涛菠。
2.正則表達(dá)式允許用戶從服務(wù)器響應(yīng)中獲取數(shù)據(jù)莉御,作為一個(gè)后置處理器撇吞,正則表達(dá)式提取器會(huì)在每一個(gè)請(qǐng)求執(zhí)行后再執(zhí)行,正則表達(dá)式提取請(qǐng)求的參數(shù)值礁叔,產(chǎn)生模板字符串牍颈,并將結(jié)果保存到給出的變量中。
動(dòng)態(tài)數(shù)據(jù)關(guān)聯(lián)(1)-正則表達(dá)式提取器
1.在HTTP請(qǐng)求的參數(shù)中經(jīng)常會(huì)遇到一些參數(shù)的值是從服務(wù)器相應(yīng)的動(dòng)態(tài)數(shù)據(jù)琅关,這些數(shù)據(jù)需要進(jìn)行關(guān)聯(lián)才能使得每一次請(qǐng)求都能成功得被服務(wù)器接受煮岁,在JMeter中采用正則表達(dá)式提取器來(lái)獲取這些動(dòng)態(tài)的數(shù)據(jù)。比如我們想要獲得從服務(wù)器相應(yīng)的TOKEN涣易,就可以使用下面的正則表達(dá)式提取器画机。
動(dòng)態(tài)數(shù)據(jù)關(guān)聯(lián)(2)
v使用時(shí)就可以使用${token_g1}來(lái)表示獲取到的TOKEN值。如下圖:
使用命令行運(yùn)行JMeter腳本
vJMeter?-n -t my_test.jmx -l log.jtl
v-n告知JMeter采用非圖形化運(yùn)行JMeter腳本
v-t指定要運(yùn)行的腳本文件
v-l指定保存執(zhí)行結(jié)果的文件名
v執(zhí)行命令前要檢查當(dāng)前目錄是否是%JMeter_Home%\bin 目錄新症;
v如果?JMeter?腳本不在當(dāng)前目錄步氏,需要指定完整的路徑;如果要把執(zhí)行的結(jié)果保存在其他地方也要指定完整的路徑徒爹。
利用XSLT分析JMeter結(jié)果文件(1)
1.將結(jié)果文件的擴(kuò)展名改為xml荚醒,例:將log.jtl改為log.xml。
2.在log.xml的文件頭
<?xml version="1.0" encoding="UTF-8"?>
<testResults version="1.2">
中添加
<?xml-stylesheet type=“text/xsl” href=“jmeter-results-report.xsl” ?>
使之變成
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="jmeter-results-report.xsl" ?>
<testResults version="1.2">
其中href指定xsl文件的路徑隆嗅,如果與xml文件在同一目錄界阁,則只寫文件名即可,否則要寫明詳細(xì)路徑榛瓮。
利用XSLT分析JMeter結(jié)果文件(2)
1.將修改后的xml文件用瀏覽器打開即可得到統(tǒng)計(jì)結(jié)果:
JMeter中進(jìn)行分布式測(cè)試
作為一個(gè)純 JAVA 的GUI應(yīng)用铺董,JMeter對(duì)于CPU和內(nèi)存的消耗還是很驚人的,所以當(dāng)需要模擬數(shù)以千計(jì)的并發(fā)用戶時(shí)禀晓,使用單臺(tái)機(jī)器模擬所有的并發(fā)用戶就有些力不從心精续,甚至還會(huì)引起JAVA內(nèi)存溢出的錯(cuò)誤。不過(guò)粹懒,JMeter也可以像 LoadRunner 一樣通過(guò)使用多臺(tái)機(jī)器運(yùn)行所謂的代理來(lái)分擔(dān)負(fù)載產(chǎn)生器自身的壓力重付,并借此來(lái)獲取更大的并發(fā)用戶數(shù),我們只需手動(dòng)配置一下即可凫乖。
v1确垫、在所有期望運(yùn)行JMeter作為 負(fù)載產(chǎn)生器的機(jī)器上安裝JMeter,并確定其中一臺(tái)機(jī)器作為 控制器帽芽,其他的機(jī)器作為 代理删掀。然后運(yùn)行所有 代理 機(jī)器上的JMeter-server.bat文件—假定我們使用兩臺(tái)機(jī)器172.20.80.47和172.20.80.68作為 代理;
v2导街、在Controller 機(jī)器的JMeter安裝目錄下找到 bin 目錄披泪,再找到 jmeter.properties 這個(gè)文件,使用記事本或者其他文字編輯工具打開它搬瑰;
v3款票、在打開的文件中查找“remote_hosts=”這個(gè)字符串控硼,你可以找到這樣一行“remote_hosts=127.0.0.1”。其中的 127.0..0.1 表示運(yùn)行JMeter代理的機(jī)器艾少,這里需要修改為“remote_hosts=172.20.80.47卡乾,172.20.80.68”;
v4缚够、保存文件幔妨,并重新啟動(dòng)控制器機(jī)器上的JMeter,并進(jìn)入啟動(dòng) ->遠(yuǎn)程啟動(dòng)菜單項(xiàng)谍椅。就會(huì)看到我們剛才添加的兩個(gè)代理的地址陶冷,選中即可運(yùn)行,如果想同時(shí)啟動(dòng)所有代理毯辅,選擇遠(yuǎn)程全部啟動(dòng)即可。
要進(jìn)行分布式測(cè)試代理機(jī)器上需要添加環(huán)境變量煞额,即添加用戶變量JMETER_HOME=d:\jmeter思恐,系統(tǒng)變量中的path中添加d:\jmeter\bin(假設(shè)jmeter放在d盤根目錄下)。
運(yùn)行Jmeter進(jìn)行測(cè)試(4)-聚合報(bào)告詳解
vLabel:每個(gè) JMeter 的 element (例如 HTTP Request )都有一個(gè) Name 屬性膊毁,這里顯示的就是 Name 屬性的值
v#Samples:表示你這次測(cè)試中一共發(fā)出了多少個(gè)請(qǐng)求胀莹,如果測(cè)試計(jì)劃模擬10個(gè)用戶,每個(gè)用戶迭代10次婚温,這里就會(huì)顯示100
vAverage:平均響應(yīng)時(shí)間 — 默認(rèn)情況下是單個(gè) Request 的平均響應(yīng)時(shí)間描焰,當(dāng)使用了事務(wù)控制器時(shí),也可以以事務(wù)為單位顯示平均響應(yīng)時(shí)間
vMedian:中位數(shù)栅螟,也就是 50 %用戶的響應(yīng)時(shí)間
v90% Line: 90 %用戶的響應(yīng)時(shí)間
vMin:最小響應(yīng)時(shí)間
vMax:最大響應(yīng)時(shí)間
vError%:錯(cuò)誤率荆秦,本次測(cè)試中出現(xiàn)錯(cuò)誤的請(qǐng)求的數(shù)量 / 請(qǐng)求的總數(shù)
vThroughput:吞吐量 —— 默認(rèn)情況下表示每秒完成的請(qǐng)求數(shù)( Request per Second )
vKB/Sec:每秒從服務(wù)器端接收到的數(shù)據(jù)量