Jmeter介紹和使用

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

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:最常用的核心文件幫助手冊
  • 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ù)中
  • 超時設(shè)置(單位:ms
    • 請求涯竟、響應(yīng)超時(建議5s或者10s)

BeanShell相關(guān)

  • 分類

    • 前置處理器:BeanShell PreProcesser
    • 采樣器:BeanShell Sampler
    • 后置處理器:BeanShell PostProcesser
    • 斷言:BeanShell斷言
  • 腳本內(nèi)直接寫腳本

  • 常用內(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
  • 調(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(條件表達(dá)式)}如:{__jexl3({num} > 10)}醉鳖、{__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將不再等待
  • 常數(shù)吞吐量定時器
    • 什么是常數(shù)吞吐量定時器惊畏?
      • 控制接口的TPS
    • 為什么要控制?
      • 為控制TPS過高的接口密任,占用CPU
    • 字段
      • 目標(biāo)吞吐量
      • 基于計算吞吐量:建議選當(dāng)前線程組中所有活動線程

配置元件

  • HTTP Cookie管理器
    • Jmeter自動關(guān)聯(lián)cookie的處理方式
      • 1颜启、在線程組中加一個空的HTTP Cookie管理器
      • 2、通過正則提取后帶入
  • 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ù)用.+?代替
      • 模板:1
      • 匹配數(shù)字:1
    • json提取器
      • 格式:$.路徑
      • 調(diào)試取樣器結(jié)合查看結(jié)果樹使用

插件擴(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)用
    • 斷言
    • 監(jiān)聽器

分布式性能測試

  • 為什么要進(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é)果文件存放路徑
  • 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é)論
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末断序,一起剝皮案震驚了整個濱河市流纹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌违诗,老刑警劉巖漱凝,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異较雕,居然都是意外死亡碉哑,警方通過查閱死者的電腦和手機(jī)挚币,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扣典,“玉大人妆毕,你說我怎么就攤上這事≈猓” “怎么了笛粘?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長湿硝。 經(jīng)常有香客問我薪前,道長,這世上最難降的妖魔是什么关斜? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任示括,我火速辦了婚禮,結(jié)果婚禮上痢畜,老公的妹妹穿的比我還像新娘垛膝。我一直安慰自己,他們只是感情好丁稀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布吼拥。 她就那樣靜靜地躺著,像睡著了一般线衫。 火紅的嫁衣襯著肌膚如雪凿可。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天授账,我揣著相機(jī)與錄音枯跑,去河邊找鬼。 笑死矗积,一個胖子當(dāng)著我的面吹牛全肮,可吹牛的內(nèi)容都是我干的敞咧。 我是一名探鬼主播棘捣,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼休建!你這毒婦竟也來了乍恐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤测砂,失蹤者是張志新(化名)和其女友劉穎茵烈,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體砌些,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡呜投,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年加匈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仑荐。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡雕拼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出粘招,到底是詐尸還是另有隱情啥寇,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布洒扎,位于F島的核電站辑甜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏袍冷。R本人自食惡果不足惜磷醋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胡诗。 院中可真熱鬧子檀,春花似錦、人聲如沸乃戈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽症虑。三九已至缩歪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谍憔,已是汗流浹背匪蝙。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留习贫,地道東北人逛球。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像苫昌,于是被迫代替她去往敵國和親颤绕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容