jmeter使用

文件目录

jmeter使用_第1张图片

元件执行顺序

元件作用域

jmeter使用_第2张图片

线程组

特点

  1. 模拟用户,支持多用户操作
  2. 多个线程组可以串联执行,也可以并联执行

分类

  1. setup线程组:前置处理,初始化
  2. 普通线程组:编写脚本
  3. teardown线程组:后置处理,环境恢复等

用法

jmeter使用_第3张图片

jmeter使用_第4张图片

jmeter使用_第5张图片

jmeter使用_第6张图片

jmeter使用_第7张图片

元件与组件

元件

元件:多个类似功能组件的容器(类似于类)

  1. 作用域:靠测试计划的树形结构中元件的父子关系来确定的
  2. 组成
    1. 取样器:发送请求
    2. 监听器:查看jmeter脚本的运行结果
    3. 配置元件:测试数据的初始化配置
    4. 参数片段:封装一段代码,供其他脚本调用
    5. 定时器:设置等待
    6. 断言:检查接口的返回结果是否与预期结果一致
    7. 后置处理器:对响应结果进行提取
    8. 前置处理器:对请求参数进行预处理
    9. 逻辑控制器:控制语句的执行顺序
  3. 同一作用域下的执行顺序:配置元件---前置处理器---定时器---取样器---后置处理器---断言---监听器

组件

组件:实现独立的某个功能(类似与方法,在元件里)

文件上传

jmeter使用_第8张图片

文件 必需 和 jmeter脚本文件 在同一个目录下

参数化

把测试数据组织起来,用不同的测试数据调用相同的测试方法

用户定义的变量

  1. 作用:定义全局变量
  2. 步骤
  1. 添加用户定义的变量。格式:变量名(自己设置) - 变量值
  2. jmeter使用_第9张图片

  3. 添加请求,引用定义的变量名。格式:${用户定义的变量名}

用户参数

  1. 作用:针对同一组参数,当不同的用户来访问时,可以获取到不同的值
  2. 步骤
  1. 添加用户参数
    1. jmeter使用_第10张图片

      1. 第一列添加多个变量名(自己设置)
      2. 后续每一列为一组用户的数据
  1. 添加请求,引用定义的变量名。格式:${用户定义的变量名}

csv数据文件

  1. 作用:当不同的用户,或者同一个用户多次循环时,都可以获取到不同的值
  2. 步骤
    1. 定义csv数据文件(一般用txt)

      jmeter使用_第11张图片

    2. 添加csv数据文件设置

      jmeter使用_第12张图片

    3. 添加请求,引用定义的变量名。格式:${变量名}

函数

随机函数

jmeter使用_第13张图片

jmeter使用_第14张图片

随机字符串

jmeter使用_第15张图片

jmeter使用_第16张图片

断言

让程序自动判断预期结果和实际结果是否一致

响应断言

对请求的任意格式的响应结果进行断言

  1. 参数

    jmeter使用_第17张图片

    1. 测试字段
      1. 响应文本:来自服务器的响应文本
      2. 响应代码:响应状态码,如:200
      3. 响应信息:响应的信息,如:ok
      4. response Headers:响应头部
      5. request headers:请求头部
      6. url样本:请求url
      7. document(text):响应的整个文档
      8. 忽略状态:当有多个断言时,如果有一个断言失败了,另一个成功了,那么结果是成功状态

jmeter使用_第18张图片

字符串 匹配 的是响应文本

json断言

请求的响应结果为json格式时,可以使用json断言

  1. 参数

    jmeter使用_第19张图片

    1. assert json path exists:用于断言的json元素的路径(实际结果,格式:$.参数名)
    2. additionally assert value:如果想要用某个值生成断言,勾选
    3. match as regular expression:使用正则表达式断言
    4. expected value :期望值(预期结果)
    5. expect null:如果希望为空,勾选
    6. invert assertion (。。。):反转断言(如果满足以上条件则失败)

断言持续时间

测试请求的响应时间是否满足要求时,可以使用断言持续时间

  1. 步骤

    jmeter使用_第20张图片

  2. 添加断言持续时间
    1. 填写持续时间(允许的最大响应时间,单位:ms)

关联

请求之间有依赖关系,一个请求的响应数据作为另一个的请求参数来传递

正则提取器

任意格式的响应数据,都可以使用正则表达式提取器进行提取

  1. 步骤
    1. 添加正则表达式提取器
      1. 引用名称:存放提取出的值的参数名称(自己设置)
      2. 正则表达式:左边界(.*?)右边界
      3. 模板:用$$引用起来,表示解析出第几个()的值(多个的话,就多写几个,如:$1$,$2$)
      4. 匹配数字:1表示第一个值,-1表示所有取值
    1. 添加请求
      1. 引用正则表达式中的引用名称,格式:${提取器里设置的名称}

