本文由濤濤君寫給想了解性能測(cè)試和JMeter的小白,,適合對(duì)這兩者了解很少的同學(xué)們,,如果已經(jīng)有使用經(jīng)驗(yàn)的請(qǐng)繞道,別浪費(fèi)時(shí)間:-) 我們將介紹JMeter的使用場(chǎng)景,如何安裝、運(yùn)行JMeter,以及開始一個(gè)最最簡(jiǎn)單的測(cè)試,。你還徘徊在JMeter的門口嗎?別猶豫了,,跟著本文做完,,你就可以開啟你的JMeter之旅了。 Apache JMeter是一款純java編寫負(fù)載功能測(cè)試和性能測(cè)試開源工具軟件,。相比Loadrunner而言,,JMeter小巧輕便且免費(fèi),,逐漸成為了主流的性能測(cè)試工具,是每個(gè)測(cè)試人員都必須要掌握的工具之一,。 本文為JMeter性能測(cè)試完整入門篇,,從Jmeter下載安裝到編寫一個(gè)完整性能測(cè)試腳本、最終執(zhí)行性能測(cè)試并分析性能測(cè)試結(jié)果,。 運(yùn)行環(huán)境為Windows 10系統(tǒng),,JDK版本為1.8,JMeter版本為3.3,。 2. Jmeter安裝2.1 JDK安裝由于Jmeter是基于java開發(fā),,首先需要下載安裝JDK (目前JMeter只支持到Java 8,尚不支持 Java 9) 1. 官網(wǎng)下載地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2. 選擇Java SE 8u151/ 8u152,,點(diǎn)擊JDK下載
3. 安裝下載的JDK 4. 配置系統(tǒng)環(huán)境變量 2.2 JMeter安裝官網(wǎng)下載地址:http://jmeter./download_jmeter.cgi 下載最新JMeter 3.3版本:apache-jmeter-3.3.zip
下載完成后解壓zip包 啟動(dòng)JMeter 雙擊JMeter解壓路徑(apache-jmeter-3.3\bin)bin下面的jmeter.bat即可
3. 測(cè)試實(shí)例我們選取最常見(jiàn)的百度搜索接口: 3.1 接口地址http://www.baidu.com/s?ie=utf-8&wd=jmeter性能測(cè)試 3.2 請(qǐng)求參數(shù)ie:編碼方式,,默認(rèn)為utf-8 wd: 搜索詞 3.3 返回結(jié)果搜索結(jié)果,我們可以通過(guò)校驗(yàn)結(jié)果中是否含有搜索詞wd來(lái)判斷本次請(qǐng)求成功或失敗,。 4. JMeter腳本編寫4.1 添加線程組右鍵點(diǎn)擊“測(cè)試計(jì)劃” -> “添加” -> “Threads(Users)” -> “線程組” 這里可以配置線程組名稱,,線程數(shù),,準(zhǔn)備時(shí)長(zhǎng)(Ramp-Up Period(in seconds))循環(huán)次數(shù),,調(diào)度器等參數(shù): 線程組參數(shù)詳解: 1. 線程數(shù):虛擬用戶數(shù),。一個(gè)虛擬用戶占用一個(gè)進(jìn)程或線程,。設(shè)置多少虛擬用戶數(shù)在這里也就是設(shè)置多少個(gè)線程數(shù),。 2. Ramp-Up Period(in seconds)準(zhǔn)備時(shí)長(zhǎng):設(shè)置的虛擬用戶數(shù)需要多長(zhǎng)時(shí)間全部啟動(dòng)。如果線程數(shù)為10,,準(zhǔn)備時(shí)長(zhǎng)為2,,那么需要2秒鐘啟動(dòng)10個(gè)線程,也就是每秒鐘啟動(dòng)5個(gè)線程,。 3. 循環(huán)次數(shù):每個(gè)線程發(fā)送請(qǐng)求的次數(shù),。如果線程數(shù)為10,循環(huán)次數(shù)為100,,那么每個(gè)線程發(fā)送100次請(qǐng)求,。總請(qǐng)求數(shù)為10*100=1000 ,。如果勾選了“永遠(yuǎn)”,,那么所有線程會(huì)一直發(fā)送請(qǐng)求,一到選擇停止運(yùn)行腳本,。 4. Delay Thread creation until needed:直到需要時(shí)延遲線程的創(chuàng)建,。 5. 調(diào)度器:設(shè)置線程組啟動(dòng)的開始時(shí)間和結(jié)束時(shí)間(配置調(diào)度器時(shí),需要勾選循環(huán)次數(shù)為永遠(yuǎn)) 持續(xù)時(shí)間(秒):測(cè)試持續(xù)時(shí)間,,會(huì)覆蓋結(jié)束時(shí)間 啟動(dòng)延遲(秒):測(cè)試延遲啟動(dòng)時(shí)間,,會(huì)覆蓋啟動(dòng)時(shí)間 啟動(dòng)時(shí)間:測(cè)試啟動(dòng)時(shí)間,,啟動(dòng)延遲會(huì)覆蓋它。當(dāng)啟動(dòng)時(shí)間已過(guò),,手動(dòng)只需測(cè)試時(shí)當(dāng)前時(shí)間也會(huì)覆蓋它,。 結(jié)束時(shí)間:測(cè)試結(jié)束時(shí)間,持續(xù)時(shí)間會(huì)覆蓋它,。 因?yàn)榻涌谡{(diào)試需要,,我們暫時(shí)均使用默認(rèn)設(shè)置,待后面真正執(zhí)行性能測(cè)試時(shí)再回來(lái)配置,。 4.2 添加HTTP請(qǐng)求右鍵點(diǎn)擊“線程組” -> “添加” -> “Sampler” -> “HTTP請(qǐng)求” 對(duì)于我們的接口http://www.baidu.com/s?ie=utf-8&wd=jmeter性能測(cè)試,,可以參考下圖填寫: Http請(qǐng)求主要參數(shù)詳解: Web服務(wù)器 協(xié)議:向目標(biāo)服務(wù)器發(fā)送HTTP請(qǐng)求協(xié)議,可以是HTTP或HTTPS,,默認(rèn)為HTTP 服務(wù)器名稱或IP :HTTP請(qǐng)求發(fā)送的目標(biāo)服務(wù)器名稱或IP 端口號(hào):目標(biāo)服務(wù)器的端口號(hào),,默認(rèn)值為80 2.Http請(qǐng)求 方法:發(fā)送HTTP請(qǐng)求的方法,可用方法包括GET,、POST,、HEAD、PUT,、OPTIONS,、TRACE、DELETE等,。 路徑:目標(biāo)URL路徑(URL中去掉服務(wù)器地址,、端口及參數(shù)后剩余部分) Content encoding :編碼方式,默認(rèn)為ISO-8859-1編碼,,這里配置為utf-8 同請(qǐng)求一起發(fā)送參數(shù) 在請(qǐng)求中發(fā)送的URL參數(shù),,用戶可以將URL中所有參數(shù)設(shè)置在本表中,表中每行為一個(gè)參數(shù)(對(duì)應(yīng)URL中的 name=value),,注意參數(shù)傳入中文時(shí)需要勾選“編碼”
4.3 添加察看結(jié)果樹右鍵點(diǎn)擊“線程組” -> “添加” -> “監(jiān)聽(tīng)器” -> “察看結(jié)果樹” 這時(shí),,我們運(yùn)行Http請(qǐng)求,修改響應(yīng)數(shù)據(jù)格式為“HTML Source Formatted”,,可以看到本次搜索返回結(jié)果頁(yè)面標(biāo)題為”jmeter性能測(cè)試_百度搜索“,。
4.4 添加用戶自定義變量我們可以添加用戶自定義變量用以Http請(qǐng)求參數(shù)化,右鍵點(diǎn)擊“線程組” -> “添加” -> “配置元件” -> “用戶定義的變量”: 新增一個(gè)參數(shù)wd,,存放搜索詞: 并在Http請(qǐng)求中使用該參數(shù),,格式為:${wd}
4.5 添加斷言右鍵點(diǎn)擊“HTTP請(qǐng)求” -> “添加”-> “斷言” -> “響應(yīng)斷言” 我們校驗(yàn)返回的文本中是否包含搜索詞,添加參數(shù)${wd}到要測(cè)試的模式中:
4.6 添加斷言結(jié)果右鍵點(diǎn)擊“HTTP請(qǐng)求” -> “添加”-> “監(jiān)聽(tīng)器” -> “斷言結(jié)果”
這時(shí),,我們?cè)龠\(yùn)行一次就可以看到斷言結(jié)果成功或失敗了
4.7 添加聚合報(bào)告右鍵點(diǎn)擊“線程組” -> “添加” -> “監(jiān)聽(tīng)器” -> “聚合報(bào)告”,,用以存放性能測(cè)試報(bào)告 這樣,我們就完成了一個(gè)完整Http接口的JMeter性能測(cè)試腳本編寫,。 5. 執(zhí)行性能測(cè)試5.1 配置線程組點(diǎn)擊線程組,,配置本次性能測(cè)試相關(guān)參數(shù):線程數(shù),,循環(huán)次數(shù),持續(xù)時(shí)間等,,這里我們配置并發(fā)用戶數(shù)為10,,持續(xù)時(shí)間為60s
5.2 執(zhí)行測(cè)試點(diǎn)擊綠色小箭頭按鈕即可啟動(dòng)測(cè)試,測(cè)試之前需要點(diǎn)擊小掃把按鈕清除之前的調(diào)試結(jié)果,。
6. 分析測(cè)試報(bào)告待性能測(cè)試執(zhí)行完成后,,打開聚合報(bào)告可以看到:
聚合報(bào)告參數(shù)詳解: 1. Label:每個(gè) JMeter 的 element(例如 HTTP Request)都有一個(gè) Name 屬性,這里顯示的就是 Name 屬性的值 2. #Samples:請(qǐng)求數(shù)——表示這次測(cè)試中一共發(fā)出了多少個(gè)請(qǐng)求,,如果模擬10個(gè)用戶,,每個(gè)用戶迭代10次,那么這里顯示100 3. Average:平均響應(yīng)時(shí)間——默認(rèn)情況下是單個(gè) Request 的平均響應(yīng)時(shí)間,,當(dāng)使用了 Transaction Controller 時(shí),,以Transaction 為單位顯示平均響應(yīng)時(shí)間 4. Median:中位數(shù),也就是 50% 用戶的響應(yīng)時(shí)間 5. 90% Line:90% 用戶的響應(yīng)時(shí)間 6. Min:最小響應(yīng)時(shí)間 7. Max:最大響應(yīng)時(shí)間 8. Error%:錯(cuò)誤率——錯(cuò)誤請(qǐng)求數(shù)/請(qǐng)求總數(shù) 9. Throughput:吞吐量——默認(rèn)情況下表示每秒完成的請(qǐng)求數(shù)(Request per Second),,當(dāng)使用了 Transaction Controller 時(shí),,也可以表示類似 LoadRunner 的 Transaction per Second 數(shù) 10. KB/Sec:每秒從服務(wù)器端接收到的數(shù)據(jù)量,相當(dāng)于LoadRunner中的Throughput/Sec 一般而言,,性能測(cè)試中我們需要重點(diǎn)關(guān)注的數(shù)據(jù)有: #Samples 請(qǐng)求數(shù),,Average 平均響應(yīng)時(shí)間,Min 最小響應(yīng)時(shí)間,,Max 最大響應(yīng)時(shí)間,,Error% 錯(cuò)誤率及Throughput 吞吐量。
|