Jmeter介绍和使用

时间:2021-6-4 作者:qvyue

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

接口签名校验

————–待补充——————-

性能测试报告

  • 目录:
    • 测试计划
    • 参考资料
    • 术语解释
    • 系统介绍
    • 测试环境
    • 测试指标
    • 测试工具和测试策略
    • 测试数据收集
    • 测试结果数据与截图
    • 测试结论
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。