jmeter常用详解

JDK安装配置

1、下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html
2、选择对应版本下载
3、安装JDK
4、配置环境变量

Jmeter安装配置

1、下载地址:http://jmeter.apache.org/download_jmeter.cgi
2、选择对应版本下载
3、安装Jmeter(解压缩)
4、启动:Jmeter:${jmeter}/bin/jmeter(windows-bat、linux-sh)

性能测试脚本设计

1、线程组设定-
    1.1、“在取样器错误后要执行的动作”:“继续”(执行取样器后面的操作)、“start next thread loop”(执行下次循环,当前循环剩余sampler不再执行)、“停止线程”(停止当前线程,其他线程继续执行)、“停止测试”(执行完剩余线程后停止测试)、“stop test now“(立即停止所有线程)
    1.2、线程数:及并发数(可以理解有N个用户同时执行线程组下的动作)
    1.3、Ramp-Up Period(in seconds):M秒内启动N个线程
    1.4、循环测试:勾选“永远”-不断请求、未勾选“永远”&循环测试L-每个线程请求L次
    1.5、Delay Thread creation until needed:直到需要的时候创建线程
    1.6、调度器:开启后可以设置持续时间、启动延迟、启动时间、结束时间
2、setUp线程组&tearDown线程组
    2.1、setUp线程组:在线程组下面可以做一些初始化操作如执行获取token接口并将token参数化以供后续线程组使用,又比如操作数据库可以进行数据库连接操作
    2.2、tearDown线程组:在线程组下面可以做一些clear操作比如数据库连接关闭
3、常用请求设定
    3.1、Http请求-Get请求:输入协议-HTTP、服务IP、端口、方法-Get、路径、文本编码
    3.2、Http请求-Post请求:无入参,输入协议-HTTP、服务IP、端口、方法-POST、路径、文本编码
    3.3、Http请求-Post请求:with Parameters,输入协议-HTTP、服务IP、端口、方法-POST、路径、文本编码、Parameters
    3.4、Http请求-Post请求:with Body,输入协议-HTTP、服务IP、端口、方法-POST、路径、文本编码、Body数据
    3.5、Http请求-Post请求:upload file,输入协议-HTTP、服务IP、端口、方法-POST、路径、文本编码、Parameter、上传文件(本地路径+入参名称+文件MIME(Multipurpose Internet Mail Extensions)类型)
    3.6、Http请求-Header&Cookies等设定
    3.7、JDBC请求:添加mysql连接插件 -> 新增jdbc connection configuration:连接名称x、url、驱动、账号、密码 -> 添加sampler/jdbc请求:连接名称x、动作、sql
4、参数化设定
    4.1、函数助手
    4.2、用户定义的变量
    4.3、截取字段赋参
      4.3.1、引用名称:定义一个变量
      4.3.2、正则表达式.*<匹配规则>.*下图示例 开始字符-"token":"、结束字符-"、截取中间部分字符串
      4.3.3、模版$1$表示选取第一次符合正则表达式的字符串
      4.3.4、匹配数字:0代表随机取值,1代表全部取值
      4.3.5、正则表达式无匹配项,则用该值    
    4.4、CSV Data Set Config
      4.4.1、Filename:本地文件路径
      4.4.2、File encoding:文件编码格式
      4.4.3、设置变量,","隔开
      4.4.4、Ignore first ... :忽略第一行,即从第二行取值
      4.4.5、分列符号:根据造的数据区别,分列后第一列对应了variable names的第一个值,第二列对应了variable names的第二个值
      4.4.6、Recycle on EOF:参数化数据取完后,是否循环取值
      4.4.7、Sharing mode:给哪些线程用
5、断言设定:从哪个地方获取响应字段、设置匹配规则、预期内容
6、查看结果树、聚合报告等监听
    6.1、查看结果树:写入文件查看、显示正确/错误日志、配置显示字段、搜索结果、是否模糊匹配、结果列、结果数据
    6.2、聚合报告
      6.2.1、Label:Sampler的名称
      6.2.2、Samples:请求次数
      6.2.3、Average:平均响应时长
      6.2.4、Median/90%/95%/99%:50%/90%/95%/99%请求的响应时长低于该值
      6.2.5、Min/Max:最小/大响应时长
      6.2.6、Error%:错误率
      6.2.7、ThroughPut:TPS,每秒完成事务数量
      6.2.8、Received/Sent KB/s:每秒接收/发出字节大小


        

         

 

性能测试实例介绍

1、性能测试项目背景
    1.1、业务:新零售项目有5w多台机器通过请求handler服务获取网关信息,并保持上线长连接,机器每天凌晨会重启&gateway网关服务发布引起近万台机器重连&服务出现异常再恢复后机器重连
    1.2、目的:确保机器快速上线
    1.3、拆分后的性能需求:handler获取网关信息接口TPS满足性能需求&handler服务稳定运行、gateway握手上线接口TPS满足性能需求&gateway服务稳定运行
    
