PPT 鏈接:ptteng.github.io/PPT/PPT/Jemeter.html#/?
視頻鏈接:v.qq.com/x/page/s0521q4xjwk.html????? v.qq.com/x/page/y0521854aik.html?
大家好,我是IT修真院北京分院第21期的學(xué)員韋琦,一枚正直純潔善良的java程序員。
今天給大家分享一下,修真院官網(wǎng)Java任務(wù)6,深度思考中的知識(shí)點(diǎn)————
什么是壓力測(cè)試,壓力測(cè)試工具jemeter的使用。
1.背景介紹
Apache JMeter是Apache組織開(kāi)發(fā)的基于Java的壓力測(cè)試工具。用于對(duì)軟件做壓力測(cè)試,它最初被設(shè)計(jì)用于Web應(yīng)用測(cè)試,但后來(lái)擴(kuò)展到其他測(cè)試領(lǐng)域。 它可以用于測(cè)試靜態(tài)和動(dòng)態(tài)資源,例如靜態(tài)文件、Java 小服務(wù)程序、CGI 腳本、Java 對(duì)象、數(shù)據(jù)庫(kù)、FTP 服務(wù)器, 等等。JMeter 可以用于對(duì)服務(wù)器、網(wǎng)絡(luò)或?qū)ο竽M巨大的負(fù)載,來(lái)自不同壓力類別下測(cè)試它們的強(qiáng)度和分析整體性能。另外,JMeter能夠?qū)?yīng)用程序做功能/回歸測(cè)試,通過(guò)創(chuàng)建帶有斷言的腳本來(lái)驗(yàn)證你的程序返回了你期望的結(jié)果。為了最大限度的靈活性,JMeter允許使用正則表達(dá)式創(chuàng)建斷言。
2.知識(shí)剖析
1、線程組:代表一定數(shù)量的并發(fā)用戶,它可以用來(lái)模擬并發(fā)用戶發(fā)送請(qǐng)求。實(shí)際的請(qǐng)求內(nèi)容在Sampler中定義,它被線程組包含??梢栽凇皽y(cè)試計(jì)劃->添加->線程組”來(lái)建立它,然后在線程組面板里有幾個(gè)輸入欄:線程數(shù)、Ramp-Up Period(in seconds)、循環(huán)次數(shù),其中Ramp-Up Period(in seconds)表示在這時(shí)間內(nèi)創(chuàng)建完所有的線程。如有8個(gè)線程,Ramp-Up = 200秒,那么線程的啟動(dòng)時(shí)間間隔為200/8=25秒,這樣的好處是:一開(kāi)始不會(huì)對(duì)服務(wù)器有太大的負(fù)載。線程組是為模擬并發(fā)負(fù)載而設(shè)計(jì)。
2、取樣器(Sampler):模擬各種請(qǐng)求。所有實(shí)際的測(cè)試任務(wù)都由取樣器承擔(dān),存在很多種請(qǐng)求。如:HTTP 、ftp請(qǐng)求等等。
3、監(jiān)聽(tīng)器:負(fù)責(zé)收集測(cè)試結(jié)果,同時(shí)也被告知了結(jié)果顯示的方式。功能是對(duì)取樣器的請(qǐng)求結(jié)果顯示、統(tǒng)計(jì)一些數(shù)據(jù)(吞吐量、KB/S……)等。
4、斷言:用于來(lái)判斷請(qǐng)求響應(yīng)的結(jié)果是否如用戶所期望,是否正確。它可以用來(lái)隔離問(wèn)題域,即在確保功能正確的前提下執(zhí)行壓力測(cè)試。這個(gè)限制對(duì)于有效的測(cè)試是非常有用的。
5、定時(shí)器:負(fù)責(zé)定義請(qǐng)求(線程)之間的延遲間隔,模擬對(duì)服務(wù)器的連續(xù)請(qǐng)求。
6、邏輯控制器:允許自定義JMeter發(fā)送請(qǐng)求的行為邏輯,它與Sampler結(jié)合使用可以模擬復(fù)雜的請(qǐng)求序列。
7、配置元件維護(hù)Sampler需要的配置信息,并根據(jù)實(shí)際的需要會(huì)修改請(qǐng)求的內(nèi)容。
8、前置處理器和后置處理器負(fù)責(zé)在生成請(qǐng)求之前和之后完成工作。前置處理器常常用來(lái)修改請(qǐng)求的設(shè)置,后置處理器則常常用來(lái)處理響應(yīng)的數(shù)據(jù)。
聚合報(bào)告:
Label :各個(gè)模擬測(cè)試的名稱
#Samples :各個(gè)測(cè)試的樣本總數(shù)
Average :每個(gè)請(qǐng)求的平均響應(yīng)時(shí)間
Median :中值,即50%請(qǐng)求的平均響應(yīng)時(shí)間
90%Line :90%請(qǐng)求的響應(yīng)時(shí)間
Min :最小響應(yīng)時(shí)間 ,Max :最大的響應(yīng)時(shí)間
Error% :錯(cuò)誤響應(yīng)的概率。即無(wú)法響應(yīng)的概率。
ThroughPut :吞吐量 -- 默認(rèn)情況下表示每秒完成的請(qǐng)求數(shù)(Request per Second)。
KB/Sec :每秒從服務(wù)器端接收到的數(shù)據(jù)量。

