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