Jmeter介紹和使用

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

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è)
  • 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ù)中
  • 超時(shí)設(shè)置(單位:ms
    • 請(qǐng)求、響應(yīng)超時(shí)(建議5s或者10s)

BeanShell相關(guān)

  • 分類

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

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

配置元件

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

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

分布式性能測(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)

命令行執(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é)果文件存放路徑
  • 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é)論
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容