jmeter簡(jiǎn)介
jmeter基本概念
- Apache JMeter是Apache組織開發(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)建斷言
jmeter的優(yōu)點(diǎn)
- 開源免費(fèi),基于Java編寫,可集成到其他系統(tǒng)可拓展各個(gè)功能插件
- 支持接口測(cè)試,壓力測(cè)試等多種功能,支持錄制回放,入門簡(jiǎn)單
- 相較于自己編寫框架活其他開源工具,有較為完善的UI界面,便于接口調(diào)試
- 多平臺(tái)支持,可在Linux,Windows,Mac上運(yùn)行
- 支持的協(xié)議
- web:HTTP,HTTPS站點(diǎn)的Web1.0的Web 2.0 (ajax, flex and flex-ws-amf)
- Web Services: SOAP / XML-RPC
- 通過(guò)JDBC驅(qū)動(dòng)程序的數(shù)據(jù)庫(kù)
- 目錄: LDAP
- 面向消息的服務(wù)通過(guò)JMS
- Service: POP3, IMAP, SMTP
- FTP 服務(wù)
jmeter安裝
- 1、下載JDK文件安裝,并配置環(huán)境變量
- 2、jmeter官網(wǎng)下載解壓
- 3、bin目錄下的jmeter.bat啟動(dòng)即可
- 4、漢化和亂碼解決
- 在bin目下修改jmeter.properties文件
- sampleresult.default.encoding=utf-8
- language=zh_CN
- 在bin目下修改jmeter.properties文件
jmeter目錄結(jié)構(gòu)
- bin目錄(常用文件介紹)
- examples:目錄下包含Jmeter使用實(shí)例
- ApacheJMeter.jar:JMeter源碼包
- jmeter.log:JMeter運(yùn)行日志文件
- jmeter.properties:JMeter配置文件
- 屬性log_level.Jmeter(日志詳細(xì)度),默認(rèn)imfo,可以修改為Debug-
- jmeter.bat是啟動(dòng)文件,其中部分參數(shù)支持配置
- heap(堆內(nèi)存)最多設(shè)置為物理內(nèi)存的一半,默認(rèn)設(shè)置521M;如果heap超過(guò)物理內(nèi)存的一半,可能運(yùn)行jmeter會(huì)慢,甚至溢出
- docs目錄:JMeter幫助文檔
- printable_docs目錄
- usermanual子目錄:用戶手冊(cè),
- component_reference.html:最常用的核心文件幫助手冊(cè)
- usermanual子目錄:用戶手冊(cè),
- extras目錄:提供對(duì)ant的支持,利用ant來(lái)實(shí)現(xiàn)自動(dòng)化;例如批量執(zhí)行腳本,產(chǎn)生html報(bào)表
- lib目錄
- ext子目錄是jmeter的核心jar包;
- junit子目錄是方j(luò)unit腳本的
- 用戶擴(kuò)展所依賴的包直接放在lib目錄下即可
jmeter使用
測(cè)試搭建
- 搭建步驟及含義
- 配置元件(config elements) ---作用范圍內(nèi)的所有元件
- 前置處理器(Per-processors) ---作用范圍內(nèi)的每一個(gè)sampler元件之前執(zhí)行
- 定時(shí)器(timers) ---作用范圍的每一個(gè)sampler有效
- Sampler元件不和其它元件相互作用,因此不存在作用域的問(wèn)題
- 后置處理程序(Post-processors)---作用范圍內(nèi)的每一個(gè)sampler元件之后執(zhí)行
- 斷言(Assertions) ---作用范圍內(nèi)的每一個(gè)sampler元件執(zhí)行后的結(jié)果執(zhí)行校驗(yàn)
- 監(jiān)聽器(Listeners) ---收集其作用范圍的每一個(gè)sampler元件的信息并呈現(xiàn)
- 執(zhí)行順序與作用域
- 按照樹狀結(jié)構(gòu)自上而下執(zhí)行
- 某個(gè)sampler下的控制元件只對(duì)該sampler生效
線程組
- 各字段含義
- 線程數(shù):模擬用戶數(shù)量
- ramp-up period:準(zhǔn)備時(shí)長(zhǎng),設(shè)置的虛擬用戶需要多長(zhǎng)時(shí)間全部啟動(dòng)
- 循環(huán)次數(shù):?jiǎn)蝹€(gè)用戶、單個(gè)接口的循環(huán)次數(shù)
- 字段擴(kuò)展
- 總線程數(shù):線程數(shù) * 循環(huán)次數(shù)
- 總時(shí)長(zhǎng):ramp-up period * 循環(huán)次數(shù)
- 場(chǎng)景加載策略:ramp-up period / 線程數(shù)
HTTP請(qǐng)求
- 協(xié)議及端口
- http:80
- https:443
- 請(qǐng)求方法(常用)
- get
- 參數(shù)在url中,以?變量1&變量2
- post
- key=value格式:放在參數(shù)中
- json格式:放在消息體中
- 需要加http請(qǐng)求頭Conten-type:application/json
- key=json格式:放在參數(shù)中
- get
- 超時(shí)設(shè)置(單位:ms)
- 請(qǐng)求、響應(yīng)超時(shí)(建議5s或者10s)
BeanShell相關(guān)
-
分類
- 前置處理器:BeanShell PreProcesser
- 采樣器:BeanShell Sampler
- 后置處理器:BeanShell PostProcesser
- 斷言:BeanShell斷言
腳本內(nèi)直接寫腳本
-
- log:寫日志到控制臺(tái)
- log.info('變量名')
- vars:操作jmeter變量
- vars.get(“skuId”):從jmeter中獲取${skuId}變量的值
- vars.put(“name”,”test”):將”test”保存到${name}變量中
- prev:獲取前面sampler返回的信息
- getResponseDataAsString():獲取響應(yīng)信息
- getResponseCode():獲取響應(yīng)code
- log:寫日志到控制臺(tái)
-
調(diào)用jar包
- 在測(cè)試計(jì)劃中導(dǎo)入jar包
- import 所需類;
-
調(diào)用java源代碼
- source('jar路徑')
-
BeanShell斷言
- Failure:是否失敗,boolean類型
- FailureMessage:失敗日志,在斷言失敗時(shí)顯示
檢查點(diǎn)(斷言)的使用
- 斷言分類(常用)
- 響應(yīng)斷言
- Json Assertion
- 斷言持續(xù)時(shí)間
- Size Assertion:響應(yīng)字節(jié)大小
參數(shù)化
- 三種參數(shù)化方式
- 用戶參數(shù)
- CVS Data Config:導(dǎo)入文件
- 隨機(jī)變量---通過(guò)函數(shù)助手生成
- 常用隨機(jī)函數(shù)
- __Random:生成隨機(jī)數(shù)
- __RadndomString:生成隨機(jī)字符串
- __time:時(shí)間戳
- __UUID:生成唯一的UUID
- __CSVRead:CSV文件讀取
- 一個(gè)線程只選第一行
- 函數(shù)生成的可選參數(shù)
- 函數(shù)生成時(shí)可以把隨機(jī)數(shù)保存到一個(gè)變量中
- 該變量可以被再次調(diào)用
邏輯控制器
- 常用的邏輯控制器
- 循環(huán)控制器:可以設(shè)置該控制器內(nèi)的sampler執(zhí)行的次數(shù),循環(huán)次數(shù)與線程的循環(huán)次數(shù)各自獨(dú)立
- if控制器:根據(jù)判斷條件決定是否執(zhí)行該控制器內(nèi)的請(qǐng)求,如果是字符串比較條件,參數(shù)和字符串都需要加引號(hào)
- 條件格式:
{__jexl3(
{__jexl3(“${num}” == “10”)}
- jex
- 條件格式:
- 僅一次控制器:該控制器內(nèi)的請(qǐng)求只執(zhí)行一次,無(wú)論線程循環(huán)多少次
- foreach控制器:可以遍歷某個(gè)參數(shù)數(shù)組,循環(huán)獲取數(shù)組中的參數(shù)
定時(shí)器
- 常用的定時(shí)器
- 固定定時(shí)器:設(shè)置一個(gè)固定的sleep時(shí)間
- 同步定時(shí)器(集合點(diǎn))
- 常數(shù)吞吐量定時(shí)器
- 同步定時(shí)器(集合點(diǎn))
- 什么是集合點(diǎn)?
- 多個(gè)用戶集合到一個(gè)時(shí)間點(diǎn)同時(shí)并發(fā)
- 集合點(diǎn)設(shè)置
- 用戶組數(shù)量:0,等同于設(shè)置為線程組中的線程數(shù)
- 用戶組數(shù)量:非0,代表達(dá)到設(shè)置的用戶(線程)后,并發(fā)執(zhí)行后續(xù)操作(不可超過(guò)線程數(shù))
- 超時(shí)時(shí)間:0,Timer將等待線程數(shù)直到達(dá)到了設(shè)置用戶組數(shù)的值后才執(zhí)行,不夠則一直等待
- 超時(shí)時(shí)間:非0,如果超過(guò)了所設(shè)置的最大等待時(shí)間后,還沒(méi)有達(dá)到用戶組數(shù)量設(shè)置的值,Timer將不再等待
- 什么是集合點(diǎn)?
- 常數(shù)吞吐量定時(shí)器
- 什么是常數(shù)吞吐量定時(shí)器?
- 控制接口的TPS
- 為什么要控制?
- 為控制TPS過(guò)高的接口,占用CPU
- 字段
- 目標(biāo)吞吐量
- 基于計(jì)算吞吐量:建議選當(dāng)前線程組中所有活動(dòng)線程
- 什么是常數(shù)吞吐量定時(shí)器?
配置元件
- HTTP Cookie管理器
- Jmeter自動(dòng)關(guān)聯(lián)cookie的處理方式
- 1、在線程組中加一個(gè)空的HTTP Cookie管理器
- 2、通過(guò)正則提取后帶入
- Jmeter自動(dòng)關(guān)聯(lián)cookie的處理方式
- HTTP信息頭管理
- 存在接口header中的數(shù)據(jù)
動(dòng)態(tài)關(guān)聯(lián)
- 兩種方式
- 正則表達(dá)式提取器
- 引用名稱:變量名稱
- 正則表達(dá)式生成
- 1、拷貝目標(biāo)數(shù)據(jù)和左右邊界
- 2、把目標(biāo)數(shù)據(jù)用括號(hào)括起來(lái)
- 3、把目標(biāo)數(shù)據(jù)用.+?代替
- 模板:
- 匹配數(shù)字:1
- json提取器
- 格式:$.路徑
- 調(diào)試取樣器結(jié)合查看結(jié)果樹使用
- 正則表達(dá)式提取器
插件擴(kuò)展
- 插件官網(wǎng)
- 幾個(gè)好用的插件
- 3 Basic Graph:windows下可用的實(shí)時(shí)的TPS和響應(yīng)時(shí)間的插件
- Customer Jmeter Functions:擴(kuò)展函數(shù)
- Random CSV Data Set Config:隨機(jī)csv文件參數(shù)化
- PerfMon:服務(wù)端性能實(shí)時(shí)監(jiān)控插件
數(shù)據(jù)庫(kù)的使用
- 步驟
- 在測(cè)試計(jì)劃中加入mysql驅(qū)動(dòng)的jar包
- Add directory or jar to classpath
- JDBC Connection Configuration
- DataBaseURL
- JDBC Driver Class
- Username
- Password
- JDBC Request
- query type
- Select Statement 查詢
- Update Statement 更新
- 如需要多個(gè)用戶配置不同的SQL,可以把SQL語(yǔ)句放在csv文件中,通過(guò)參數(shù)化進(jìn)行調(diào)用
- query type
- 斷言
- 監(jiān)聽器
- 在測(cè)試計(jì)劃中加入mysql驅(qū)動(dòng)的jar包
分布式性能測(cè)試
- 為什么要進(jìn)行分布式?
- 答:jmeter由java開發(fā),耗內(nèi)存、cpu,所以大并發(fā)下還是需要分布式的
- 步驟
- 關(guān)閉防火墻
- 選擇一臺(tái)機(jī)器作為controller,其他的機(jī)器作為agent,全部安裝jmeter應(yīng)用,并運(yùn)行agent機(jī) 器bin目錄下的jmeter-server文件
- 在controller機(jī)器的bin目錄下找到j(luò)meter.properties文件中修改remote_hosts地址
- 在controller機(jī)子的jmeter應(yīng)用點(diǎn)擊運(yùn)行-->遠(yuǎn)程啟動(dòng)即可
監(jiān)聽器
- 常用的監(jiān)聽器
- 斷言結(jié)果
- 查看結(jié)果樹
- 聚合報(bào)告
- 用表格查看結(jié)果
- 圖形結(jié)果
- aggregate graph
- 等等。。。。。
- 文件保存
- 默認(rèn)保存為jtl文件
- jtl文件分析
- 聚合報(bào)告含義及分析
- 各個(gè)字段的含義(單位:毫秒)
- Lable:定義HTTP請(qǐng)求名稱
- Samples:這次測(cè)試中一共發(fā)出多少個(gè)請(qǐng)求
- Average:平均響應(yīng)時(shí)長(zhǎng)
- Median:50%用戶的響應(yīng)時(shí)長(zhǎng)
- 90%Line99%Line:90%99%用戶的響應(yīng)時(shí)長(zhǎng)
- Min:最小響應(yīng)時(shí)間
- Max:最大響應(yīng)時(shí)間
- Error%:錯(cuò)誤率
- Throughput:吞吐量--默認(rèn)表示每秒完成的請(qǐng)求數(shù)量
- Received KB/src:每秒從服務(wù)器端接收的數(shù)據(jù)量
- Sent KB/src:每秒從客戶端發(fā)送的請(qǐng)求數(shù)量
- 性能指標(biāo)分析
- 并發(fā)數(shù)(用戶數(shù)量)
- 響應(yīng)時(shí)間
- 吞吐量(TPS)
- 流量
- 硬件指標(biāo)
- CPU
- I/O
- 內(nèi)存(memory)
- 各個(gè)字段的含義(單位:毫秒)
命令行執(zhí)行
- 準(zhǔn)備工作
- 1,壓力機(jī)安裝并配置好JDK
- 2、配置jmeter的環(huán)境變量
- 3,調(diào)試好jmeter腳本
- 單機(jī)器測(cè)試步驟:
- 執(zhí)行 jmeter -n -t test.jmx -l result.jtl
- -n: 命令行模式,no-gui
- -t:jmx腳本路徑;
- -l:jtl結(jié)果文件存放路徑
- 執(zhí)行 jmeter -n -t test.jmx -l result.jtl
- Html報(bào)表生成步驟
- 1、進(jìn)入jmeter的bin目錄下,修改reportgenerator.properties
- 2、修改jmeter.reportgenerator.overall_granularity=1000(報(bào)表中數(shù)據(jù)展示間隔1秒)
- 3、創(chuàng)建一個(gè)存放數(shù)據(jù)報(bào)表的文件夾
- 4、執(zhí)行命令:jmeter –g result.jtl –o ./output
- -g: 指定jtl文件的路徑
- -o: 指定html報(bào)表生成到哪個(gè)文件夾下
項(xiàng)目實(shí)操
文件上傳和下載
- 上傳
- POST請(qǐng)求,勾選 use …for post
- 同請(qǐng)求一起發(fā)送文件里,填寫文件名稱,參數(shù)名稱
- MIME類型: application/octet-stream
- 下載
- 如何判斷是否下載成功?
- 判斷響應(yīng)體的字節(jié)比真實(shí)文件的字節(jié)大
- 如何判斷是否下載成功?
webservice接口
- webservice的網(wǎng)址
- webservice接口和http接口的異同點(diǎn)
- webservice是基于http接口封裝的,是xml的
- webservice接口調(diào)用關(guān)鍵點(diǎn)
- 1、把參數(shù)放在消息體中
- 2、添加header:Conent-type:text/xml
接口簽名校驗(yàn)
--------------待補(bǔ)充-------------------
性能測(cè)試報(bào)告
- 目錄:
- 測(cè)試計(jì)劃
- 參考資料
- 術(shù)語(yǔ)解釋
- 系統(tǒng)介紹
- 測(cè)試環(huán)境
- 測(cè)試指標(biāo)
- 測(cè)試工具和測(cè)試策略
- 測(cè)試數(shù)據(jù)收集
- 測(cè)試結(jié)果數(shù)據(jù)與截圖
- 測(cè)試結(jié)論