2、性能测试场景梳理:
    2.1、模拟x用户并发y小时请求handler服务获取网关接口
    2.2、模拟x用户并发y小时请求gateway服务上线长连接
    
3、性能测试环境搭建&测试数据准备
    3.1、性能测试环境搭建:尽可能靠近生产环境
    3.2、测试数据准备:
        vem.vem_machine表造2w台机器
参数化数据shark.csv:握手协议、机器编号、ipcId
4、压测工具选型&脚本设计(本次演示使用jmeter)
    4.1、请求handler获取网关接口的压测脚本设计
        4.1.1、点击测试计划右键添加线程组:
            “在取样器错误后要执行的东西”:“Start Next Thread Loop”
            “线程数”:“1000”
            “Ramp-Up Period”:“1”
            “循环次数”:“永远”
4.1.2、选择线程组右键添加-Sampler-HTTP请求
            “协议”:“HTTP”
            “服务器名称或IP“:”10.213.6.203“
            “端口号”:“80”
            “方法”:“POST”
            “路径”:“/vem-handler/gateWayController/getGateWayAddress”
            “Content encoding”:“UTF-8”
            “Parameters“-”ipcId“:”${ipcId}“  ---- ${ipcId}是个变量

 

4.1.3、选择HTTP请求Sampler右键添加-配置元件-CSV Data Set Cofing
            “FileName”:“/Library/jmeter_project/shark.csv”
            "File encoding":“UTF-8”
            “Variable Names”:“vmId,ipcId”
            “Delimiter”:“\t”
            “Recycle on EOF”:“True”
            “Sharing mode”:“All Thread”
4.1.4、选择HTTP请求Sampler右键添加-断言-响应断言
            “要测试的响应字段”:“响应文本”
            “模式匹配规则”:“包括”
            “要测试的模式”:
                "resultCode":1200
                "vmId":"${vmId}"
                "ipcId":"${ipcId}"
4.1.5、选择线程组右键添加-监听器-查看结果树
4.1.6、选择线程组右键添加-监听器-聚合报告
4.2、请求gateway上线长连接接口的压测脚本设计
        4.2.1、点击测试计划右键添加线程组:
            “在取样器错误后要执行的东西”:“Start Next Thread Loop”
            “线程数”:“1000”
            “Ramp-Up Period”:“1”
            “循环次数”:“永远”
4.2.2、选择线程组右键添加-配置元件-CSV Data Set Cofing
            “FileName”:“/Library/jmeter_project/shark.csv”
            "File encoding":“UTF-8”
            “Variable Names”:“shark,vmId,ipcId”
            “Delimiter”:“\t”
            “Recycle on EOF”:“True”
            “Sharing mode”:“All Thread”
4.2.3、选择线程组右键添加-Sampler-TCP取样器
            “服务器名称或IP“:”vem-gateway1-test.nfsq.com.cn“
            “端口号”:“4201”
            “End of Line byte value”:“10”(换行的意思)
            “要发送的文本”:“${shark}(后面跟一个回车键)”
4.2.4、选择TCP取样器右键添加-断言-响应断言
            “要测试的响应字段”:“响应文本”
            “模式匹配规则”:“包括”
            “要测试的模式”:
                "resultCode":1
4.2.5、选择线程组右键添加-逻辑控制器-循环控制器
            “循环次数”:“永远”
4.2.6、选择循环控制器添加-Sampler-TCP取样器
            “服务器名称或IP“:”vem-gateway1-test.nfsq.com.cn“
            “端口号”:“4201”
            “End of Line byte value”:“10”(换行的意思)
            “要发送的文本”:
                {"h":"${vmId}"}
4.2.7、选择循环控制器添加-定时器-固定定时器
            “线程延迟(毫秒)”:“10000”
4.2.8、选择线程组右键添加-监听器-查看结果树
4.2.9、选择线程组右键添加-监听器-聚合报告
4.3、模拟机器上线场景:根据请求handler获取的网关ip、port去进行上线长连接的压测脚本设计
        4.3.1、点击测试计划右键添加线程组:
            “在取样器错误后要执行的东西”:“Start Next Thread Loop”
            “线程数”:“1000”
            “Ramp-Up Period”:“1”
            “循环次数”:“永远”
4.3.2、选择线程组右键添加-配置元件-CSV Data Set Cofing
            “FileName”:“/Library/jmeter_project/shark.csv”
            "File encoding":“UTF-8”
            “Variable Names”:“shark,vmId,ipcId”
            “Delimiter”:“\t”
            “Recycle on EOF”:“True”
            “Sharing mode”:“All Thread”