正则测试

jmeter使用_第21张图片

json提取器

  1. 参数、
    1. names of created variables:存取出的值的参数名称
    2. json path expressions :json路径表达式,如:$.参数名称
    3. match no :选择提取哪个
      1. 0:随机,-1:提取所有的结果, 1:第一个值
    1. default values :参数的默认值
  1. 步骤
    1. 添加json提取器
    2. 添加请求
      1. 引用json提取的参数名称,格式:${提取器里参数名称}

json测试

jmeter使用_第22张图片

跨线程关联

实现跨线程关联

  1. 步骤
    1. 添加提取器(提取需要的值)
    2. 添加BeanShell取样器(将提取器的值保存为jmeter属性,通过函数_setproperty生成在BeanShell里执行)

      jmeter使用_第23张图片

    3. 添加线程组2
    4. 添加请求(读取jmeter属性,通过函数_property生成在其他线程使用)

      jmeter使用_第24张图片

脚本录制

使用jmeter自带录制脚本

jmeter使用_第25张图片

jmeter使用_第26张图片

步骤:

    1. 新建一个线程组
    2. 该线程组下新建一个cookie管理器
    3. 添加http代理服务器,并设置好
    4. jmeter使用_第27张图片

    5. jmeter使用_第28张图片

    6. 点击启动
    7. 过滤不要的脚本

      jmeter使用_第29张图片

需 前后加 .* 号

jmeter使用_第30张图片

直联数据库

使用场景

  1. 用作请求的参数化
  2. 用作结果的断言
  3. 准备测试数据
  4. 清理垃圾数据

关键配置

1.下载MYSQL驱动jar包

地址:

1.在 测试计划 里 引用

jmeter使用_第31张图片

2.或 将驱动包放入到 lib 目录下

