美文网首页
Jmeter介绍和使用

Jmeter介绍和使用

作者: 猫大白Mk | 来源:发表于2021-03-22 17:50 被阅读0次

    jmeter简介

    jmeter基本概念

    • Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言

    jmeter的优点

    • 开源免费,基于Java编写,可集成到其他系统可拓展各个功能插件
    • 支持接口测试,压力测试等多种功能,支持录制回放,入门简单
    • 相较于自己编写框架活其他开源工具,有较为完善的UI界面,便于接口调试
    • 多平台支持,可在Linux,Windows,Mac上运行
    • 支持的协议
      • web:HTTP,HTTPS站点的Web1.0的Web 2.0 (ajax, flex and flex-ws-amf)
      • Web Services: SOAP / XML-RPC
      • 通过JDBC驱动程序的数据库
      • 目录: LDAP
      • 面向消息的服务通过JMS
      • Service: POP3, IMAP, SMTP
      • FTP 服务

    jmeter安装

    • 1、下载JDK文件安装,并配置环境变量
    • 2、jmeter官网下载解压
    • 3、bin目录下的jmeter.bat启动即可
    • 4、汉化和乱码解决
      • 在bin目下修改jmeter.properties文件
        • sampleresult.default.encoding=utf-8
        • language=zh_CN

    jmeter目录结构

    • bin目录(常用文件介绍)
      • examples:目录下包含Jmeter使用实例
      • ApacheJMeter.jar:JMeter源码包
      • jmeter.log:JMeter运行日志文件
      • jmeter.properties:JMeter配置文件
        • 属性log_level.Jmeter(日志详细度),默认imfo,可以修改为Debug-
      • jmeter.bat是启动文件,其中部分参数支持配置
        • heap(堆内存)最多设置为物理内存的一半,默认设置521M;如果heap超过物理内存的一半,可能运行jmeter会慢,甚至溢出
    • docs目录:JMeter帮助文档
    • printable_docs目录
      • usermanual子目录:用户手册,
        • component_reference.html:最常用的核心文件帮助手册
    • extras目录:提供对ant的支持,利用ant来实现自动化;例如批量执行脚本,产生html报表
    • lib目录
      • ext子目录是jmeter的核心jar包;
      • junit子目录是方junit脚本的
      • 用户扩展所依赖的包直接放在lib目录下即可

    jmeter使用

    测试搭建

    • 搭建步骤及含义
      • 配置元件(config elements) ---作用范围内的所有元件
      • 前置处理器(Per-processors) ---作用范围内的每一个sampler元件之前执行
      • 定时器(timers) ---作用范围的每一个sampler有效
      • Sampler元件不和其它元件相互作用,因此不存在作用域的问题
      • 后置处理程序(Post-processors)---作用范围内的每一个sampler元件之后执行
      • 断言(Assertions) ---作用范围内的每一个sampler元件执行后的结果执行校验
      • 监听器(Listeners) ---收集其作用范围的每一个sampler元件的信息并呈现
    • 执行顺序与作用域
      • 按照树状结构自上而下执行
      • 某个sampler下的控制元件只对该sampler生效

    线程组

    • 各字段含义
      • 线程数:模拟用户数量
      • ramp-up period:准备时长,设置的虚拟用户需要多长时间全部启动
      • 循环次数:单个用户、单个接口的循环次数
    • 字段扩展
      • 总线程数:线程数 * 循环次数
      • 总时长:ramp-up period * 循环次数
      • 场景加载策略:ramp-up period / 线程数

    HTTP请求

    • 协议及端口
      • http:80
      • https:443
    • 请求方法(常用)
      • get
        • 参数在url中,以?变量1&变量2
      • post
        • key=value格式:放在参数中
        • json格式:放在消息体中
          • 需要加http请求头Conten-type:application/json
        • key=json格式:放在参数中
    • 超时设置(单位:ms
      • 请求、响应超时(建议5s或者10s)

    BeanShell相关

    • 分类

      • 前置处理器:BeanShell PreProcesser
      • 采样器:BeanShell Sampler
      • 后置处理器:BeanShell PostProcesser
      • 断言:BeanShell断言
    • 脚本内直接写脚本

    • 常用内置变量和方法

      • log:写日志到控制台
        • log.info('变量名')
      • vars:操作jmeter变量
        • vars.get(“skuId”):从jmeter中获取${skuId}变量的值
        • vars.put(“name”,”test”):将”test”保存到${name}变量中
      • prev:获取前面sampler返回的信息
        • getResponseDataAsString():获取响应信息
        • getResponseCode():获取响应code
    • 调用jar包

      • 在测试计划中导入jar包
      • import 所需类;
    • 调用java源代码

      • source('jar路径')
    • BeanShell断言

      • Failure:是否失败,boolean类型
      • FailureMessage:失败日志,在断言失败时显示

    检查点(断言)的使用

    • 断言分类(常用)
      • 响应断言
      • Json Assertion
      • 断言持续时间
      • Size Assertion:响应字节大小

    参数化

    • 三种参数化方式
      • 用户参数
      • CVS Data Config:导入文件
      • 随机变量---通过函数助手生成
    • 常用随机函数
      • __Random:生成随机数
      • __RadndomString:生成随机字符串
      • __time:时间戳
      • __UUID:生成唯一的UUID
      • __CSVRead:CSV文件读取
        • 一个线程只选第一行
    • 函数生成的可选参数
      • 函数生成时可以把随机数保存到一个变量中
      • 该变量可以被再次调用

    逻辑控制器

    • 常用的逻辑控制器
      • 循环控制器:可以设置该控制器内的sampler执行的次数,循环次数与线程的循环次数各自独立
      • if控制器:根据判断条件决定是否执行该控制器内的请求,如果是字符串比较条件,参数和字符串都需要加引号
        • 条件格式:{__jexl3(条件表达式)}如:{__jexl3({num} > 10)}、{__jexl3(“${num}” == “10”)}
        • jex
      • 仅一次控制器:该控制器内的请求只执行一次,无论线程循环多少次
      • foreach控制器:可以遍历某个参数数组,循环获取数组中的参数

    定时器

    • 常用的定时器
      • 固定定时器:设置一个固定的sleep时间
      • 同步定时器(集合点)
      • 常数吞吐量定时器
    • 同步定时器(集合点)
      • 什么是集合点?
        • 多个用户集合到一个时间点同时并发
      • 集合点设置
        • 用户组数量:0,等同于设置为线程组中的线程数
        • 用户组数量:非0,代表达到设置的用户(线程)后,并发执行后续操作(不可超过线程数
        • 超时时间:0,Timer将等待线程数直到达到了设置用户组数的值后才执行,不够则一直等待
        • 超时时间:非0,如果超过了所设置的最大等待时间后,还没有达到用户组数量设置的值,Timer将不再等待
    • 常数吞吐量定时器
      • 什么是常数吞吐量定时器?
        • 控制接口的TPS
      • 为什么要控制?
        • 为控制TPS过高的接口,占用CPU
      • 字段
        • 目标吞吐量
        • 基于计算吞吐量:建议选当前线程组中所有活动线程

    配置元件

    • HTTP Cookie管理器
      • Jmeter自动关联cookie的处理方式
        • 1、在线程组中加一个空的HTTP Cookie管理器
        • 2、通过正则提取后带入
    • HTTP信息头管理
      • 存在接口header中的数据

    动态关联

    • 两种方式
      • 正则表达式提取器
        • 引用名称:变量名称
        • 正则表达式生成
          • 1、拷贝目标数据和左右边界
          • 2、把目标数据用括号括起来
          • 3、把目标数据用.+?代替
        • 模板:1
        • 匹配数字:1
      • json提取器
        • 格式:$.路径
        • 调试取样器结合查看结果树使用

    插件扩展

    • 插件官网
    • 几个好用的插件
      • 3 Basic Graph:windows下可用的实时的TPS和响应时间的插件
      • Customer Jmeter Functions:扩展函数
      • Random CSV Data Set Config:随机csv文件参数化
      • PerfMon:服务端性能实时监控插件

    数据库的使用

    • 步骤
      • 在测试计划中加入mysql驱动的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文件中,通过参数化进行调用
      • 断言
      • 监听器

    分布式性能测试

    • 为什么要进行分布式?
    • 答:jmeter由java开发,耗内存、cpu,所以大并发下还是需要分布式的
    • 步骤
      • 关闭防火墙
      • 选择一台机器作为controller,其他的机器作为agent,全部安装jmeter应用,并运行agent机 器bin目录下的jmeter-server文件
      • 在controller机器的bin目录下找到jmeter.properties文件中修改remote_hosts地址
      • 在controller机子的jmeter应用点击运行-->远程启动即可

    监听器

    • 常用的监听器
      • 断言结果
      • 查看结果树
      • 聚合报告
      • 用表格查看结果
      • 图形结果
      • aggregate graph
      • 等等。。。。。
    • 文件保存
      • 默认保存为jtl文件
      • jtl文件分析
    • 聚合报告含义及分析
      • 各个字段的含义(单位:毫秒
        • Lable:定义HTTP请求名称
        • Samples:这次测试中一共发出多少个请求
        • Average:平均响应时长
        • Median:50%用户的响应时长
        • 90%Line99%Line:90%99%用户的响应时长
        • Min:最小响应时间
        • Max:最大响应时间
        • Error%:错误率
        • Throughput:吞吐量--默认表示每秒完成的请求数量
        • Received KB/src:每秒从服务器端接收的数据量
        • Sent KB/src:每秒从客户端发送的请求数量
      • 性能指标分析
        • 并发数(用户数量)
        • 响应时间
        • 吞吐量(TPS)
        • 流量
        • 硬件指标
          • CPU
          • I/O
          • 内存(memory)

    命令行执行

    • 准备工作
      • 1,压力机安装并配置好JDK
      • 2、配置jmeter的环境变量
      • 3,调试好jmeter脚本
    • 单机器测试步骤:
      • 执行 jmeter -n -t test.jmx -l result.jtl
        • -n: 命令行模式,no-gui
        • -t:jmx脚本路径;
        • -l:jtl结果文件存放路径
    • Html报表生成步骤
      • 1、进入jmeter的bin目录下,修改reportgenerator.properties
      • 2、修改jmeter.reportgenerator.overall_granularity=1000(报表中数据展示间隔1秒)
      • 3、创建一个存放数据报表的文件夹
      • 4、执行命令:jmeter –g result.jtl –o ./output
        • -g: 指定jtl文件的路径
        • -o: 指定html报表生成到哪个文件夹下

    项目实操

    文件上传和下载

    • 上传
      • POST请求,勾选 use …for post
      • 同请求一起发送文件里,填写文件名称,参数名称
      • MIME类型: application/octet-stream
    • 下载
      • 如何判断是否下载成功?
        • 判断响应体的字节比真实文件的字节大

    webservice接口

    • webservice的网址
    • webservice接口和http接口的异同点
      • webservice是基于http接口封装的,是xml的
    • webservice接口调用关键点
      • 1、把参数放在消息体中
      • 2、添加header:Conent-type:text/xml

    接口签名校验

    --------------待补充-------------------

    性能测试报告

    • 目录:
      • 测试计划
      • 参考资料
      • 术语解释
      • 系统介绍
      • 测试环境
      • 测试指标
      • 测试工具和测试策略
      • 测试数据收集
      • 测试结果数据与截图
      • 测试结论

    相关文章

      网友评论

          本文标题:Jmeter介绍和使用

          本文链接:https://www.haomeiwen.com/subject/wyqthltx.html