新建線程組---HTTP? Get請(qǐng)求

填上相應(yīng)的參數(shù),執(zhí)行,監(jiān)聽(tīng)的察看結(jié)果樹

Delete請(qǐng)求把請(qǐng)求方法換下,就不貼圖了。
二)用jemeter?? Post請(qǐng)求

HTTP信息頭管理器(設(shè)置請(qǐng)求數(shù)據(jù)的格式)

因?yàn)槲业膒ost請(qǐng)求是經(jīng)過(guò)攔截的,所以需要登錄訪問(wèn),下圖中的域填I(lǐng)P。

結(jié)果:

Put請(qǐng)求類似,就不貼圖了。
3.常見(jiàn)問(wèn)題
1. JMeter的工作原理是什么?
向服務(wù)器提交請(qǐng)求;從服務(wù)器取回請(qǐng)求返回的結(jié)果。
2.?JMeter的作用?
JMeter可以用于測(cè)試靜態(tài)或者動(dòng)態(tài)資源的性能(文件、Servlets、Perl腳本、java對(duì)象、數(shù)據(jù)庫(kù)和查詢、ftp服務(wù)器或者其他的資源)。JMeter用于模擬在服務(wù)器、網(wǎng)絡(luò)或者其他對(duì)象上附加高負(fù)載以測(cè)試他們提供服務(wù)的受壓能力,或者分析他們提供的服務(wù)在不同負(fù)載條件下的總性能情況。你可以用JMeter提供的圖形化界面分析性能指標(biāo)或者在高負(fù)載情況下測(cè)試服務(wù)器/腳本/對(duì)象的行為。
3. 怎樣能看到j(luò)meter提供的腳本范例?
在\JMeter\jakarta-jmeter-2.0.3\xdocs\demos目錄下。
4. 怎樣設(shè)置并發(fā)用戶數(shù)?
選中可視化界面中左邊樹的TestPlan節(jié)點(diǎn),單擊右鍵,選擇Add-> Thread Group,其中Number of Threads參數(shù)用來(lái)設(shè)置發(fā)送請(qǐng)求的用戶數(shù)目。
5.?JMeter的運(yùn)行指示?
Jmeter在運(yùn)行時(shí),右上角有個(gè)單選框大小的小框框,運(yùn)行是該框框?yàn)榫G色,運(yùn)行完畢后,該框框?yàn)榘咨?/p>
6. User Parameters的作用是什么?
提高腳本可用性
7. 在result里會(huì)出現(xiàn)彩色字體的http response code,說(shuō)明什么呢?
Http response code是http返回值,彩色字體較引人注目,可以使用戶迅速關(guān)注。象綠色的302就說(shuō)明在這一步驟中,返回值取自本機(jī)的catch,而不是server。
8. 怎樣計(jì)算Ramp-up period時(shí)間?
Ramp-up period是指每個(gè)請(qǐng)求發(fā)生的總時(shí)間間隔,單位是秒。如果Number of Threads設(shè)置為5,而Ramp-up period是10,那么每個(gè)請(qǐng)求之間的間隔就是10/5,也就是2秒。Ramp-up period設(shè)置為0,就是同時(shí)并發(fā)請(qǐng)求。
9. Get和Post的區(qū)別?
他們是http協(xié)議的2種不同實(shí)現(xiàn)方式。Get是指server從Request URL取得所需參數(shù)。從result中的request中可以看到,get可以看到參數(shù),但是post是主動(dòng)向server發(fā)送參數(shù),所以一般看不到這些參數(shù)的。
10. 哪些原因可能導(dǎo)致error的產(chǎn)生?
a. Http錯(cuò)誤,包括不響應(yīng),結(jié)果找不到,數(shù)據(jù)錯(cuò)誤等等;
b.?JMeter本身原因產(chǎn)生的錯(cuò)誤。
11. 為什么Aggregate Report結(jié)果中的Total值不是真正的總和?
JMeter給結(jié)果中total的定義是并不完全指總和,為了方便使用,它的值表現(xiàn)了所在列的代表值,比如min值,它的total就是所在列的最小值。下圖就是total在各列所表示的意思。
12.?JMeter的Thread Number是提供多個(gè)不同用戶并發(fā)的功能么?
不是,Thread Number僅僅是指并發(fā)數(shù),如果需要實(shí)現(xiàn)多個(gè)不同用戶并發(fā),我們應(yīng)該采用其它方法,比如通過(guò)在jmeter外建立csv文件的方法來(lái)實(shí)現(xiàn)。
13. 同時(shí)并發(fā)請(qǐng)求時(shí),若需要模擬不同的用戶同時(shí)向不同的server并發(fā)請(qǐng)求,怎樣實(shí)現(xiàn)呢?
方法很靈活,我們可以將不同的server在thread里面預(yù)先寫好?;蛘哳A(yù)先將固定的變量值寫入csv文件,這樣還可以方便修改。然后將文件添加到User Parameters。
14. User Parameter中的DUMMY是什么意思?
當(dāng)其具體內(nèi)容是${__CSVRead(${__property(user.dir)}${FILENAME},next())}時(shí)用來(lái)模擬讀文件的下一行。
15. 當(dāng)測(cè)試對(duì)象在多server間跳轉(zhuǎn)時(shí),應(yīng)該怎樣處理?
程序運(yùn)行時(shí),有些http和隱函數(shù)會(huì)攜帶另外的server IP,我們可以從他們的返回值中獲取。
16. 為何測(cè)試對(duì)象是http和https混雜出現(xiàn)?
Https是加密協(xié)議,為了安全,一般不推薦使用http,但是有些地方,使用https過(guò)于復(fù)雜或者較難實(shí)現(xiàn),會(huì)采用http協(xié)議。
17. Http和https的默認(rèn)端口是什么?
Apache server (Http)的默認(rèn)端口是80;
SSL (Https)的默認(rèn)端口是443。
18. 為何在run時(shí),有些頁(yè)面失敗,但是最后不影響結(jié)果?
原因較多,值得提及的一種是因?yàn)橹髁黜?yè)面與它不存在依賴關(guān)系,所以即使這樣的頁(yè)面出錯(cuò),也不會(huì)影響運(yùn)行得到正常結(jié)果,但是這樣會(huì)影響到測(cè)試的結(jié)果以及分析結(jié)果。
19. 為什么腳本剛開(kāi)始運(yùn)行就有錯(cuò)誤,其后來(lái)的腳本還可運(yùn)行?
在Thread Group中有相關(guān)設(shè)置,如果選擇了continue,即使前面的腳本出現(xiàn)錯(cuò)誤,整個(gè)thread仍會(huì)運(yùn)行直到結(jié)束。選擇Stop Thread會(huì)結(jié)束當(dāng)前thread;選擇Stop Test則會(huì)結(jié)束全部的thread。推薦選項(xiàng)是Stop Thread。
20. 在Regular expression_r Extractor會(huì)看到Template的值是$1$,這個(gè)值是什么意思呢?
$1$是指取第一個(gè)()里面的值。如果Regular expression_r的數(shù)值有多個(gè),用這種方法可以避免不必要的麻煩。
21. Regular expression_r中的(.*)是什么意思?
那是一個(gè)正則表達(dá)式(regular expression_r)?!?’等同于sql語(yǔ)言中的’?’,表示可有可無(wú)。’*’表示0個(gè)或多個(gè)?!?)’表示需要取值。(.*)表達(dá)任意長(zhǎng)度的字符串。
22. 在讀取Regular expression_r時(shí)要注意什么?
一定要保證所取數(shù)值的絕對(duì)唯一性。
23. 怎樣才能判斷什么樣的情況需要添加Regular expression_r Extractor?
檢查Http Request中的Send Parameters,如果有某個(gè)參數(shù)是其前一個(gè)page中所沒(méi)有給出的,就要到原文件中查找,并添加Regular expression_r Extractor到其前一page的http request中。
24. 在自動(dòng)獲取的腳本中有時(shí)會(huì)出現(xiàn)空的http request,是什么意思呢?
是因?yàn)樵讷@取腳本時(shí)有些錯(cuò)誤,是腳本工具原因。在run時(shí)這種錯(cuò)誤不參與運(yùn)行的。
25. 在運(yùn)行結(jié)果中為何有rate為N/A的情況出現(xiàn)?
可能因?yàn)镴Meter自身問(wèn)題造成,再次運(yùn)行可以得到正確結(jié)果。
26. 常用http錯(cuò)誤代碼有哪些?
400無(wú)法解析此請(qǐng)求。
403禁止訪問(wèn):訪問(wèn)被拒絕。
404找不到文件或目錄。
405用于訪問(wèn)該頁(yè)的HTTP動(dòng)作未被許可。
410文件已刪除。
500服務(wù)器內(nèi)部錯(cuò)誤。
501標(biāo)題值指定的配置沒(méi)有執(zhí)行。
502 Web服務(wù)器作為網(wǎng)關(guān)或代理服務(wù)器時(shí)收到無(wú)效的響應(yīng)。
27. Http request中的Send Parameters是指什么?
是指code中寫定的值和自定義變量中得到的值,就是在運(yùn)行頁(yè)面時(shí)需要的參數(shù)。
28. Parameters在頁(yè)面中是不斷傳遞的么?
是的。參數(shù)再產(chǎn)生后會(huì)在頁(yè)面中一直傳遞到所需頁(yè)面。所以我們可以在動(dòng)態(tài)參數(shù)產(chǎn)生時(shí)捕獲它,也可以在所需頁(yè)面的上一頁(yè)面捕獲。(但是這樣可能有錯(cuò)誤,最好在產(chǎn)生頁(yè)面獲取)
29. 在使用JMeter測(cè)試時(shí),是完全模擬用戶操作么?造成的結(jié)果也和用戶操作完全相同么?
是的。JMeter完全模擬用戶操作,所以操作記錄會(huì)全部寫入DB.在運(yùn)行失敗時(shí),可能會(huì)產(chǎn)生錯(cuò)誤數(shù)據(jù),這就取決于腳本檢查是否嚴(yán)謹(jǐn),否則錯(cuò)誤數(shù)據(jù)也會(huì)進(jìn)入DB,給程序運(yùn)行帶來(lái)很多麻煩。
4.擴(kuò)展思考
產(chǎn)生壓力之后,通常我們可以拿到TPS、響應(yīng)時(shí)延等性能數(shù)據(jù),那么如何定位性能問(wèn)題呢?TPS、響應(yīng)時(shí)延只能告訴你服務(wù)器是否存在問(wèn)題,但不能幫助你定位問(wèn)題。這些表面背后是整個(gè)后臺(tái)處理邏輯綜合作用的結(jié)果,這時(shí)候可以先關(guān)注系統(tǒng)的CPU、內(nèi)存、IO、網(wǎng)絡(luò),對(duì)比在tps、時(shí)延達(dá)到瓶頸時(shí)這些系統(tǒng)數(shù)據(jù)的情況,確定性能問(wèn)題是系統(tǒng)哪一部分造成的,然后再回到代碼的邏輯中逐個(gè)優(yōu)化這些點(diǎn)。
----------------------------------------------------------------------------------------------------------------------------------------------
技能樹.IT修真院
“我們相信人人都可以成為一個(gè)工程師,現(xiàn)在開(kāi)始,找個(gè)師兄,帶你入門,掌控自己學(xué)習(xí)的節(jié)奏,學(xué)習(xí)的路上不再迷?!薄?/p>
這里是技能樹.IT修真院,成千上萬(wàn)的師兄在這里找到了自己的學(xué)習(xí)路線,學(xué)習(xí)透明化,成長(zhǎng)可見(jiàn)化,師兄1對(duì)1免費(fèi)指導(dǎo)??靵?lái)與我一起學(xué)習(xí)吧~
我的邀請(qǐng)碼:10178606,或者你可以直接點(diǎn)擊此鏈接:jnshu.com/login/1/10178606