连接信息与步骤

  1. 添加方式
    1. 配置元件--jdbc connection configuration
      1. 参数
        1. variable name:MySQL数据库连接池名称(自己设置)
        2. database url:协议(jdbc)+数据库IP+数据库端口+连接的数据库名称(jdbc:mysql:// IP地址:端口/库名)
        3. jdbc driver class:MySQL驱动包位置固定格式 - 下拉框选择(com.mysql.jdbc.driver)
        4. username :连接数据库用户名(root)
        5. password :MySQL数据库密码(如果密码为空就不写)
  1. 添加jdbc请求
    1. 取样器--jdbc request
      1. 参数
        1. variable name :数据库连接池的名字
        2. query type
          1. 查询操作:选择“select 。。。。”
          2. 增删改操作:选择“update 。。。。。”
        1. query:填写的sql语句,末尾可以不加“;”
        2. variable name:保存sql语句返回结果的变量名
  1. 添加http请求

逻辑控制器

if控制器

  1. 作用
    1. 用来控制它下面的测试元素是否运行
  1. 步骤
    1. 添加if控制器(如果有两个条件,就添加两个if控制器),使用json语法,如:"${name}" == "baidu"
    2. 添加http请求(添加在if控制器下)

循环控制器

  1. 作用
    1. 通过设置循环次数,来实现循环发送请求
  1. 步骤
    1. 添加循环控制器
    2. 添加http请求(添加在控制器下)
  1. 与线程组循环的区别
    1. 作用域不同:线程组控制是线程组下的所有请求,循环控制器控制的是控制器下的请求

foreach控制器

  1. 作用
    1. 一般和用户自定义变量或者正则表达式提取器一起使用,读取返回结果中一系列相关的变量值
  1. 参数
    1. 输入变量前缀:要读取的输入变量的固定前缀
    2. 开始循环字段:要读取的输入变量后缀数字的最小值-1
    3. 结束循环字段:要读取的输入变量后缀数字的最大值
    4. 输出变量名称:读取输入变量的值后保存的新变量名(自己设置),用于后续http请求引用
  1. 与用户定义的变量配合
    1. 步骤
      1. 添加用户定义的变量(命名规则:前缀_编号)
      2. 添加foreach控制器
      3. 添加http请求(添加在控制器下,引用控制器的输出变量名称)
  1. 与正则表达式配合
    1. 步骤
      1. 添加http请求
      2. 添加正则表达式提取器(在http请求下)
      3. 添加foreach控制器(输出变量前缀与正则表达式提取器的引用名称一样)
      4. 添加http请求(添加在控制器下,引用控制器的输出变量名称)

性能测试技术要点

定时器

同步定时器

阻塞线程(积累一定的请求),当在规定的时间内达到一定的线程数量,这些线程辉在同一个时间点一起释放,瞬间产生很大的压力

  1. 参数
    1. number of simulated users to group by:模拟用户的数量
      1. 如果为0,等于设置为线程组中的线程数量
    1. timeout in milliseconds:超时多少毫秒后同时释放
      1. 如果设置为0,会等待线程数达到设置的线程数才释放
      2. 如果大于0,超过设置的时间还没达到设置的线程数,将不再等待,释放已到达的线程
  1. 步骤
    1. 添加http请求
    2. 添加同步定时器(添加在请求下)

常数吞吐量定时器

  1. 作用
    1. 按指定的吞吐量执行,以每分钟为单位
  1. 参数
    1. target throughput(。。):目标吞吐量。(每个用户每分钟发送的请求数)
  1. 步骤
    1. 添加http请求
    2. 添加常数吞吐定时器(添加在请求下)

固定定时器

  1. 作用
    1. 设置等待多少时间后执行
  1. 步骤
    1. 添加请求
    2. 添加固定定时器(添加在需要等待执行的请求下)

分布式

原理

  1. 分布式测试时,选择其中一台作为控制机,其他机器作为代理机
  2. 执行时,控制机会把脚本发送到每台代理机上
  3. 代理机拿到脚本后开始执行,代理机执行时不需要启动jmeter界面
  4. 执行完,代理机会把结果回传给控制机,控制机收集所有代理机信息并汇总

注意事项

  1. 关闭防火墙
  2. 所有的机器在同一网络
  3. 所有机器的jmeter和java版本一致
  4. 关闭rmi ssl开关(在配置文件里)

配置与运行

  1. 配置--修改bin/jmeter。properties文件
    1. 代理机
      1. 修改服务端口(多台机器可以不修改),如:server_port=2999
      2. 将rmi ssl设置为禁用,如:server.rmi.ssl.disable=true
    1. 控制机
      1. 配置代理机远程地址:每台代理机的ip+port,多个代理机用“,”连接,如:remote_hosts=192.168.182.100:1099,192.168.182.101:2999
      2. 将rmi ssl设置为禁用,如:server.rmi.ssl.disable=true
  1. 执行
    1. 代理机
      1. 进入bin目录,运行jmeter-server.bat文件

        jmeter使用_第32张图片

    1. 控制机
      1. 进入bin目录,运行jmeter.bat文件
      2. 选择菜单:运行---远程启动/远程全部启动

        jmeter使用_第33张图片

  1. 步骤
    1. 配置代理机,并启动
    2. 配置控制机,并启动
      1. 添加脚本

测试报告

聚合报告

  1. 作用
    1. 收集性能测试结束后,系统的各项性能指标
  1. 参数

    jmeter使用_第34张图片

    1. label:每个请求的名称
    2. 样本:各个请求发出的数量
    3. 平均值:平均响应时间(单位:毫秒)
    4. 中位数:中位数,50%用户的响应时间小于该值
    5. 90%百分比:90%用户的响应时间小于该值
    6. 95%百分比:95%用户的响应时间小于该值
    7. 99%百分比:99%用户的响应时间小于该值
    8. 最小值:最小响应时间
    9. 最大值:最大响应时间
    10. 异常%:请求的错误率
    11. 吞吐量:每秒完成的请求数
    12. 接收:每秒接收到的千字节数
    13. 发送:每秒发送的千字节数

性能并发数计算

普通方法

  1. 公式
    1. 并发量= 总请求数 / 总时间(秒)
    2. 得出结论:每秒能够处理多少请求

二八原则

  1. 公式
    1. 并发量 = 总请求数 * 80% /(总时间 * 20%)
      1. 更符合

性能测试并发量

  1. 依据二八原则计算
  2. 并发量 = 有效请求数 * 80% / 有效时间 * 20%

压力测试并发量

  1. 根据用户峰值业务操作来计算
  2. 并发量 = 峰值请求数 / 峰值时间 * 系数
    1. 系数取决于项目组对未来业务量的评估

插件添加方式

  1. 安装插件管理器
    1. 在官网下载插件管理器plugins-manager-1.3
    2. 将下载的包放到lib/ext目录下
  1. 安装指定的插件
    1. 打开plugins-manager插件管理器
    2. 选择available plugins
    3. 选择需要下载的插件

常用插件

监听器插件

Active Threads Over Time

监听单位时间内活动的线程数。其中横坐标是单位时间(单位是毫秒),纵坐标是活动线程数(也就是并发数)

jmeter使用_第35张图片

Hits per Second

动态监听单位时间的点击率(不是鼠标),也就是触发的请求数。其中横坐标是运行时间,纵坐标是HPS值。

jmeter使用_第36张图片

Bytes Throughput Over Timer

主要展示的是在负载测试期间,每秒接收和发送的字节数。

·脚本运行期间,吞吐率变化趋势图

·在容量规划、可用性测试和大文件上传下载场景中,吞吐量是很重要的一个监控和分析指标

jmeter使用_第37张图片

Response Times Over Time

监听整个事务运行期间的响应时间。其中横坐标是运行时间,纵坐标是响应时间(单位是毫秒)

该图表展示的主要是每个样本的平均响应时间,单位为ms;

·脚本运行期间,不同事务(请求)的响应时间变化趋势图

·包括事务控制器样本结果

·重点:可以根据响应时间和变化和TPS以及模拟的并发数变化,判断性能拐点的范围

·一条线代表一个事务(请求)

jmeter使用_第38张图片

Transactions per Second

监听动态TPS,用来分析吞吐量。其中横坐标是运行时间,纵坐标是TPS值。红色表示通过的TPS,绿色表示失败的。

jmeter使用_第39张图片

Response Latencies Over Time

记录客户端发送请求完成后,服务器端返回请求之前这段时间

jmeter使用_第40张图片

Composite Graph

混合图表
在它的Graphs里面可以设置多少个图表一起展示,它可以同时展示多个图表

这里可以将一些图表结合在一起查看性能趋势和走向,有利于对比和结合查看性能

jmeter使用_第41张图片

线程组插件

jp@gc - Ultimate Thread Group

jmeter使用_第42张图片

创建线性负载:

如下图,我这里创建的就是一个线性负载,我的测试场景是60s内启动100个线程,持续运行60s,花10s的时间结束:

这个场景就比如说,高考成绩公布,这个时候系统60s内涌入了100个用户并发,他们访问系统持续时间60s,10s钟都退出了系统

jmeter使用_第43张图片

目的:

这里的持续时间,就是要看看系统达到这些负载后,能不能稳定运行,性能会不会恶化?但是这样的话,我们不确定这个负载量是多少,我们不确定服务器能处理的负载量是多少,哪些负载不能处理?

所以,我们要按步骤增加负载,慢慢加上去,这就是我们的步进负载

创建步进负载:

场景:

想看系统的负载量是多少,最大负载多少,是否可以平稳运行

这里我们就要用到多个线程组,在线性基础上增加多个线程组。比如我想每分钟增加25个线程,这25个线程启动耗时话费15s,设置如下:

jmeter使用_第44张图片

创建波浪形测试负载:浪涌测试场景

场景:

比如12306抢票的时候,每次开放抢票时,有大量用户涌入,等到下次开放时,又有大量用户涌入,这个时候,就像波浪一样,不断敲击服务器,考验服务器的性能

jmeter使用_第45张图片

配置说明:

第一个阶段,花20s的时间,启动25个线程,持续运行60s,用5s的时间停止掉

第二个阶段,第一阶段的线程都停止后,再开始启动第二个阶段的线程,花20s的时间再启动25个线程,再持续60s,用5s停掉

第三个阶段,等第二个线程都结束后,再花20s的时间启动25个线程,持续60s,再停掉

这样像波浪一样拍打服务器,观察服务器的性能,看系统是否能平稳运行。

jp@gc-Stepping Thread Group

意思解读:

– This group will start 10 threads:设置单台负载机,线程组启动的线程总数为10个

–First,wait for 0 seconds:启动第一个线程之前,需要等待0秒

–Then start 10 threads:设置最开始时启动10个线程

–Next,add 10 threads every 1 seconds,using ramp-up 5 seconds:每隔1秒,在5秒内启动10个线程

–Then hold load for 60 seconds:单台负载机启动的线程总数达到最大值之后,再持续运行60秒

–Finally,stop 5 threads every 1 seconds:每隔1秒,停止5个线程

jmeter使用_第46张图片

 jmeter非界面运行

在 cmd 命令窗口执行 :jmeter 命令行参数

命令行参数:

-n -t -n:非界面方式运行,-t:指定 jmx 文件的位置

-l -l :指定生成的 jtl 格式的结果(在jmeter的 查看结果树 里可以查看)

-e -o -e:生成 html 报告,-o :指定html报告的文件夹(这个文件夹必须是 空目录)

你可能感兴趣的:(jmeter,压力测试)