1. Jmeter概述
1.1 Jmeter是什么
?Apache組織開發(fā)的基于Java的壓力測(cè)試工具
?100%純Java開發(fā)、完全的可移植性
?可以用于測(cè)試靜態(tài)和動(dòng)態(tài)資源
?多協(xié)議——http/ftp/socket/Java/數(shù)據(jù)庫(kù)(JDBC)
?完全多線程,jmeter已線程的方式來用戶的并發(fā)訪問的
?高可擴(kuò)展性
PS:在控制臺(tái)打印輸出:測(cè)試計(jì)劃→線程組→sampler→beanshell sampler:system out.print(${var})
性能測(cè)試流程:
需求分析:熟悉這個(gè)項(xiàng)目是做什么的,用戶在在程序上是如何操作的,哪些是重點(diǎn),哪些是重要業(yè)務(wù)流程,這些就是需求分析需要做的事。了解完需求分析時(shí)候呢,我們進(jìn)入的就是性能指標(biāo)制定,比如說響應(yīng)時(shí)間啊,吞吐量啊就是在這個(gè)環(huán)境定義的,為什么藥定義這些指標(biāo)呢,因?yàn)槲覀冃阅軠y(cè)試要有一個(gè)目標(biāo),因?yàn)橐粋€(gè)軟件啊,他總歸有一個(gè)性能瓶頸,我們要定義他,假如滿足一百個(gè)并發(fā)就OK了,前面我們了解了業(yè)務(wù)流程,也了解了性能指標(biāo),接下來需要做的就是腳本開發(fā),可以自己寫腳本,也可以利用工具,工具也有多種選擇,看你對(duì)哪一種工具比較熟悉,如jmeter啊,loadrunner啊等等;腳本開發(fā)完畢之后,我們進(jìn)入場(chǎng)景設(shè)置,腳本在開發(fā)完成之后啊,不能直接應(yīng)用于性能測(cè)試,我們要有調(diào)試,有設(shè)置的過程,設(shè)置場(chǎng)景主要跟第一步需求分析關(guān)聯(lián),符合用戶在軟件上的使用流程,用戶經(jīng)常做哪些操作,我們就把這些操作作為性能測(cè)試的重點(diǎn);場(chǎng)景設(shè)置完成后就監(jiān)控部署,如服務(wù)器硬件,中間件,數(shù)據(jù)庫(kù)等等,把他監(jiān)控起來,只有監(jiān)控起來才能發(fā)現(xiàn)他的運(yùn)行狀態(tài),對(duì)后面的調(diào)優(yōu)提供依據(jù)等等,監(jiān)控一定要有,監(jiān)控部署完成之后進(jìn)入測(cè)試執(zhí)行,第一階段,基礎(chǔ)測(cè)試,少量的用戶跑一邊,看有沒有問題,先解決問題后進(jìn)入正式的性能測(cè)試,性能執(zhí)行完了后進(jìn)入性能分析,結(jié)合之前的監(jiān)控?cái)?shù)據(jù)進(jìn)行分析了,分析完之后就進(jìn)入性能調(diào)優(yōu)了,性能調(diào)優(yōu)完成后就進(jìn)入下一輪性能執(zhí)行,這是一個(gè)循環(huán)的過程。
常見系統(tǒng)應(yīng)用分層:
顯示層(view):web、Android、IOS、H5
邏輯控制處(controller):API
數(shù)據(jù)存儲(chǔ)層(model):MySQL、MongoDB、Redis
性能指標(biāo)定義:
事務(wù):從發(fā)起請(qǐng)求到收到從服務(wù)端返回的響應(yīng)的一個(gè)閉環(huán),一個(gè)事務(wù)可能包含多個(gè)請(qǐng)求
TPS(transaction per second):每秒鐘系統(tǒng)能夠處理的事務(wù)數(shù)
響應(yīng)時(shí)間:從發(fā)起請(qǐng)求到收到從服務(wù)端返回的響應(yīng)的一個(gè)閉環(huán)所花費(fèi)的時(shí)間
并發(fā):沒有嚴(yán)格意義上的并發(fā),并發(fā)總有先后,有時(shí)間差,可能是一毫秒,一微妙等,所以并發(fā)講的是一個(gè)時(shí)間范圍,比如一秒內(nèi)
并發(fā)用戶數(shù):同一單位時(shí)間內(nèi)對(duì)系統(tǒng)發(fā)起請(qǐng)求的用戶數(shù)
吞吐量:一次性能測(cè)試過程中網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量的總和
吞吐率:?jiǎn)挝粫r(shí)間內(nèi)網(wǎng)絡(luò)上傳的數(shù)據(jù)量
點(diǎn)擊率:表示用戶每秒向服務(wù)器發(fā)起的請(qǐng)求數(shù),一次鼠標(biāo)單擊可能會(huì)發(fā)起多個(gè)請(qǐng)求,最佳或理想狀態(tài)下隨著用戶數(shù)的增加而上升
資源使用率:如CPU,內(nèi)存,網(wǎng)絡(luò)等
性能測(cè)試需求分析:
明確測(cè)試指標(biāo):哪些是重點(diǎn)關(guān)注指標(biāo),指標(biāo)定義是什么,把定義明確了,不要產(chǎn)生分歧,指標(biāo)要求是什么
明確測(cè)試場(chǎng)景:緊跟業(yè)務(wù)掛鉤,明確哪些是重點(diǎn)業(yè)務(wù),指標(biāo)評(píng)審,場(chǎng)景評(píng)審,用例評(píng)審
同行業(yè)比較、業(yè)務(wù)預(yù)期(跟產(chǎn)品、市場(chǎng)溝通)
性能測(cè)試工具對(duì)比:

1.2 JDK安裝及版本對(duì)應(yīng)
JDK下載地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
JDK版本要求:
?JMeter2.x—最低jdk1.6
?JMeter3.0/3.1—最低jdk1.7
?JMeter3.2/3.3—最低jdk1.8
1.3 JMeter下載及安裝n
JMeter下載地址:http://jmeter.apache.org/download_jmeter.cgi
系統(tǒng)要求:Java開發(fā),可跨平臺(tái)
Windows:apache-jmeter-xx.zip
Linux/Mac:apache-jmeter-xx.t
1.4 JDK環(huán)境變量配置n
1.4.1計(jì)算機(jī)右鍵→屬性→高級(jí)系統(tǒng)設(shè)置→環(huán)境變量n
1.4.2新建變量JAVA_HOME,變 量 值 填 JDK 安 裝 的 D:\Java\jdk1.7.0_76_x64n
1.4.3編輯Path變量,在末尾加%JAVAHOME%\bin;%JAVAHOME%\jre\bin
1.4.4打開cmd輸入javac驗(yàn)證是否配置成功
1.5 JMeter環(huán)境變量配置
1.5.1計(jì)算機(jī)右鍵→屬性→高級(jí)系統(tǒng)設(shè)置→環(huán)境變量
1.5.2新建變量JMeter_HOME,變 量 值 填 JMeter 安 裝 的 路 徑 , 如D:\apache-jmeter-3.3
1.5.3編輯Path變量,在末尾加%JMeter_HOME%\bin
1.5.4打開cmd輸入jmeter --version驗(yàn)證是否安裝成功

