JMeter性能测试
JMeter性能测试
影响性能测试指标(通过集合报告可查看):响应时间、用户并发数、吞吐量、系统性能计数器、思考时间、错误率(越低越好)
多:用户并发数(支持更多用户访问)
快:响应时间(用户体验舒畅)
好:稳定性(访问都能成功,无错误率)
省:资源使用率(达到预期效果,尽可能节省资源)
文档+fiddle
需要做性能测试的场景:
提取核心业务,高频业务
架构部署:
JMeter环境搭建
需要java环境
window Java环境部署:
1.配置JAVA_HOME变量为Java的安装路径
2.path中添加%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
3.配置classpath变量,值为%JAVA_HOME%\bin\dt.jar;%JAVA_HOME%\lib\tools.jar
window JMeter环境部署:
1.配置JMETER_HOME变量为JMeter的安装路径
2.path中添加%JMETER_HOOME%\bin
注意:JMeter.bat 是在Windows上运行
JMeter.sh 是在Mac或者Linux上运行,做分布式时,是主机,适用于单台
JMeter.server 做分布式时,是主机,适用于多台
录制脚本方法:
1.jmeter也有自己的代理,录制脚本前,我们只要启动好代理,手动通过浏览器来录制,录制完毕停止代理-------代理服务器录制(设置浏览器和jmeter 的http代理服务器)
1.工具设置
添加——》非测试元件——》Http代理服务器
2.浏览器设置
浏览器——》系统——》打开您计算机的代理设置——》打开使用代理服务器
提示:1.直接保存jmx文件 2.需要人为的调试脚本 3.录制https需要设置
https的录制:第一步:启动代理服务器
第二步:对浏览器配置证书:chrome浏览器为例:设置——》隐私设置和安全性——》安全——》设备管理证书——》受信任的根证书,导入证书(导入的证书是启动代理服务器时产生的证书)
第三步:启动浏览器的代理
第四步:Jmeter导入证书:选项——》SSL管理器——》选择JMeter/bin下的文件
第五步:开始录制https脚本,jMeter弹出的密码为:password
2.badboy录制:badboy测试工具通过协议包进行数据交换,响应速度非常快,不需要代码输入,直接操作网址录制对应脚本(不建议用)
提示:可直接导出jmx文件
3.Fiddler:通过浏览器访问测试网站,同时Fiddler抓包工具,获取抓包数据(导出jmx文件),手动去Jmeter开发脚本
jmeter常用方法:
jmeter运行方法:从上至下,按顺序执行
查看结果树:盾牌绿色:表示请求有响应,但是结果不一定对
1.JMeter配置元件
http cookie管理器:用户获取cookie,直接创建就可以获取cookie,不用填写任何数据(管理器放在请求里,只对请求有作用)
http请求默认值:用于填写默认的协议、ip、端口号
2.JMeter监听器
2.1 查看结果树
查看结果树作用:分析查看具体请求的详情:1.请求头、请求体、响应头、响应体
2.在做性能的场景时:分析错误请求的原因
2.2 聚合报告
聚合报告作用:汇总统计:请求数、响应时间(平均的 90% 90% 99% min max) 单位是ms、错误率(越低越好)
吞吐量(越高越好)、发送/接收(带宽)
2.3 用表格查看结果
以表格的形式进行查看、主要看启动时间
2.4图形结果
主要看整体效果
3.取样器
3.1JMeter 调式取样器(Debug Sampler)简介:
在调式JMeter脚本时通常有如下需求:
1、想知道参数化的变量取值是否正确
2、想知道正则表达式提取的值是否正确
3、想知道JMeter属性
4、调试时服务器返回些什么内容
JMeter中调试取样器与察看结果树元件组合就能让我们看到想看的内容。
4.逻辑控制器
- 逻辑控制器可以控制sample(采样器)的执行顺序
- 控制器需要和采样器一起使用,否则控制器就没有什么意义
- 放在控制器下面的采样器会被当做一个整体,执行时会被一起执行,当禁用掉控制器,下面的采样器就会没有作用
- JMeter逻辑控制器可以对元件的执行逻辑进行控制,除仅一次控制器外,其他可以嵌套别的种类的逻辑控制器(相当于逻辑控制逻辑)
JMeter中的Logic Controller可以分为:
1.控制测试计划执行过程中节点的逻辑执行顺序,如:Loop Controller、if Controller等
2.对测试计划中的脚本进行分组,如:Simple Controller、事务控制器
3.用来控制该控制器下面元件的执行次数,如:Throughput Controller
4.1 简单控制器
作为一个模块化的分区使用,是最基本的控制器,对Jmeter测试运行没有任何影响,可以将某些请求归集在一个简单控制器中,视为一个模块,使得脚本更加清晰
4.2 循环控制器
用于控制执行次数
4.3 交替控制器
交替执行控制器下面的操作
4.4 仅一次控制器
对于该控制器下面的操作,仅仅执行一次
4.5 随机控制器
对于该控制器下面的操作,随机执行
4.6 switch控制器
- 该控制器可以控制它里面的请求根据某些规则在不同num时选择控制器下的对应数字位的不同sampler
- 一般可以用在模拟多线程同时操作不同请求的测试场景
4.7 事务控制器
事务控制器下面的操作要么全部成功,要么全部失败(相关联测试用例)
4.8 吞吐量控制器(Throughput Controller)
-
Throughput Controller:吞吐量控制器,用来控制该控制器下面元件的执行次数,与控制器吞吐量的功能无关(Constant Throughput Timer可以控制吞吐量)
-
Throughput Controller有两种模式:Total Executions(单位为:次)和Percent Executions(单位为:%)
5 前置处理器
前置处理器:请求发出去之前执行的控制器,比如:加密(md5)、
5.1 BeanShell 预处理程序(BeanShell PreProcessor)
基于java的Beanshell
常用变量:
1.vars: 实际引用Jmeter线程的局部变量, 连通Jmeter 和 beanshell
vars.get(String key) //获取变量值
vars.put(String key, String value) //存储value到变量key,然后在JMeter中通过${key}进行引用
2.log: 写入信息到日志中,log.info("变量"),括号放置需要的变量
3.prev:获取前一个sample的响应;
getResponseDataAsString()
getResponseCode()
4.props:class java.util.Properties
变量属性复制给变量props.put(“some_variable”,vars.get(“some_variable”))
Jmeter Log
1.Jmeter日志默认存放在%JMeter_HOME%\bil\JMeter.log, 脚本中使用log.info("") 打印需要的日志信息
2.JMeter里面点击右上角可以打开日志窗口
vars和props 主要两点的区别:
vars 只能在档期线程内使用,props 可以跨线程租使用
vars 只能保持String 或者Objec, props 是 Hashtable 对象
读取变量使用 vars.put(var, value)函数, 例如:vars.put(“new_value”, value) ;
注意:上面的“new_value”必须是字符串类型, 传递其他类型,包括null,都会报错,如果想使用数字,数字等类型,一种方法是做类型转换
6 后置处理器
后置处理器:请求发出去之后执行的控制器,比如:提取数据
6.1 正则表达式提取器
正则表达式符号 | 符号意思 |
---|---|
() | 括号括起来的部分就是要提取的部分 |
. | 匹配任何字符串 |
+ | 一次或多次 |
? | 不要太贪婪,在找到第一个匹配项后停止 |
7 断言
断言:判断返回的结果是否正确(需要对哪个请求做断言,就放到哪个请求下面)
8 JMeter集合点技术(定时器)
定时器:1.思考时间--固定定时器
2.同步定时器--集合点
3.随机定时器
4.吞吐量定时器
怎么样实现真正的并发?
-
并发:指的是系统中正在操作业务的用户,在JMeter中,称为线程数
-
JMeter中的各个线程(用户)在进行业务操作中的顺序存在一定的随机性
集合点目的?
-
让各个线程(用户)步调一致,对系统进行加压
-
达到模拟真实并发访问的效果
8.1 同步定时器
结合点的创建:同步定时器(存在作用域)
线程组和同步定时器的区别:
线程组:作用域为全部请求
同步定时器:如果同步定时器放在线程组下,则作用域为全部请求
如果同步定时器放在请求下,则作用域为该请求
备注:同步定时器和线程组是同时发生的
关于同步定时器的配置:
eg:当线程组为3,设置同步定时器在证书管理http请求下,证书管理http请求是同步运行的
JMeter参数化
参数化流程:1.找出需要做参数化的数据
2.准备提供给参数化需要数据源
3.把脚本里的常量变成变量(使用前面的数据源):${username}
运行csv文件的所有数据,需要循环脚本
参数化方式:1.csv文件--需要配置的元件(有作用域,放在线程组下,只对线程组有用),例如账号、明明。
2.函数式(例如随机数、time、counter技术器)
3.用户自定义变量:位于配置元件,是全局变量,可以跨线程组使用,在脚本启动时会获取一次值,在后续运行中不会动态获取——一个变量对应一个值
4.用户参数:位于前置处理器,是局部变量,不可以跨线程组使用,在脚本启动时会获取一次值,在后续运行中会动态获取值——一个变量可对应多个值,要循环用户参数的数据,就要设置线程组的线程数
5.编程式:引入外部的jar\java\class、使用beanshell编程
JMeter做接口测试
Grafana性能监控方案
Grafana方案(搭建一个Grafana平台:需要数据采集、数据贮存、数据展示三个插件):
例如:监控mysql
监控方案:
- severagent.jar
- nmon+分析器
- grafana
- zabbix
- 宝塔BT
- skywalking
- 云监控
- top
导入测试报告
jmeter -n -t C:\Users\shuto\Desktop\sz\测试计划.jmx -l testLogFile -e -o ./output