JMeter简介
- Apache组织开发的开源免费压测工具
- 纯Java程序,跨平台性强
- 源程序可以从网上下载
- 高扩展性
- 可对服务器、网络或对象模拟巨大的负载,进行压力测试
- 可以用于接口测试
- 支持分布式、多节点部署
JMeter安装
- 下载位置
- 官网https://jmeter.apache.org/ 2
- binary可运行文件包
- 官网下载规律 首页 → Download → binaries
JMeter运行
- 运行环境要求:java运行时环境
- 运行方法:命令行直接启动$jmeter_home/bin/jmeter.sh
- 常规的菜单功能:新建、保存、查询、配置、帮助等
- 压测运行相关:开始运行、停止运行、远程运行、停止远程运行 等
- 设定外观长相更改
- 配置语言,不过建议用英语
- Demo - JMeter界面操作、外观、语言
使用代理服务器录制请求
录制压测脚本(一)Web端
- 压测对象 - http://www.baidu.com
- 压测页面 - 百度首页,百度新闻
- 步骤:
- 访问百度首页
- 单击进入“百度新闻”
脚本录制方法
- 打开JMeter
- 新建压测脚本
- 添加“HTTP(S) Test Script Recoder”
- 添加 Thread Group
- 在 Thread Group中添加“Recordiing Controller”
- 打开HTTP(S) Test Script Recorder
- 设定 Port = 8088
- 设定 Targer Controller = Test Plan > Tread Group > Recording Controller
- 在Requests Filtering添加 “include” 与 “Exclude” URL正则匹配表达式
- 目的:避免录制过多没必要的请求
- Include:
.*\.(baidu\.com).*
- Exclude:
.*\.(js|css|PNG|jpg|ico|png|gif).*
- 关于链接过滤的几点说明
- exclude 去掉一些诸如图片、js、css等静态请求,这些静态资源一般会单独存放,不会占用服务器运算资源,所以压测的时候可以不测试这些资源
- include 包含内容,只抓取百度URL的内容,不抓其他的网站的内容
- 单击保存按钮,命名文件名,将对JMeter脚本的更改存储到磁盘
- 打开浏览器,将浏览器的代理服务器地址指向https://locahost:8088
- 开始录制
- 单击HTTP(S) Test Script Recorder中的Start按钮,打开代理
- 单击弹框中的确定按钮
- JMeter的录制代理将会开启
- 在对应的浏览器中访问百度首页
- 进入百度新闻站点
- 停止JMeter的代理服务
- 可以看到对应的请求已被录制到JMeter中了
- 回放验证
- 添加 View Results Tree
- View Results Tree 的用途:
- 看Req/Resp详情
- 只是为了检验,所以一个并发、一次循环即可
- 单击开始运行按钮
- 在View Results Tree中
- 检查 请求/响应 是否都成功了
一、测试计划
- 用来描述一个压力/性能测试脚本和场景设计的基本运行单元,使用JMeter进行测试的所有内容都是基于一个测试计划
- 用户定义变量
- 独立运行每个线程组
- 不勾选:各个线程组并行、随机执行
- 勾选:线程组按照前后顺序来执行
- 主线程组运行完成之后运行tearDown线程组
- 函数测试模式,比如保存响应数据或者样本数据,需要注意的是选择该功能非常磁盘空间
- 添加文件或者jar包,常用于外部功能调用
- Demo:测试计划
二、线程组
- 线程组元件是任何一个测试计划的开始点,在一个测试计划中的所有元件都必须在某个线程组下,所有的任务都是基于线程组
- 第一部分:在请求取样器执行错误时需要执行的下一步动作
- 第二部分:线程属性
- 第一部分:在请求取样器执行错误时需要执行的下一步动作
- Continue:继续执行接下来的操作
- Start Next Loop:忽略错误,执行下一个循环
- Stop Thread:退出该线程(不再执行该线程的任何操作)
- Stop Test:等待当前执行的采样器结束后,结束整个测试
- Stop Test Now:直接停止整个测试
- 第二部分:线程属性
- Number of Thread(users):线程数,模拟的用户数量
- Ramp-up Period(in seconds):达到指定线程数所需要的时间。举例:线程数设置为50,此处设置为5,那么每秒启动的线程数 >= 线程数(50/5=10)
- Loop Count:循环次数
- Samp user on each iteration:每次迭代都用相同的用户,勾选该选项则不同次迭代之间是串行执行,不勾选则为并行执行
- Delay Thread creation until needed:当线程需要执行的时候,才会被创建。如果不选择这个选项,那么,在计划开始的时候,所有需要的线程就都被创建好了
- Specify Thread lifetime:定义线程调度时间
- Duration(seconds):持续时间(秒),在此选项填入N,说明这个计划,从某个开始时间算起,执行N秒后结束。(会忽略 结束时间 的选项)
- Startup delay(seconds):启动延迟(秒),在此选项填入N,手动点击开始执行计划,然后延迟N秒后,计划才真正开始执行。
三、控制器
- 种类丰富
- 为请求执行提供不同的逻辑控制
- 介绍几个常用的逻辑控制器
- 事务控制器 Transaction Controller
- 条件控制器 If Controller
- 循环控制器 Loop Controller
- 随机控制器 Random Controller
四、采样器/取样器
- 采样器(取样器):模拟用户操作,向服务器发出请求的组件;
- 采样器作用:向服务器发出请求,记录响应信息与响应时间;
- 常用采样器:
- Http Request Sampler
- Debug Sampler
- BeanShell Sampler
五、场景逻辑控制技术
- 利用JMeter逻辑控制器
- 实现测试业务流程中的逻辑变化
- 模拟实际业务场景
六、监听器
- 用来动态的监控JMeter执行测试的过程,实时查看测试结果;
- 常用监听器
- 查看结果树
- 聚合报告
- 后端监听器
七、定时器
- 用来控制采样器发出请求开始时间的组件
- 常见定时器:
- 固定定时器
- 高斯随机定时器
- 吞吐量定时器
- 并发定时器
八、断言元件
- 断言的作用就是让JMeter程序判断预期结果和实际结果是否一致,从而判定请求是否成功
- 常见断言:
- 响应断言
- 大小断言
- Xpath断言
- Json断言
注:尽量少用断言,断言会消耗JMeter运算的性能,影响JMeter压测的结果
九、常用配置元件解析
- 配置元件的用途
- 常见的配置元件
- 配置元件的执行顺序
- 配置元件的作用范围
- 配置元件执行结果的查看
HTTP Header Manager
十、前置处理器
- 在取样器发送请求之前执行,做一些准备工作,如设置参数、环境变量等
- 常见前置处理器举例:
- Sampler Timeout前置处理器
- BeanShell前置处理器
Sampler Timeout 前置处理器
- 设定请求超时时间
- 作用范围内的所有请求均生效
- 单位:毫秒
BeanShell 前置处理器
- 什么是BeanShell
- 小型嵌入式Java源码解释器
- 基本就是Java语言
- Be按Shell前置处理器:在Sampler执行之前会被执行
- 直接在JMeter的BeanShell处理器中写代码生成当前时间戳
- 通过程序生成当前时间戳
- 将时间戳值赋值给变量,然后传递给后续的请求样本
十一、后置处理器
- 后置处理器主要用于取样器执行后的提取数据操作
- 常见的后置处理器:
- Json数据提取器
- 正则表达式数据提取器
- Xpath数据提取器
十二、JMeter执行顺序
- JMeter八大组件
- 执行顺序