一. 性能測試
1. 性能測試是什么
1) 廣義定義
基于協(xié)議模擬用戶發(fā)出請求,對服務(wù)器形成一定負(fù)載系忙,來測試服務(wù)器的性能指標(biāo)是否滿足要求性能指標(biāo)關(guān)注點:時間性能、空間性能性能測試與頁面無關(guān)
2) 狹義定義
指通過自動化的測試工具模擬多種正常、峰值以及異常負(fù)載條件來對系統(tǒng)的各項性能指標(biāo)進(jìn)行測試注整。
2. 性能測試工具
2) Jmeter的作用
1.接口測試 面試說postman萍桌,因為方便好用宵溅。
2.性能測試 jmeter,也可以用postman(runner)上炎,但是沒有性能指標(biāo)
3.數(shù)據(jù)庫測試
二. 安裝JAVA環(huán)境
1.安裝JDK恃逻,配置環(huán)境變量
2.將下載Jmeter文件解壓,打開/bin/jmeter.bat
3.Jmeter的目錄結(jié)構(gòu)
/bin 目錄常用文件介紹:
examples:目錄下包含Jmeter使用實例ApacheJMeter.jar:JMeter源碼包
jmeter.bat:windows下啟動文件
meter.sh:Linux下啟動文件
jmeter.log:Jmeter運行日志文件
jmeter.properties:Jmeter配置文件
jmeter-server.bat:windows下啟動負(fù)載生成器服務(wù)文件jmeter-server:Linux下啟動負(fù)載生成器文件
/docs目錄——Jmeter幫助文檔
/extras目錄——提供了對Ant的支持文件藕施,可也用于持續(xù)集成
/lib目錄——存放Jmeter依賴的jar包寇损,同時安裝插件也放于此目錄
/licenses目錄——軟件許可文件,不用管
/printable_docs目錄——Jmeter用戶手冊
三. 使用Jmeter測試快速入門
1. 線程組是什么
進(jìn)程: 一個正在執(zhí)行的程序?qū)?yīng)一個進(jìn)程
線程: 一個進(jìn)程有多個執(zhí)行線程
線程組:? 按照線程性質(zhì)對線程分組裳食。查看任務(wù)管理器(愛奇藝有多個)
三者關(guān)系: 一個進(jìn)程有多個線程組矛市,一個線程組有多個線程
測試計劃—線程組—線程組屬性中的線程數(shù)
并發(fā)執(zhí)行:多個線程同時執(zhí)行,特點:執(zhí)行結(jié)束的順序與開始的順序不一致
順序執(zhí)行:按照線程的啟動順序挨個執(zhí)行
默認(rèn)情況下诲祸,線程組中的線程是并發(fā)執(zhí)行
每一個線程都要執(zhí)行組內(nèi)的http請求
設(shè)置線程組順序執(zhí)行:勾選測試計劃中的(獨立運行每個線程組)
線程組用來模擬用戶的并發(fā)訪問
1. 創(chuàng)建線程組
2. 線程組主要包含三個參數(shù):
線程數(shù)浊吏、準(zhǔn)備時長(Ramp-Up Period(in seconds))、循環(huán)次數(shù)救氯。
3. 線程數(shù):
虛擬用戶數(shù)找田。一個虛擬用戶占用一個線程。設(shè)置多少虛擬用戶數(shù)在這里也就是設(shè)置多少個線程數(shù)着憨。
4. 準(zhǔn)備時長(秒):
設(shè)置的虛擬用戶數(shù)需要多長時間全部啟動墩衙。如果線程數(shù)為20 ,準(zhǔn)備時長為10 ,那么需要10秒鐘啟動20個線程漆改。也就是每秒鐘啟動2個線程心铃。
5. 循環(huán)次數(shù):
每個線程發(fā)送請求的次數(shù)。如果線程數(shù)為20 籽懦,循環(huán)次數(shù)為100 于个,那么每個線程發(fā)送100次請求∧核常總請求數(shù)為20*100=2000 厅篓。如果勾選了“永遠(yuǎn)”,那么所有線程會一直發(fā)送請求捶码,一直到選擇停止運行腳本羽氮。
.6. 調(diào)度器
設(shè)置線程組啟動的開始時間和結(jié)束時間(配置調(diào)度器時,需要勾選循環(huán)次數(shù)為永遠(yuǎn))
7. 持續(xù)時間(秒)
測試持續(xù)時間惫恼,會覆蓋結(jié)束時間
8. 啟動延遲(秒)
測試延遲啟動時間档押,會覆蓋啟動時間
9. 啟動時間
測試啟動時間,啟動延遲會覆蓋它祈纯。當(dāng)啟動時間已過令宿,手動只需測試時當(dāng)前時間也會覆蓋它。
10. 結(jié)束時間
測試結(jié)束時間腕窥,持續(xù)時間會覆蓋它粒没。
2. 創(chuàng)建http請求
3. 指定請求域名,請求路徑
一個HTTP請求有著許多的配置參數(shù)簇爆,下面將詳細(xì)介紹:
名稱:本屬性用于標(biāo)識一個取樣器癞松,建議使用一個有意義的名稱。
注釋:對于測試沒有任何作用入蛆,僅用戶記錄用戶可讀的注釋信息响蓉。
服務(wù)器名稱或IP :HTTP請求發(fā)送的目標(biāo)服務(wù)器名稱或IP地址。
端口號:目標(biāo)服務(wù)器的端口號哨毁。
方法:發(fā)送HTTP請求的方法枫甲,可用方法包括GET、POST挑庶、HEAD言秸、PUT、OPTIONS迎捺、TRACE举畸、DELETE等。
Content encoding :內(nèi)容的編碼方式凳枝,默認(rèn)值為iso8859
路徑:目標(biāo)URL路徑(不包括服務(wù)器地址和端口)
點擊run測試抄沮,很麻煩跋核,我們使用postman測試更簡單,使用postman操作叛买。
可以使用剛才的接口文檔中的砂代,聚合接口中演示一個。
4. 設(shè)置對應(yīng)的查看內(nèi)容
注意:如果監(jiān)聽器中有jp@gc開頭的率挣,都是第三方插件
5. 查看表格信息
Sample:每個請求的序號
Start Time:每個請求開始時間
Thread Name:每個線程的名稱
Label:Http請求名稱
Sample Time:每個請求所花時間刻伊,單位毫秒
Status:請求狀態(tài),如果為勾則表示成功椒功,如果為叉表示失敗捶箱。
Bytes:請求的字節(jié)數(shù)
樣本數(shù)目:也就是上面所說的請求個數(shù),成功的情況下等于你設(shè)定的并發(fā)數(shù)目乘以循環(huán)次數(shù)
平均:每個線程請求的平均時間
最新樣本:表示服務(wù)器響應(yīng)最后一個請求的時間
偏離:服務(wù)器響應(yīng)時間變化动漾、離散程度測量值的大小丁屎,或者,換句話說旱眯,就是數(shù)據(jù)的分布晨川。
6. 查看結(jié)果樹
請求的數(shù)據(jù)展示(請求頭信息,請求參數(shù),,)
響應(yīng)的數(shù)據(jù)展示(響應(yīng)碼删豺,響應(yīng)頭,,)
通過察看結(jié)果樹共虑,我們可以看到每個請求的結(jié)果,其中紅色的是出錯的請求呀页,綠色的為通過看蚜。
Thread Name:線程組名稱
Sample Start:啟動開始時間
Load time:加載時長
Latency:等待時長
Sizeinbytes:發(fā)送的數(shù)據(jù)總大小
Headers sizeinbytes:發(fā)送數(shù)據(jù)的其余部分大小
Sample Count:發(fā)送統(tǒng)計
Error Count:交互錯誤統(tǒng)計
Response code:返回碼
Response message:返回信息
Response headers:返回的頭部信息
7. 聚合報告參數(shù)說明
lable:對應(yīng)每一個http請求,顯示的是http請求的Name赔桌,如百度http請求name為baidu
#Samples:表示這一次的測試中一共發(fā)出了多少請求,如上圖所示渴逻,sougou和baidu的http請求每個都發(fā)出30個請求
Average:平均響應(yīng)時間疾党,指的是所有的請求的平均響應(yīng)時間,如上圖的30個請求的總的響應(yīng)時間除以30得出的平均響應(yīng)時間惨奕,默認(rèn)的情況下是單個請求的平均響應(yīng)時間雪位,但當(dāng)使用了“事務(wù)控制器”時,則以事物為單位顯示平均響應(yīng)時間
Median:中位數(shù)梨撞,也就是50%用戶的響應(yīng)時間
90%Line:90%用戶的響應(yīng)時間
Min:最小響應(yīng)時間
Max:最大的響應(yīng)時間
Error%:本次測試中出現(xiàn)錯誤的請求的數(shù)量/請求的總數(shù)雹洗,如上圖所示,本次的測試中卧波,sougou的http請求66.6%的請求出錯时肿,而baidu的請求則沒有出錯的請求
Throughput:吞吐量,默認(rèn)情況下表示每秒完成的請求數(shù)港粱,如上圖所示螃成,每秒完成的請求數(shù)分別為6.6個每秒旦签,6.2個每秒
Recived KB/Sec:每秒從服務(wù)器端接收到的數(shù)據(jù)量,以kb為計算的單位
掌握:平均時間寸宏、錯誤率宁炫、吞吐量。
8. 圖形結(jié)果
樣本數(shù)目:總共發(fā)送到服務(wù)器的請求數(shù)氮凝。
最新樣本:代表時間的數(shù)字羔巢,是服務(wù)器響應(yīng)最后一個請求的時間。
吞吐量:服務(wù)器每分鐘處理的請求數(shù)罩阵。
平均值:總運行時間除以發(fā)送到服務(wù)器的請求數(shù)竿秆。
中間值:有一半的服務(wù)器響應(yīng)時間低于該值而另一半高于該值。
偏離:表示服務(wù)器響應(yīng)時間變化永脓、離散程度測量值的大小袍辞。
四. Jmeter主要組件介紹
1.測試計劃:使用 JMeter 進(jìn)行測試的起點,它是其它 JMeter 測試元件的容器常摧。
2.線程組:代表一定數(shù)量的并發(fā)用戶搅吁,它可以用來模擬并發(fā)用戶發(fā)送請求。實際的請求內(nèi)容在Sampler中定義落午,它被線程組包含谎懦。可以在“測試計劃->添加->線程組”來建立它溃斋,然后在線程組面板里有幾個輸入欄:線程數(shù)界拦、Ramp-Up Period(in seconds)、循環(huán)次數(shù)梗劫,其中Ramp-Up Period(in seconds)表示在這時間內(nèi)創(chuàng)建完所有的線程享甸。如有8個線程,Ramp-Up = 200秒梳侨,那么線程的啟動時間間隔為200/8=25秒蛉威,這樣的好處是:一開始不會對服務(wù)器有太大的負(fù)載。線程組是為模擬并發(fā)負(fù)載而設(shè)計走哺。
3.取樣器(Sampler):模擬各種請求蚯嫌。所有實際的測試任務(wù)都由取樣器承擔(dān),存在很多種請求丙躏。如:HTTP 择示、ftp請求等等。
4.監(jiān)聽器:負(fù)責(zé)收集測試結(jié)果晒旅,同時也被告知了結(jié)果顯示的方式栅盲。功能是對取樣器的請求結(jié)果顯示、統(tǒng)計一些數(shù)據(jù)(吞吐量敢朱、KB/S……)等剪菱。
5.斷言:用于來判斷請求響應(yīng)的結(jié)果是否如用戶所期望摩瞎,是否正確。它可以用來隔離問題域孝常,即在確保功能正確的前提下執(zhí)行壓力測試旗们。這個限制對于有效的測試是非常有用的。
6.邏輯控制器:允許自定義JMeter發(fā)送請求的行為邏輯构灸,它與Sampler結(jié)合使用可以模擬復(fù)雜的請求序列上渴。
7.定時器:負(fù)責(zé)定義請求(線程)之間的延遲間隔,模擬對服務(wù)器的連續(xù)請求喜颁。
8.配置元件維護(hù)Sampler需要的配置信息稠氮,并根據(jù)實際的需要會修改請求的內(nèi)容。
9.前置處理器和后置處理器負(fù)責(zé)在生成請求之前和之后完成工作半开。前置處理器常常用來修改請求的設(shè)置隔披,后置處理器則常常用來處理響應(yīng)的數(shù)據(jù)。
1. 測試計劃
1.測試計劃就是一個完整的場景
2.“獨立運行每個線程組” :勾選以后所有的線程組都是順序執(zhí)行的了寂拆。一般不勾選奢米,讓所有 的線程組并發(fā)啟動。
3.“函數(shù)測試模式” :勾選后會有詳細(xì)的請求記錄纠永,消耗資源鬓长,影響客戶端性能。一般不勾選尝江。
4.用戶定義的變量:全局變量涉波,測試計劃上可以添加用戶定義的變量。一般添加一些系統(tǒng)常用的配置炭序。如果測試過程中想切換環(huán)境啤覆,切換配置,一般不建議在測試計劃上添加變量
2. 線程組
(1)thread group(線程組)
這個就是我們通常添加運行的線程惭聂。通俗的講一個線程組城侧,可以看做一個虛擬用戶組,線程組中的每個線程都可以理解為一個虛擬用戶彼妻。
(2)setup thread group
一種特殊類型的ThreadGroup的,可用于執(zhí)行預(yù)測試操作豆茫。這些線程的行為完全像一個正常的線程組元件侨歉。不同的是,這些類型的線程執(zhí)行測試前進(jìn)行定期線程組的執(zhí)行揩魂;類似LoadRunner的init幽邓,測試開始時進(jìn)行初始化的工作。
(3)teardown thread group
一種特殊類型的ThreadGroup的火脉,可用于執(zhí)行測試后動作牵舵。這些線程的行為完全像一個正常的線程組元件柒啤。不同的是,這些類型的線程執(zhí)行測試結(jié)束后執(zhí)行定期的線程組畸颅;類似LoadRunnner的end担巩,測試結(jié)束時進(jìn)行回收工作。
3. 取樣器(Http請求)
關(guān)于http請求的的屬性參數(shù)說明:
1)名稱:用于標(biāo)識一個sample没炒。建議使用一個有意義的名稱
2)注釋:對于測試沒任何影響涛癌,僅用來記錄用戶可讀的注釋信息
3)服務(wù)器名稱或IP:http請求發(fā)送的目標(biāo)服務(wù)器名稱或者IP地址,比如http://www.baidu.com
4)端口號:目標(biāo)服務(wù)器的端口號送火,默認(rèn)值為80拳话,可不填5)協(xié)議:向目標(biāo)服務(wù)器發(fā)送http請求時的協(xié)議,http/https种吸,大小寫不敏感弃衍,默認(rèn)http
6)方法:發(fā)送http請求的方法(鏈接:http://www.cnblogs.com/imyalost/p/5630940.html)
7)Contentencoding:內(nèi)容的編碼方式(Content-Type=application/json;charset=utf-8)
8)路徑:目標(biāo)的URL路徑(不包括服務(wù)器地址和端口)9)自動重定向:如果選中該項,發(fā)出的http請求得到響應(yīng)是301/302坚俗,jmeter會重定向到新的界面
10)Usekeep Alive:jmeter 和目標(biāo)服務(wù)器之間使用 Keep-Alive方式進(jìn)行HTTP通信(默認(rèn)選中)
11)Usemultipart/from-dataforHTTPPOST :當(dāng)發(fā)送HTTPPOST 請求時镜盯,使用
12)Parameters、BodyData以及FilesUpload的區(qū)別:1.parameter是指函數(shù)定義中參數(shù)坦冠,而argument指的是函數(shù)調(diào)用時的實際參數(shù)
2.簡略描述為:parameter=形參(formal parameter)形耗, argument=實參(actual parameter)
3.在不很嚴(yán)格的情況下,現(xiàn)在二者可以混用辙浑,一般用argument激涤,而parameter則比較少用Whiledefining method,variables passedinthe method are called parameters.當(dāng)定義方法時,傳遞到方法中的變量稱為參數(shù).Whileusingthose methods,values passed to those variables are called arguments.當(dāng)調(diào)用方法時判呕,傳給變量的值稱為引數(shù).(有時argument被翻譯為“引數(shù)“)
4倦踢、BodyData指的是實體數(shù)據(jù),就是請求報文里面主體實體的內(nèi)容侠草,一般我們向服務(wù)器發(fā)送請求辱挥,攜帶的實體主體參數(shù),可以寫入這里
5边涕、FilesUpload指的是:從HTML文件獲取所有有內(nèi)含的資源:被選中時晤碘,發(fā)出HTTP請求并獲得響應(yīng)的HTML文件內(nèi)容后還對該HTML? 進(jìn)行Parse 并獲取HTML中包含的所有資源(圖片、flash等):(默認(rèn)不選中)? 如果用戶只希望獲取特定資源功蜓,可以在下方的EmbeddedURLsmust match 文本框中填入需要下載的特定資源表達(dá)式园爷,只有能匹配指定正則表達(dá)式的URL指向資源會被下載
4. 監(jiān)聽器
監(jiān)聽器(Listener)負(fù)責(zé)收集測試結(jié)果,同時也被告知了結(jié)果顯示的方式。我們常用的包括:聚合報告、查看結(jié)果樹盖淡、用表格查看結(jié)果,都支持將結(jié)果數(shù)據(jù)寫入文件扰楼。其他的添加上去看看就行呀癣。聚合報告前面我們介紹過,后面是查看結(jié)果樹和用表格查看結(jié)果的截圖弦赖。
5. 循環(huán)控制器
6. 事務(wù)控制器
作用: 事務(wù)控制器會生產(chǎn)一個額外的采樣器项栏,用來統(tǒng)計該控制器子結(jié)點的所有時間。
在線程組下創(chuàng)建事務(wù)控制器
參數(shù):
· Generate parent sample:(選中這個參數(shù)結(jié)果展示如下圖紅框腾节,否則顯示為下圖藍(lán)框)
· Include duration of timer and pre-post processors in generated sample:選中這一項會統(tǒng)計定時器(timer)的時間忘嫉,否則只統(tǒng)計采樣器(sample)的時間
7. 斷言---檢查點
斷言(Assertions)可以用來判斷請求響應(yīng)的結(jié)果是否如用戶所期望的。它可以用來隔離問題域案腺,即在確保功能正確的前提下執(zhí)行壓力測試庆冕。這個限制對于有效的測試是非常有用的。
兩個重要斷言:響應(yīng)斷言和JSONAssertion
響應(yīng)斷言
JSON斷言
8. 前置處理器和后置處理器
前置處理器(Pre Processors)和后置處理器(Post Processors)負(fù)責(zé)在生成請求之前和之后完成工作劈榨。前置處理器常常用來修改請求的設(shè)置访递,后置處理器則常常用來處理響應(yīng)的數(shù)據(jù)。我們主要在動態(tài)關(guān)聯(lián)中用到后置處理器的正則表達(dá)式提取器同辣。
9. 定時器
定時器(Timer)負(fù)責(zé)定義請求之間的延遲間隔
五. Jmeter組件參數(shù)化
1. 參數(shù)化是什么
動態(tài)的獲取并設(shè)置數(shù)據(jù)
2. 為什么使用參數(shù)化
執(zhí)行批量操作拷姿,批量添加批量刪除,人工效率太低
運用程序代替人工獲取并設(shè)置數(shù)據(jù)旱函,安全高效
比如:對被測系統(tǒng)的用戶名和密碼進(jìn)行參數(shù)化响巢,來模擬多個用戶同時登錄系統(tǒng)
3. 參數(shù)化實現(xiàn)之用戶自定義變量
通過這個功能,能實現(xiàn)多接口共享數(shù)據(jù)棒妨,修改一條即可修改全部
Filename:所需數(shù)據(jù)文件的路徑踪古。如和腳本同一路徑,可直接填寫文件名
File encoding:編碼和文件保持一致即可券腔,默認(rèn)為ANSI伏穆。如有中文,建議為UTF-8
Variable Names:引用變量時的變量名纷纫,對應(yīng)數(shù)據(jù)文件中的每一列枕扫,以逗號分隔。如不填寫辱魁,文件的第一行數(shù)據(jù)將被讀取為變量名
Delimiter:在.txt烟瞧、.dat文件中,可以用逗號(,)或者Tab鍵(\t)來區(qū)分列與列
Allow quote data:選項選為“true”的時候?qū)θ亲址奶幚沓霈F(xiàn)亂碼
Recycle on EOF:到數(shù)據(jù)文件結(jié)尾時是否循環(huán)讀取染簇。設(shè)置為True時燕刻,線程數(shù)過多,數(shù)據(jù)文件讀取到最后一行時剖笙,會再次從第一行開始讀取。設(shè)置為False请唱,到達(dá)文件結(jié)尾時如繼續(xù)讀取弥咪,則值會默認(rèn)為过蹂,可通過設(shè)置jmeter屬性csvdataset.eofstring來改變該值。
Stop thread on EOF:Recycle on EOF設(shè)置為False聚至,Stop thread on EOF設(shè)置為True酷勺,則讀取數(shù)據(jù)文件最后一行后,停止測試扳躬,不管還有多少線程組未執(zhí)行脆诉。
Sharing mode:共享模式。默認(rèn)在所有線程組中使用贷币,可選擇每個線程組單獨打開
相同的部分使用用戶自定義變量
只需要修改一次接口
效果展示
4. 參數(shù)化實現(xiàn)之CSV Data Set Config
其他:
1.線程組線程數(shù)改為大于文件中數(shù)據(jù)的處理:
遇到結(jié)束符在循環(huán)
遇到結(jié)束符停止線程
2.如果數(shù)據(jù)來自數(shù)據(jù)庫
數(shù)據(jù)庫導(dǎo)出txt文件
5. 使用Jmeter函數(shù)助手(文件中不要出現(xiàn)中文)
六. Jmeter正則表達(dá)式提取
1. 使用正則提取
運用Jmeter正則提取器击胜,可以從請求的響應(yīng)結(jié)果中取到需要的內(nèi)容,從而實現(xiàn)關(guān)聯(lián)役纹。關(guān)聯(lián)是請求與請求之間存在數(shù)據(jù)依賴關(guān)系偶摔,需要從上一個請求獲取下一個請求需要回傳回去的數(shù)據(jù)
正則表達(dá)式(regular expression)描述了一種字符串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串促脉、將匹配的子串替換或者從某個串中取出符合某個條件的子串等辰斋。
字符描述
*匹配前面的子表達(dá)式零次或多次。例如瘸味,zo* 能匹配 "z" 以及 "zoo"宫仗。* 等價于{0,}。
+匹配前面的子表達(dá)式一次或多次旁仿。例如藕夫,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"丁逝。+ 等價于 {1,}汁胆。
?匹配前面的子表達(dá)式零次或一次。例如霜幼,"do(es)?" 可以匹配 "do" 嫩码、 "does" 中的 "does" 、 "doxy" 中的 "do" 罪既。? 等價于 {0,1}铸题。
( )標(biāo)記一個子表達(dá)式的開始和結(jié)束位置。子表達(dá)式可以獲取供以后使用琢感。
.匹配除換行符 \n 之外的任何單字符丢间。要匹配 . ,請使用 . 驹针。
構(gòu)造正則表達(dá)式的方法和創(chuàng)建數(shù)學(xué)表達(dá)式的方法一樣烘挫。也就是用多種元字符與運算符可以將小的表達(dá)式結(jié)合在一起來創(chuàng)建更大的表達(dá)式。正則表達(dá)式的組件可以是單個的字符、字符集合饮六、字符范圍其垄、字符間的選擇或者所有這些組件的任意組合。