JMeter性能测试

JMeter性能测试

影响性能测试指标(通过集合报告可查看):响应时间、用户并发数、吞吐量、系统性能计数器、思考时间、错误率(越低越好)

多:用户并发数(支持更多用户访问)

快:响应时间(用户体验舒畅)

好:稳定性(访问都能成功,无错误率)

省:资源使用率(达到预期效果,尽可能节省资源)

文档+fiddle

需要做性能测试的场景:

提取核心业务,高频业务

架构部署

image-20230106101101585

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代理服务器

image-20221204203722001

image-20221204205645891

2.浏览器设置

浏览器——》系统——》打开您计算机的代理设置——》打开使用代理服务器

提示:1.直接保存jmx文件 2.需要人为的调试脚本 3.录制https需要设置

https的录制:第一步:启动代理服务器

image-20221223175651610

第二步:对浏览器配置证书:chrome浏览器为例:设置——》隐私设置和安全性——》安全——》设备管理证书——》受信任的根证书,导入证书(导入的证书是启动代理服务器时产生的证书)

image-20221223175523146

第三步:启动浏览器的代理

image-20221223180130803

第四步:Jmeter导入证书:选项——》SSL管理器——》选择JMeter/bin下的文件

image-20221223175858078

第五步:开始录制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测试运行没有任何影响,可以将某些请求归集在一个简单控制器中,视为一个模块,使得脚本更加清晰

image-20221226101930792

4.2 循环控制器

用于控制执行次数

image-20221226103422070

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(单位为:%)

    image-20221226110434744

5 前置处理器

前置处理器:请求发出去之前执行的控制器,比如:加密(md5)、

5.1 BeanShell 预处理程序(BeanShell PreProcessor)

基于java的Beanshell

image-20230105134941432

常用变量:
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 同步定时器

结合点的创建:同步定时器(存在作用域)

image-20221230092211311

线程组和同步定时器的区别:

线程组:作用域为全部请求

同步定时器:如果同步定时器放在线程组下,则作用域为全部请求

​ 如果同步定时器放在请求下,则作用域为该请求

备注:同步定时器和线程组是同时发生的

关于同步定时器的配置:

image-20230104112951385

image-20230105092845836

image-20230105093714989

eg:当线程组为3,设置同步定时器在证书管理http请求下,证书管理http请求是同步运行的

image-20230104115833868

JMeter参数化

参数化流程:1.找出需要做参数化的数据

​ 2.准备提供给参数化需要数据源

​ 3.把脚本里的常量变成变量(使用前面的数据源):${username}

运行csv文件的所有数据,需要循环脚本

参数化方式:1.csv文件--需要配置的元件(有作用域,放在线程组下,只对线程组有用),例如账号、明明。

​ 2.函数式(例如随机数、time、counter技术器)

​ 3.用户自定义变量:位于配置元件,是全局变量,可以跨线程组使用,在脚本启动时会获取一次值,在后续运行中不会动态获取——一个变量对应一个值

​ 4.用户参数:位于前置处理器,是局部变量,不可以跨线程组使用,在脚本启动时会获取一次值,在后续运行中动态获取值——一个变量可对应多个值,要循环用户参数的数据,就要设置线程组的线程数

​ 5.编程式:引入外部的jar\java\class、使用beanshell编程

JMeter做接口测试

image-20230105134300800

Grafana性能监控方案

Grafana方案(搭建一个Grafana平台:需要数据采集、数据贮存、数据展示三个插件):

image-20230109092534473

例如:监控mysql

image-20230109100328851

监控方案:

  • severagent.jar
  • nmon+分析器
  • grafana
  • zabbix
  • 宝塔BT
  • skywalking
  • 云监控
  • top

导入测试报告

jmeter -n -t C:\Users\shuto\Desktop\sz\测试计划.jmx -l  testLogFile -e -o ./output

posted @ 2022-12-26 16:01  没事别找我  阅读(776)  评论(0编辑  收藏  举报