1.6 Jmeter目錄介紹
/bin-可執(zhí)行文件、配置文件
/bin/examples - CSV樣例
/bin/report-template -報(bào)告模板
/bin/templates -腳本模板
/doc - Jmeter API文檔
/extras -擴(kuò)展插件目錄,提供了對(duì)Ant的支持
/lib -插件目錄,存放Jmeter所依賴的外部jar
/lib/ext - Jmeter依賴的核心jar包、插件包
/lib/junit - junit測(cè)試腳本
/Licenses– 許可證書
/Printable_docs -用戶使用
1.7 Jmeter配置文件
?jmeter.bat
?jmeter.properti
1.8 Jmeter各大組件介紹
1.8.1 測(cè)試計(jì)劃Testplan
?測(cè)試的起點(diǎn)
?其他所有組件的容器
?用來描述性能測(cè)試
?所有內(nèi)容基于一個(gè)測(cè)試
1.8.2 取樣器sampler
?真正干活的
?發(fā)送請(qǐng)求到服務(wù)器,并等待服務(wù)器的響應(yīng)
?按照其在測(cè)試樹中的順序去執(zhí)
?受邏輯控制器控制
?支持多種協(xié)議
?支持二次開發(fā)
1.8.3 邏輯控制器LogicController
?控制sampler發(fā)送請(qǐng)求的邏輯 、順序
?控制sampler本身
?模擬復(fù)雜邏輯
常用:
ForEach控制器、如果(IF)控制器、循環(huán)控制器、隨機(jī)控制器、事務(wù)控制器、吞吐量控制器
1.8.4 配置元件Config Element
?靜態(tài)數(shù)據(jù)配置
?配置默認(rèn)屬性、信息
?不會(huì)向服務(wù)器發(fā)送任何請(qǐng)求
?僅對(duì)所在測(cè)試樹分支有效
?放在sampler之前
一個(gè)例外!--用戶自定義變量(User Defined Variables)此組件無論放在哪里,它定義的變量都會(huì)被整個(gè)線程所
1.8.5 定時(shí)器Timer
?設(shè)置請(qǐng)求間的時(shí)間間隔
?思考時(shí)間:定時(shí)器、隨機(jī)定時(shí)器
?集合點(diǎn):Synchronizing Time
1.8.6 前置/后置處理器
?前置處理器
發(fā)出請(qǐng)求(Request)前對(duì)即將發(fā)出的請(qǐng)求進(jìn)行特殊處理如:Sample Timeout
?后置處理器
對(duì)采樣器發(fā)出請(qǐng)求后得到的服務(wù)器響應(yīng)(Response)進(jìn)行處理如:正則表達(dá)式提
1.8.7 斷言Assertions
?判斷取樣器是否正常工作
?判斷請(qǐng)求響應(yīng)是否正確
?判斷結(jié)果是否符合預(yù)期
?相當(dāng)于LR的檢查點(diǎn)l
常用:jp@gc - JSON Path Assertion、響應(yīng)斷言、斷言持續(xù)時(shí)間
1.8.8 監(jiān)聽器Listener
?收集整理測(cè)試結(jié)果
?將測(cè)試結(jié)果數(shù)據(jù)進(jìn)行處理并展示
?生成XML、CSV等形式的文件供后續(xù)分析
常用:圖形結(jié)果、察看結(jié)果樹、聚合報(bào)告、用表格察看結(jié)果、保存響應(yīng)到文件
1.8.9 組件執(zhí)行順序
?配置元件(Config Element)
?前置處理器(Pre Processors)
?定時(shí)器(Timer)
?取樣器(sampler)
?后置處理器(Post Processors,只在有結(jié)果可用情況下執(zhí)行)
?斷言(Assertions,只在有結(jié)果可用情況下執(zhí)行)
?監(jiān)聽器(Listener,只在有結(jié)果可用情況下執(zhí)行)
1.8.10 組件作用域
靠測(cè)試計(jì)劃的樹型結(jié)構(gòu)中元件的父子關(guān)系確定原則:
?采樣器(sampler):元件不和其它元件相互作用,因此不存在作用域的問題
?邏輯控制器(Logic Controller):元件只對(duì)其子節(jié)點(diǎn)中的取樣器和邏輯控制器作用
?除采樣器和邏輯控制器元件外,其他6類元件,如果是某個(gè)sampler的子節(jié)點(diǎn),則該元件只對(duì)其父子節(jié)點(diǎn)起作用
?除采樣器和邏輯控制器元件外的其他6類元件,如果其父節(jié)點(diǎn)不是sampler ,則其作用域是該元件父節(jié)點(diǎn)下的其他所有后代節(jié)點(diǎn)(包括子節(jié)點(diǎn),子節(jié)點(diǎn)的子節(jié)點(diǎn)等)