一.性能測(cè)試? ?
? ? 1.性能測(cè)試是什么
? ??????基于協(xié)議模擬用戶(hù)發(fā)出請(qǐng)求,對(duì)服務(wù)器形成一定負(fù)載,來(lái)測(cè)試服務(wù)器的性能指標(biāo)是否滿足要求性能指標(biāo)關(guān)注點(diǎn):時(shí)間性能、空間性能性能測(cè)試與頁(yè)面無(wú)關(guān)
? ? 2.jmeter的作用
????? ??接口測(cè)試 面試說(shuō)postman,因?yàn)榉奖愫糜谩?/p>
????????性能測(cè)試 jmeter,也可以用postman(runner),但是沒(méi)有性能指標(biāo)
????????數(shù)據(jù)庫(kù)測(cè)試
????3.jemter的目錄結(jié)構(gòu)
? ? ? ? examples:目錄下包含jmeter使用實(shí)例
? ??????ApacheJMeter.jar:JMeter源碼包
????????jmeter.bat:windows下啟動(dòng)文件
????????jmeter.sh:Linux下啟動(dòng)文件
????????jmeter.log:Jmeter運(yùn)行日志文件
????????jmeter.properties:Jmeter配置文件
????????jmeter-server.bat:windows下啟動(dòng)負(fù)載生成器服務(wù)文件
????????jmeter-server:Linux下啟動(dòng)負(fù)載生成器文件
????????/docs目錄——Jmeter幫助文檔
????????/extras目錄——提供了對(duì)Ant的支持文件,可也用于持續(xù)集成
????????/lib目錄——存放Jmeter依賴(lài)的jar包,同時(shí)安裝插件也放于此目錄/licenses目錄——軟件許可文件
????????/printable_docs目錄——Jmeter用戶(hù)手冊(cè)
三.使用jmeter測(cè)試快速入門(mén)
????進(jìn)程: 一個(gè)正在執(zhí)行的程序?qū)?yīng)一個(gè)進(jìn)程線程: 一個(gè)進(jìn)程有多個(gè)執(zhí)行線程線程組: 按照線程性質(zhì)對(duì)線程分組。查看任務(wù)管理器(愛(ài)奇藝有多個(gè))三者關(guān)系: 一個(gè)進(jìn)程有多個(gè)線程組,一個(gè)線程組有多個(gè)線程
????測(cè)試計(jì)劃—線程組—線程組屬性中的線程數(shù)
????并發(fā)執(zhí)行:多個(gè)線程同時(shí)執(zhí)行,特點(diǎn):執(zhí)行結(jié)束的順序與開(kāi)始的順序不一致
????順序執(zhí)行:按照線程的啟動(dòng)順序挨個(gè)執(zhí)行
????默認(rèn)情況下,線程組中的線程是并發(fā)執(zhí)行
????每一個(gè)線程都要執(zhí)行組內(nèi)的http請(qǐng)求
????設(shè)置線程組順序執(zhí)行:勾選測(cè)試計(jì)劃中的(獨(dú)立運(yùn)行每個(gè)線程組)
????線程組用來(lái)模擬用戶(hù)的并發(fā)訪問(wèn)
3.1.2. 線程組主要包含三個(gè)參數(shù):
線程數(shù)、準(zhǔn)備時(shí)長(zhǎng)(Ramp-Up Period(in seconds))、循環(huán)次數(shù)。
3.1.3.? 線程數(shù):
虛擬用戶(hù)數(shù)。一個(gè)虛擬用戶(hù)占用一個(gè)線程。設(shè)置多少虛擬用戶(hù)數(shù)在這里也就是設(shè)置多少個(gè)線程數(shù)。
3.1.4.? 準(zhǔn)備時(shí)長(zhǎng)(秒):
設(shè)置的虛擬用戶(hù)數(shù)需要多長(zhǎng)時(shí)間全部啟動(dòng)。如果線程數(shù)為20 ,準(zhǔn)備時(shí)長(zhǎng)為10 ,那么需要10秒鐘啟動(dòng)20個(gè)線程。也就是每秒鐘啟動(dòng)2個(gè)線程。
3.1.5. 循環(huán)次數(shù):
每個(gè)線程發(fā)送請(qǐng)求的次數(shù)。如果線程數(shù)為20 ,循環(huán)次數(shù)為100 ,那么每個(gè)線程發(fā)送100次請(qǐng)求??傉?qǐng)求數(shù)為20*100=2000 。如果勾選了“永遠(yuǎn)”,那么所有線程會(huì)一直發(fā)送請(qǐng)求,一直到選擇停止運(yùn)行腳本。
3.1.6. 調(diào)度器
設(shè)置線程組啟動(dòng)的開(kāi)始時(shí)間和結(jié)束時(shí)間(配置調(diào)度器時(shí),需要勾選循環(huán)次數(shù)為永遠(yuǎn))
3.1.7. 持續(xù)時(shí)間(秒)
測(cè)試持續(xù)時(shí)間,會(huì)覆蓋結(jié)束時(shí)間
3.1.8. 啟動(dòng)延遲(秒)
測(cè)試延遲啟動(dòng)時(shí)間,會(huì)覆蓋啟動(dòng)時(shí)間
3.1.9. 啟動(dòng)時(shí)間
測(cè)試啟動(dòng)時(shí)間,啟動(dòng)延遲會(huì)覆蓋它。當(dāng)啟動(dòng)時(shí)間已過(guò),手動(dòng)只需測(cè)試時(shí)當(dāng)前時(shí)間也會(huì)覆蓋它。
3.1.10.? 結(jié)束時(shí)間
測(cè)試結(jié)束時(shí)間,持續(xù)時(shí)間會(huì)覆蓋它。
3.5. 查看表格信息
? ??Sample:每個(gè)請(qǐng)求的序號(hào)
Start Time:每個(gè)請(qǐng)求開(kāi)始時(shí)間
Thread Name:每個(gè)線程的名稱(chēng)
Label:Http請(qǐng)求名稱(chēng)
Sample Time:每個(gè)請(qǐng)求所花時(shí)間,單位毫秒
Status:請(qǐng)求狀態(tài),如果為勾則表示成功,如果為叉表示失敗。
Bytes:請(qǐng)求的字節(jié)數(shù)
樣本數(shù)目:也就是上面所說(shuō)的請(qǐng)求個(gè)數(shù),成功的情況下等于你設(shè)定的并發(fā)數(shù)目乘以循環(huán)次數(shù)
平均:每個(gè)線程請(qǐng)求的平均時(shí)間
最新樣本:表示服務(wù)器響應(yīng)最后一個(gè)請(qǐng)求的時(shí)間
偏離:服務(wù)器響應(yīng)時(shí)間變化、離散程度測(cè)量值的大小,或者,換句話說(shuō),就是數(shù)據(jù)的分布。
3.6查看結(jié)果數(shù)
? ? 請(qǐng)求的數(shù)據(jù)展示(請(qǐng)求頭信息,請(qǐng)求參數(shù))
? ? 響應(yīng)的數(shù)據(jù)展示(響應(yīng)嗎,響應(yīng)頭)
????通過(guò)察看結(jié)果樹(shù),我們可以看到每個(gè)請(qǐng)求的結(jié)果,其中紅色的是出錯(cuò)的請(qǐng)求,綠色的為通過(guò)。
????Thread Name:線程組名稱(chēng)Sample Start:啟動(dòng)開(kāi)始時(shí)間Load time:加載時(shí)長(zhǎng)Latency:等待時(shí)長(zhǎng)????Sizeinbytes:發(fā)送的數(shù)據(jù)總大小Headers sizeinbytes:發(fā)送數(shù)據(jù)的其余部分大小Sample Count:????發(fā)送統(tǒng)計(jì)Error Count:交互錯(cuò)誤統(tǒng)計(jì)Response code:返回碼Response message:返回信息Response headers:返回的頭部信息
? ?圖形結(jié)果
通過(guò)圖形展示出本次性能測(cè)試數(shù)據(jù)的分布,圖形結(jié)果一般作為聚合報(bào)告的分析輔佐
樣本數(shù)目:總共發(fā)送到服務(wù)器的請(qǐng)求數(shù)。
最新樣本:代表時(shí)間的數(shù)字,是服務(wù)器響應(yīng)最后一個(gè)請(qǐng)求的時(shí)間。
吞吐量:服務(wù)器每分鐘處理的請(qǐng)求數(shù)。
平均值:總運(yùn)行時(shí)間除以發(fā)送到服務(wù)器的請(qǐng)求數(shù)。
中間值:有一半的服務(wù)器響應(yīng)時(shí)間低于該值而另一半高于該值。
偏離:表示服務(wù)器響應(yīng)時(shí)間變化、離散程度測(cè)量值的大小。
jmeter主要組件介紹
測(cè)試計(jì)劃:使用 JMeter 進(jìn)行測(cè)試的起點(diǎn),它是其它 JMeter 測(cè)試元件的容器。
線程組:代表一定數(shù)量的并發(fā)用戶(hù),它可以用來(lái)模擬并發(fā)用戶(hù)發(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ì)。
取樣器(Sampler):模擬各種請(qǐng)求。所有實(shí)際的測(cè)試任務(wù)都由取樣器承擔(dān),存在很多種請(qǐng)求。如:HTTP 、ftp請(qǐng)求等等。
監(jiān)聽(tīng)器:負(fù)責(zé)收集測(cè)試結(jié)果,同時(shí)也被告知了結(jié)果顯示的方式。功能是對(duì)取樣器的請(qǐng)求結(jié)果顯示、統(tǒng)計(jì)一些數(shù)據(jù)(吞吐量、KB/S……)等。
斷言:用于來(lái)判斷請(qǐng)求響應(yīng)的結(jié)果是否如用戶(hù)所期望,是否正確。它可以用來(lái)隔離問(wèn)題域,即在確保功能正確的前提下執(zhí)行壓力測(cè)試。這個(gè)限制對(duì)于有效的測(cè)試是非常有用的。
邏輯控制器:允許自定義JMeter發(fā)送請(qǐng)求的行為邏輯,它與Sampler結(jié)合使用可以模擬復(fù)雜的請(qǐng)求序列。
定時(shí)器:負(fù)責(zé)定義請(qǐng)求(線程)之間的延遲間隔,模擬對(duì)服務(wù)器的連續(xù)請(qǐng)求。
配置元件維護(hù)Sampler需要的配置信息,并根據(jù)實(shí)際的需要會(huì)修改請(qǐng)求的內(nèi)容。
前置處理器和后置處理器負(fù)責(zé)在生成請(qǐng)求之前和之后完成工作。前置處理器常常用來(lái)修改請(qǐng)求的設(shè)置,后置處理器則常常用來(lái)處理響應(yīng)的數(shù)據(jù)。
測(cè)試計(jì)劃
1.測(cè)試計(jì)劃就是一個(gè)完整的場(chǎng)景
2.“獨(dú)立運(yùn)行每個(gè)線程組” :勾選以后所有的線程組都是順序執(zhí)行的了。一般不勾選,讓所有 的線程組并發(fā)啟動(dòng)。
3.“函數(shù)測(cè)試模式” :勾選后會(huì)有詳細(xì)的請(qǐng)求記錄,消耗資源,影響客戶(hù)端性能。一般不勾選。
4.用戶(hù)定義的變量:全局變量,測(cè)試計(jì)劃上可以添加用戶(hù)定義的變量。一般添加一些系統(tǒng)常用的配置。如果測(cè)試過(guò)程中想切換環(huán)境,切換配置,一般不建議在測(cè)試計(jì)劃上添加變量
線程組
(1)thread group(線程組)
這個(gè)就是我們通常添加運(yùn)行的線程。通俗的講一個(gè)線程組,可以看做一個(gè)虛擬用戶(hù)組,線程組中的每個(gè)線程都可以理解為一個(gè)虛擬用戶(hù)。
(2)setup thread group
一種特殊類(lèi)型的ThreadGroup的,可用于執(zhí)行預(yù)測(cè)試操作。這些線程的行為完全像一個(gè)正常的線程組元件。不同的是,這些類(lèi)型的線程執(zhí)行測(cè)試前進(jìn)行定期線程組的執(zhí)行;類(lèi)似LoadRunner的init,測(cè)試開(kāi)始時(shí)進(jìn)行初始化的工作。
(3)teardown thread group
一種特殊類(lèi)型的ThreadGroup的,可用于執(zhí)行測(cè)試后動(dòng)作。這些線程的行為完全像一個(gè)正常的線程組元件。不同的是,這些類(lèi)型的線程執(zhí)行測(cè)試結(jié)束后執(zhí)行定期的線程組;類(lèi)似LoadRunnner的end,測(cè)試結(jié)束時(shí)進(jìn)行回收工作。
取樣器
名稱(chēng):用于表示一個(gè)sample.建議使用一個(gè)意義的名稱(chēng)
注釋?zhuān)簩?duì)于測(cè)試沒(méi)任何影響,僅用來(lái)記錄用戶(hù)可讀的注釋信息
服務(wù)器名稱(chēng)或IP:http請(qǐng)求發(fā)送的目標(biāo)服務(wù)器名稱(chēng)或者IP地址,比如http://www.baidu.com4)端口號(hào):目標(biāo)服務(wù)器的端口號(hào),默認(rèn)值為80,可不填
協(xié)議:向目標(biāo)服務(wù)器發(fā)送http請(qǐng)求時(shí)的協(xié)議,http/https,大小寫(xiě)不敏感,默認(rèn)http
事物控制器
作用: 事務(wù)控制器會(huì)生產(chǎn)一個(gè)額外的采樣器,用來(lái)統(tǒng)計(jì)該控制器子結(jié)點(diǎn)的所有時(shí)間。
在線程組下創(chuàng)建事務(wù)控制器
斷言--檢查點(diǎn)
斷言(Assertions)可以用來(lái)判斷請(qǐng)求響應(yīng)的結(jié)果是否如用戶(hù)所期望的。它可以用來(lái)隔離問(wèn)題域,即在確保功能正確的前提下執(zhí)行壓力測(cè)試。這個(gè)限制對(duì)于有效的測(cè)試是非常有用的。
兩個(gè)重要斷言:響應(yīng)斷言和JSONAssertion
參數(shù)化是什么
動(dòng)態(tài)的獲取并設(shè)置數(shù)據(jù)
為什么使用參數(shù)化
執(zhí)行批量操作,批量添加批量刪除,人工效率太低
運(yùn)用程序代替人工獲取并設(shè)置數(shù)據(jù),安全高效
比如:對(duì)被測(cè)系統(tǒng)的用戶(hù)名和密碼進(jìn)行參數(shù)化,來(lái)模擬多個(gè)用戶(hù)同時(shí)登錄系統(tǒng)
參數(shù)化實(shí)現(xiàn)之CSV Data Set Config
Filename:所需數(shù)據(jù)文件的路徑。如和腳本同一路徑,可直接填寫(xiě)文件名
Fileencoding:編碼和文件保持一致即可,默認(rèn)為ANSI。如有中文,建議為UTF-8
Allowquote data:選項(xiàng)選為“true”的時(shí)候?qū)θ亲址奶幚沓霈F(xiàn)亂碼
Sharingmode:共享模式。默認(rèn)在所有線程組中使用,可選擇每個(gè)線程組單獨(dú)打開(kāi)
jmeter正則表達(dá)式提取
使用正則提取
運(yùn)用Jmeter正則提取器,可以從請(qǐng)求的響應(yīng)結(jié)果中取到需要的內(nèi)容,從而實(shí)現(xiàn)關(guān)聯(lián)。關(guān)聯(lián)是請(qǐng)求與請(qǐng)求之間存在數(shù)據(jù)依賴(lài)關(guān)系,需要從上一個(gè)請(qǐng)求獲取下一個(gè)請(qǐng)求需要回傳回去的數(shù)據(jù)
正則表達(dá)式(regular expression)描述了一種字符串匹配的模式(pattern),可以用來(lái)檢查一個(gè)串是否含有某種子串、將匹配的子串替換或者從某個(gè)串中取出符合某個(gè)條件的子串等。
字符:*,+,?,(),.
(1)引用名稱(chēng):下一個(gè)請(qǐng)求要引用的參數(shù)名稱(chēng),如填寫(xiě)title,則可用${title}引用它。
(2)正則表達(dá)式:():括起來(lái)的部分就是要提取的。.:匹配任何字符串。+:一次或多次。?:不要太貪婪,在找到第一個(gè)匹配項(xiàng)后停止。
(3)模板:用$$引用起來(lái),如果在正則表達(dá)式中有多個(gè)正則表達(dá)式,則可以是$2$$3$等等,表示解析到的第幾個(gè)值給title。如:$1$表示解析到的第1個(gè)值
(4)匹配數(shù)字:0代表隨機(jī)取值,1代表全部取值,通常情況下填0
(5)缺省值:如果參數(shù)沒(méi)有取得到值,那默認(rèn)給一個(gè)值讓它取。