大家好,我是IT修真院北京分院的學(xué)員,一枚正直善良的JAVA程序員。
今天給大家分享一下,如何用jmeter做壓力測試
1.背景介紹:
什么是壓力測試?
Nginx(engine x) 是一個(gè)高性能的HTTP和反向代理服務(wù)器。
什么是jmeter?
Apache JMeter是Apache組織開發(fā)的基于Java的壓力測試工具。用于對軟件做壓力測試,它最初被設(shè)計(jì)用于Web應(yīng)用測試,但后來擴(kuò)展到其他測試領(lǐng)域。 它可以用于測試靜態(tài)和動態(tài)資源,例如靜態(tài)文件、Java 小服務(wù)程序、CGI 腳本、Java 對象、數(shù)據(jù)庫、FTP 服務(wù)器, 等等。JMeter 可以用于對服務(wù)器、網(wǎng)絡(luò)或?qū)ο竽M巨大的負(fù)載,來自不同壓力類別下測試它們的強(qiáng)度和分析整體性能。另外,JMeter能夠?qū)?yīng)用程序做功能/回歸測試,通過創(chuàng)建帶有斷言的腳本來驗(yàn)證你的程序返回了你期望的結(jié)果。為了最大限度的靈活性,JMeter允許使用正則表達(dá)式創(chuàng)建斷言。
2知識剖析
1.評估系統(tǒng)的能力
2.識別體系中的弱點(diǎn)
3.系統(tǒng)調(diào)優(yōu)
4.驗(yàn)證穩(wěn)定性,可靠性
3.常見問題
如何對web項(xiàng)目進(jìn)行簡單的壓力測試
4.解決方案:
使用jmeter
1、線程組:代表一定數(shù)量的并發(fā)用戶,它可以用來模擬并發(fā)用戶發(fā)送請求。實(shí)際的請求內(nèi)容在Sampler中定義,它被線程組包含??梢栽凇皽y試計(jì)劃->添加->線程組”來建立它,然后在線程組面板里有幾個(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秒,那么線程的啟動時(shí)間間隔為200/8=25秒,這樣的好處是:一開始不會對服務(wù)器有太大的負(fù)載。線程組是為模擬并發(fā)負(fù)載而設(shè)計(jì)。
2、取樣器(Sampler):模擬各種請求。所有實(shí)際的測試任務(wù)都由取樣器承擔(dān),存在很多種請求。如:HTTP 、ftp請求等等。
3、監(jiān)聽器:負(fù)責(zé)收集測試結(jié)果,同時(shí)也被告知了結(jié)果顯示的方式。功能是對取樣器的請求結(jié)果顯示、統(tǒng)計(jì)一些數(shù)據(jù)(吞吐量、KB/S……)等。
4、斷言:用于來判斷請求響應(yīng)的結(jié)果是否如用戶所期望,是否正確。它可以用來隔離問題域,即在確保功能正確的前提下執(zhí)行壓力測試。這個(gè)限制對于有效的測試是非常有用的。
5、定時(shí)器:負(fù)責(zé)定義請求(線程)之間的延遲間隔,模擬對服務(wù)器的連續(xù)請求。
6、邏輯控制器:允許自定義JMeter發(fā)送請求的行為邏輯,它與Sampler結(jié)合使用可以模擬復(fù)雜的請求序列。
7、配置元件維護(hù)Sampler需要的配置信息,并根據(jù)實(shí)際的需要會修改請求的內(nèi)容。
8、前置處理器和后置處理器負(fù)責(zé)在生成請求之前和之后完成工作。前置處理器常常用來修改請求的設(shè)置,后置處理器則常常用來處理響應(yīng)的數(shù)據(jù)。
聚合報(bào)告參數(shù)詳解
Label:每個(gè) JMeter 的 element(例如 HTTP Request)都有一個(gè) Name 屬性,這里顯示的就是 Name 屬性的值
#Samples:表示你這次測試中一共發(fā)出了多少個(gè)請求,如果模擬10個(gè)用戶,每個(gè)用戶迭代10次,那么這里顯示100
Average:平均響應(yīng)時(shí)間——默認(rèn)情況下是單個(gè) Request 的平均響應(yīng)時(shí)間,當(dāng)使用了 Transaction Controller 時(shí),也可以以Transaction 為單位顯示平均響應(yīng)時(shí)間
Median:中位數(shù),也就是 50% 用戶的響應(yīng)時(shí)間
90% Line:90% 用戶的響應(yīng)時(shí)間
Note:關(guān)于 50% 和 90% 并發(fā)用戶數(shù)的含義
Min:最小響應(yīng)時(shí)間
Max:最大響應(yīng)時(shí)間
Error%:本次測試中出現(xiàn)錯(cuò)誤的請求的數(shù)量/請求的總數(shù)
Throughput:吞吐量——默認(rèn)情況下表示每秒完成的請求數(shù)(Request per Second),當(dāng)使用了 Transaction Controller 時(shí),也可以表示類似 LoadRunner 的 Transaction per Second 數(shù).
KB/Sec:每秒從服務(wù)器端接收到的數(shù)據(jù)量,相當(dāng)于LoadRunner中的Throughput/Sec
5.拓展思考
如何正確做web應(yīng)用的壓力測試
1) 首先說一下如何產(chǎn)生壓力,產(chǎn)生壓力的方法有很多,通??梢詫懩_本產(chǎn)生壓力機(jī)器人對服務(wù)器進(jìn)行發(fā)包和收包操作,也可以使用現(xiàn)有的工具(像jmeter、LoadRunner這些),所以說產(chǎn)生壓力其實(shí)并不難,難點(diǎn)在于產(chǎn)生的壓力是不是真實(shí)地反映了實(shí)際用戶的操作場景。舉個(gè)例子來說,對游戲來說單純的并發(fā)登陸場景在整個(gè)線上環(huán)境中的占比可能并不大(新開服等特殊情況除外),相反“登陸-開始戰(zhàn)斗-結(jié)束戰(zhàn)斗”、不同用戶執(zhí)行不同動作這種“混合模式”占了更大的比重。所以如何從實(shí)際環(huán)境中提煉出具體的場景比重,并且把這種比重轉(zhuǎn)化成實(shí)際壓力是一個(gè)重要的關(guān)注點(diǎn)。
(2) 產(chǎn)生壓力之后,通常我們可以拿到TPS、響應(yīng)時(shí)延等性能數(shù)據(jù),那么如何定位性能問題呢?TPS、響應(yīng)時(shí)延只能告訴你服務(wù)器是否存在問題,但不能幫助你定位問題。這些表面背后是整個(gè)后臺處理邏輯綜合作用的結(jié)果,這時(shí)候可以先關(guān)注系統(tǒng)的CPU、內(nèi)存、IO、網(wǎng)絡(luò),對比在tps、時(shí)延達(dá)到瓶頸時(shí)這些系統(tǒng)數(shù)據(jù)的情況,確定性能問題是系統(tǒng)哪一部分造成的,然后再回到代碼的邏輯中逐個(gè)優(yōu)化這些點(diǎn)。
(3) 當(dāng)服務(wù)器的整體性能就可以相對穩(wěn)定下來,這時(shí)候就需要對自己服務(wù)器的承載能力有一個(gè)預(yù)估,通過產(chǎn)生真實(shí)壓力、對比系統(tǒng)數(shù)據(jù),大致可以對單套系統(tǒng)的處理能力有個(gè)真實(shí)的評價(jià),然后結(jié)合業(yè)務(wù)規(guī)模配置服務(wù)器數(shù)量。可以看下騰訊wetest的這個(gè)壓測工具h(yuǎn)ttp://wetest.qq.com/gaps/
6.參考文獻(xiàn)
7.更多討論
一.為什么jmeter里的報(bào)告要叫聚合報(bào)告?
普通報(bào)告是每一個(gè)請求的記錄都寫出來? 聚合的就是算出平均值寫出來
二.TPS怎么測?
用一個(gè)插件測tps? http://blog.csdn.net/defonds/article/details/54576604
三.JMeter的線程發(fā)送HTTP請求時(shí),是連續(xù)不斷的發(fā)送請求,還是等上一個(gè)請求得到響應(yīng)之后,再發(fā)下一個(gè)請求?
是一個(gè)一個(gè)開始測的。
四.不同的線程數(shù)下,接口的反應(yīng)時(shí)間不同,如何選擇合適的線程數(shù)?
響應(yīng)時(shí)間在200MS之內(nèi)的時(shí)候90%Line的TPS是多少。這是系統(tǒng)支持并發(fā)數(shù)的含義。
五.QPS和TPS的區(qū)別?
TPS 即服務(wù)器每秒處理的事務(wù)數(shù).
QPS是每秒查詢率。
六.線程有上限嗎,有的話是多少,線程上限有什么決定?
看自己本地機(jī)器的性能。
七.壓力測試在整個(gè)開發(fā)的哪些過程進(jìn)行?
在demo之前。
八。發(fā)布線上要達(dá)到一個(gè)怎樣的標(biāo)準(zhǔn)?
不能出問題,響應(yīng)時(shí)間在200ms以內(nèi)
感謝大家觀看!
今天的分享就到這里啦,歡迎大家點(diǎn)贊、轉(zhuǎn)發(fā)、留言、拍磚~