4.3.2、选择线程组右键添加-Sampler-HTTP请求
            “协议”:“HTTP”
            “服务器名称或IP“:”10.213.6.203“
            “端口号”:“80”
            “方法”:“POST”
            “路径”:“/vem-handler/gateWayController/getGateWayAddress”
            “Content encoding”:“UTF-8”
            “Parameters“-”ipcId“:”${ipcId}“
4.3.3、选择HTTP请求Sampler右键添加-断言-响应断言
            “要测试的响应字段”:“响应文本”
            “模式匹配规则”:“包括”
            “要测试的模式”:
                "resultCode":1200
                "vmId":"${vmId}"
                "ipcId":"${ipcId}"
4.3.4、选择HTTP请求Sampler右键添加-后置处理器-正则表达式处理器
            “要检查的响应字段”:“主体”
            “引用名称”:“ip”
            “正则表达式”:“.*"ip":"(.+?)".*”
            “模版”:“$1}$
            “匹配数字”:“1”
            “缺省值”:“vem-gateway1-test.nfsq.com.cn“
4.3.5、选择HTTP请求Sampler右键添加-后置处理器-正则表达式处理器
            “要检查的响应字段”:“主体”
            “引用名称”:“port”
            “正则表达式”:“.*"port":(.+?)}.*”
            “模版”:“$1}$
            “匹配数字”:“1”
            “缺省值”:“4201“
4.3.6、选择线程组右键添加-Sampler-TCP取样器
            “服务器名称或IP“:”${ip}“
            “端口号”:“${port}”
            “End of Line byte value”:“10”(换行的意思)
            “要发送的文本”:“${shark}(后面跟一个回车键)”
4.3.7、选择TCP取样器右键添加-断言-响应断言
            “要测试的响应字段”:“响应文本”
            “模式匹配规则”:“包括”
            “要测试的模式”:
                "resultCode":1
4.3.8、选择线程组右键添加-逻辑控制器-循环控制器
            “循环次数”:“永远”
4.3.9、选择循环控制器添加-Sampler-TCP取样器
            “服务器名称或IP“:”${ip}“
            “端口号”:“${port}”
            “End of Line byte value”:“10”(换行的意思)
            “要发送的文本”:
                {"h":"${vmId}"}
4.3.10、选择循环控制器添加-定时器-固定定时器
            “线程延迟(毫秒)”:“10000”
4.3.11、选择线程组右键添加-监听器-查看结果树
4.3.12、选择线程组右键添加-监听器-聚合报告
5、执行脚本&结果查看
    5.1、本地执行:点击启动按钮
5.2、远程启动(调度机、压力机):确保网络互通,防火墙不禁止
        5.2.1、远程压力机安装jdk+jmeter
        5.2.2、修改jmeter/bin/jmeter.properties
            server.rmi.ssl.disable=true
5.2.3、确保jmeter脚本、参数化文件和调度机存放路径一致
        5.2.4、启动jmeter/bin/jmeter-server.sh
5.2.5、获取jmeter-server启动分配的ip、port
        5.2.4、调度机修改jmeter/bin/jmeter.properties
            remote_hosts=ip1:port1,ip2:port2(压力机的)
5.2.5、启动jmeter/bin/jmeter.sh
        5.2.6、打开脚本,点击运行-远程启动-选择压力机启动
5.3、查看结果树
        查看运行结果是否成功
5.4、聚合报告
        “Label”:“Sampler名称”
        “Samples”:“请求数”
        “Average”:“平均响应时长”
        “Median”:“中间位,50%的请求响应时间不超过该值”
        “90%Line”:“90%的请求响应时间不超过该值”
        “95%Line”:“95%的请求响应时间不超过该值”
        “99%Line”:“99%的请求响应时间不超过该值”
        “Min”:“最小响应时长”
        “Max”:“最大响应时长”
        “Error%”:“错误率”
        “ThroughPut”:“TPS”            
        “Receive KB/sec”:“每秒接收数据大小”            
        “Send KB/sec”:“每秒发送数据大小”
5.5、错误日记查看:点击右上角⚠️按钮查看
6、数据监控,jmeter支持添加插件来监控服务器性能指标,不过个人建议使用性能监控平台+性能工具的方式获取,如zabbix、top、free、jstack、nmon、nload、sar、netstat等

 

7、结果分析,大致以下几点:
    7.1、RT:Response Time,响应时间
    7.2、TPS:transaction per second,每秒处理事务量,TPS=并发量/RT
    7.3、CPU:cpu lod、cpu utilities等
    7.4、Memory:可用内存、已用内存、buffer、cache等,其中java应用还要考虑新生代、老年代、持久代
    7.5、磁盘IO:读/写能力
    7.6、Network IO:发送/接收能力
    7.7、Java Thread:各个状态及数量-New、Runnable、Blocked、Waiting、Timed_waiting、Terminated
    7.8、容错率:多倍压力下允许业务能力下降,但不允许服务挂死
posted @ 2021-07-29 16:23  尼卡-  阅读(365)  评论(0)    收藏  举报