文章目录
总目录
安装
1. 安装JDK
- JDK下载
- 安装JDK
- 配置环境变量
- 校验
2. 安装JMeter
-
下载
官网下载地址: http://jmeter.apache.org/download_jmeter.cgi -
安装
把下载的安装包,解压到某一目录即可
提示:安装目录中不要出现空格,这将导致远程测试出现问题
-
环境配置
Jmeter环境 1. 新建JMETER_HOME变量,并添加jmeter所在目录 如:-> F:\Jmeter\apache-jmeter-5.1.1 2.PATH-> .;%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar;
-
启动验证
JMeter启动有多种方式,进入JMeter安装目录下的bin目录双击 jmeter.bat 双击 ApacheJMeter.jar 选择使用java程序打开 命令行输入: java -jar ApacheJMeter.jar
功能
1 文件目录
bin目录
存放可执行文件和配置文件
jmeter.bat:windows的启动文件
jmeter.log:日志文件
jmeter.sh:linux的启动文件
jmeter.properties:系统配置文件
jmeter-server.bat:windows分布式测试要用到的服务器配置
jmeter-serve:linux分布式测试要用到的服务器配置
docs目录
docs:是JMeter的api文档,可打开api/index.html页面来查看
printable_docs目录
- printable_docs的usermanual子目录下的内容是JMeter的用户手册文档
- usermanual下component_reference.html是最常用到的核心元件帮助文档。
- 提示:printable_docs的demos子目录下有一些常用的JMeter脚本案例,可以作为参考
lib目录
该目录用来存放JMeter依赖的jar包和用户扩展所依赖的jar包
2 修改配置
汉化、修改主题
3 元件作用域和执行单元
元件的基本介绍
元件:多个类似功能组件的容器(类似于类)。
常见的元件类型有:
1. 取样器
2. 逻辑控制器
3. 前置处理器
4. 后置处理器
5. 断言
6. 定时器
7. 测试片段
8. 配置元件
9. 监听器
组件:实现独立的某个功能(类似于方法)
元件作用域
在JMeter中,元件的作用域是靠测试计划的树形结构中元件的父子关系来确定的。
提示: 核心是取样器,其他组件都是以取样器为核心运行的,组件添加的位置不同,生效的取样器也不同。
作用域的原则
1. 取样器:元件不和其他元件相互作用,因此不存在作用域的问题;
2. 逻辑控制器:元件只对其子节点中的取样器和逻辑控制器作用;
3. 其他六大元件:除取样器和逻辑控制器元件外,如果是某个取样器的子节点,则该元件对其父子节点起作用;
4. 如果其父节点不是取样器,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等);
提示:以上元件中还没开始学习,暂时理解jmeter这种树形结构结构影响作用域即可。
元件执行顺序
1. 配置元件(config elements)
2. 前置处理程序(Per-processors)
3. 定时器(timers)
4. 取样器(Sampler)
5. 后置处理程序(Post-processors)
6. 断言(Assertions)
7. 监听器(Listeners)
提示:
1. 前置处理器、后置处理器、断言等元件功能对取样器起作用(如果在它们的作用域内没有任何取样器,则不会被执行)
2. 如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序依次执行
使用例子
需求:使用JMeter访问百度首页接口,并查看请求和响应信息
操作步骤
1. 启动JMeter
2. 在‘测试计划’下添加‘线程组’
3. 在‘线程组’下添加‘HTTP请求’取样器
4. 填写‘HTTP请求’的相关请求数据
5. 在‘线程组’下添加‘察看结果树’监听器
6. 点击‘启动’按钮运行,并查看结果
重点组件
线程组
说明:线程组是控制JMeter将用于执行测试的线程数,也可以把一个线程理解为一个测试用户。
-
添加线程组
位置:右键点击‘测试计划’ --> 添加 --> 线程(用户) --> 线程组 -
线程组的特点
模拟多人操作 线程组可以添加多个,多个线程组可以并行或串行 取样器(请求)和逻辑控制器必须依赖线程组才能使用 线程组下可以添加其他元件下组件
-
线程组分类
线程组 普通的、常用的线程组,可以看做一个虚拟用户组,线程组中的每一个线程都可以理解为一个虚拟用户 setUp线程组 一种特殊类型的线程组,可用于执行预测试操作 tearDown线程组 一种特殊类型的线程组,可用于执行测试后工作
-
线程组参数详解
-
取样器错误后要执行的动作
继续:如果取样器里的执行出现错误失败的时候,请求不会停止,继续执行。 启动下一进程循环: 忽略错误,线程当前循环错误,执行下一个循环。 停止线程: 只限当前线程停止,不影响其他线程执行 停止测试: 当前执行的线程全部执行完毕后结束 立即停止测试: 立刻停止
-
线程属性
线程数:虚拟用户数 Ramp-Up时间(秒):启动全部虚拟用户数所需要的时间 循环次数:指定次数或勾选永远 延迟创建线程直到需要:测试开始的时候,所有线程就被创建完。勾选了此选项,那么线程只会在合适的需要用到的时候创建. 调度器:勾选后,调度器配置才能使用;
-
调度器配置
持续时间(秒):设置脚本压测持续时间 启动延迟(秒):启动延迟时间
HTTP请求
位置: 选中线程组->右键->添加->取样器->HTTP请求 作用: 向服务器发送http及https请求
```xml
协议:向目标服务器发送HTTP请求时的协议,可以是http或者是https ,默认值为http 。
服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址。
端口号:目标服务器的端口号,默认值为80 。
方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
路径:目标URL路径(不包括服务器地址和端口)
Content encoding :内容的编码方式,默认值为iso8859
同请求一起发送参数:GET请求时url中附带参数可以通过此方式添加
消息体数据:POST/PUT请求JSON数据存放地
```
查看结果树
位置: 选中测试计划/线程组->右键->添加->监听器->察看结果树 作用: 查看请求请求和响应结果
取样结果:查看响应信息头信息、响应状态码
请求:查看请求相关信息(url、方法、参数)
响应:查看响应信息
JMeter参数化常用方式
1 用户定义的变量
2 用户参数
3 CSV Data Set Config
4 函数
JMeter断言
1 响应断言
2 JSON断言
3 持续时间断言(Duration Assertion)
JMeter关联
1 正则表达式提取器
2 XPath提取器
3 JSON提取器
JMeter录制脚本
在没有接口文档的旧项目当中,快速录制web页面产生的http接口请求,帮助编写接口测试脚本
JMeter直连数据库
JMeter逻辑控制器
1 如果(If)控制器
2 循环控制器
3 ForEach控制器
JMeter定时器
1 同步定时器(Synchronizing Timer)[集合点]
2 常数吞吐定时器(Constant Throughput Timer)
JMeter分布式
JMeter分布式执行原理
JMeter分布式测试时,选择其中一台作为控制机(Controller),其它机器做为代理机(Agent)。
执行时,控制机会把脚本发送到每台代理机上,代理机拿到脚本后就开始执行,代理机执行时不需要启动JMeter界面,可以理解它是通过命令行模式执行的。
执行完成后,代理机会把结果回传给控制机,控制机会收集所有代理机的信息并汇总。
JMeter测试报告
1 聚合报告
2 成html测试报告
JMeter性能测试常用图表
1. 常用平均并发数计算公式
PV:(Page View)即页面访问量,每打开一次页面PV计数+1,刷新页面也是。PV只统计页面访问次数。
UV(Unique Visitor),唯一访问用户数,用来衡量真实访问网站的用户数量。
一般用UV统计用户活跃数,用PV统计用户访问页面的频率
1.1 普通计算方法
计算公式:TPS= 总请求数 / 总时间
按照需求所示,在2019年第32周,有4.13万的浏览量,那么总请求数,我们可以认为估算为4.13万(1次浏览都至少对应1个请求)
总请求数 = 4.13 万请求数 = 41300 请求数
总时间:由于不知道每个请求的具体时间,我们按照普通方法,我们可以按照一周的时间进行计算
总时间 = 1天 = 1 * 24 小时 = 24 * 3600 秒
套入公式可得:
TPS = 41300请求数/24*3600秒 = 0.48请求数/秒
结论:按照普通计算方法,我们在测试环境对相同的系统进行性能测试时,每秒能够发送0.48请求就可以满足线上的需要。
1.2 二八原则计算方法
二八原则就是指80%的请求在20%的时间内完成
计算公式 : TPS = 总请求数 80% / (总时间20%)
按照公式进行计算
TPS = 41300 * 0.8请求数 / 24*3600*0.2秒 = 1.91 请求数/秒
结论:按照二八原则计算,在测试环境我们的TPS只要能达到1.91请求数每秒就能满足线上需要。二八原则的估算结果会比平均值的计算方法更能满足用户需求。
1.3 按照业务数据进行计算
业务数据:有的公司会统计一定时间内的所有业务数据,我们可以根据这个业务数据曲线图,统计出最多请求的数量和时间比例。
计算模拟用户正常业务操作(稳定性测试)的并发量:
根据这些数据统计图,可以得出结论:
大部分订单在8点-24点之间,因此系统的有效工作时长为16个小时
从订单数量统计,8-24点之间的订单占一天总订单的98%左右(40474个)
结合二八原则计算公式 : TPS = 总请求数 80% / (总时间20%)
需要在测试环境模拟用户正常业务操作(稳定性测试)的并发量为:
TPS = 40474 * 0.8请求数 / 16*3600*0.2秒 = 2.81 请求数/秒
计算模拟用户峰值业务操作(压力测试)的并发量:
根据这些数据统计图,可以得出结论:
订单最高峰在在21点-22点之间,一小时的订单总数大约为8853个
计算压力测试的并发数:TPS = 峰值请求数/峰值时间 * 系数
需要在测试环境模拟用户峰值业务操作(压力测试)的并发量为:
TPS = 8853 请求数 / 3600秒 * 3(系数) = 7.38 请求数/秒
2. 插件管理包工具
说明:下载jmeter插件管理工具包(可以用此包下载jmeter插件)
2.1 应用步骤
- 下载包管理工具jar包
- 将包管理工具jar包添加到jmeter中
- 下载性能测试常用组件
下载: https://jmeter-plugins.org/install/Install/
将jar包添加到jmeter中
提示:存放到jmeter安装目录 lib\ext\目录下
3. 性能测试常用图表及组件
- Concurrency Thread Group 线程组
- Transactions per Second 每秒事务数
- Bytes Throughput Over Time 吞吐量
- PerfMon Metrics Collector 性能指标收集器
3.1 Concurrency Thread Group 线程组
说明:阶梯线程组
添加方式:测试计划 --> 线程(用户)–> Concurrency Thread Group
参数:
重点:
Target Concurrency:目标并发(线程数)
Ramp Up Time:加速时间
Ramp-Up Steps Count:加速步骤计数
Hold Target Rate Time:运行时间
Time Unit:时间单位(分钟或者秒)
了解:
Thread Iterations Limit:线程迭代次数限制(循环次数)
Log Threads Status into File:
将线程状态记录到文件中(将线程启动和线程停止事件保存为日志文件)
3.2 Transactions per Second
说明:每秒完成事务数 场景:统计业务成功率
添加方式:测试计划 --> 线程组–> 监听器–>Transactions per Second
提示:需要配合事务控制器完成,如果不使用事务控制器,默认1个请求为1个事务
3.3 Bytes Throughput Over Time
说明:查看服务器吞吐流量 单位/字节
添加方式:测试计划 --> 线程组–> 监听器–>Bytes Throughput Over Time
3.4 PerfMon Metrics Collector
- 说明:用来监控服务端的性能的工具,包括cpu、内存、磁盘、网络等性能数据
- 添加方法:线程组->监听器->jp@gc - PerfMon Metrics Collector
- 注意:使用之前需要在服务器端安装监听服务程序并启动
- 监控服务器服务程序:
- 下载安装包ServerAgent-2.2.3.zip,链接地址:https://github.com/undera/perfmon-agent
- 解压ServerAgent-2.2.3.zip
- 启动,如果是windows运行startAgent.bat,如果是linux运行startAgent.sh
- 启动这个工具后,jmeter的插件jp@gc - PerfMon Metrics Collector就可以收集服务端的资源使用率,并在jmeter中查看了