JMeter

JMeter官网

JMeter 文件目录介绍

bin目录-存放可执行文件和配置文件

jmeter.bat :windows的启动文件
jmeter.log :日志文件
jmeter.sh :linux的启动文件
jmeter.properties : 系统配置文件
jmeter-server.bat:windows分布式测试要用到的服务器配置
jmeter-server:linux分布式测试要用到的服务器配置

docs目录-JMeter的api文档

  • 打开api/index.html页面来查看

printable_docs目录-用户手册/元件帮助文档

  • usermanual子目录下的内容是JMeter的用户手册文档
  • usermanual下component_reference.html是最常用的核心元件帮助文档
  • demos子目录下有一些常用的JMeter脚本案例,可作为参考

lib目录-存放Jmeter依赖的jar包和用户扩展依赖的jar包

  • ext目录–第三方库

基本配置–汉化、主题

  • 汉化
    • 临时修改: options–language–choose language–chinese
    • 永久修改:
      • 打开jmeter.properties
      • 修改language=zh_cn
      • 重启jmeter
  • 主题
    • 选项-主题–选择对应的主题-重启

Jmeter基本操作步骤

  1. 启动jmeter
  2. 添加线程组
  3. 添加http请求的取样器并配置
  4. 添加查看结果树的监听器
  5. 启动运行jmeter,查看结果

JMeter元件及基本作用域

  • 基本元件

    • 线程组:模拟用户的
    • 配置元件:进行测试环境和测试数据的初始化,类似于自动化脚本中的setup
    • 前置处理器:对要发送的请求进行预处理,类似于自动化脚本中的参数化
    • 取样器:往服务器发送请求,类似于自动化脚本中的发送请求的代码
    • 后置处理器:对收到的服务器的响应进行数据提取,类似于自动化脚本中获取响应中特定字段的语句
    • 断言:将收到的响应结果与预期结果做对比,类似于自动化脚本中的断言
    • 监听器:查看测试脚本运行的结果和日志,类似于自动化脚本中的测试报告
    • 定时器:等待一段时间,类似于自动化脚本中的sleep
    • 测试片段:封装基本功能,不单独执行,需要通过脚本调用才能执行,类似于自动化脚本中封装的函数
  • 作用域的原理

    • 核心:根据测试计划中的树形结构的父子节点来确定
    • 原则
      • 取样器是没有作用域的
      • 逻辑控制器:只针对其子节点下的所有元件有效
      • 其他的元件
        • 如果其父节点是取样器,只针对父节点(取样器)有效
        • 如果其父节点是非取样器,针对父节点下的所有子节点及子节点的子节点有效
  • 元件的执行顺序

    • 顺序:配置元件、前置处理器、定时器、取样器、后置处理器、断言、监听器
    • 注意
      • 配置元件、前置处理器、后置处理器都需要依赖取样器才能运行
      • 在同一个作用域下,相同类型元件的执行顺序是从上到下按顺序执行

JMeter三个重要组件

线程组

  • 作用:通过配置线程组中的线程数来模拟用户,线程数就是用户数,线程组就是用户组
  • 特点
    • 模拟多用户
    • 取样器和逻辑控制器必须在线程组下使用
    • 一个测试计划下可以添加多个线程组,他们可以并行或串行
      • 并行:默认情况下线程组为并行执行
      • 串行:在测试计划下勾选”独立运行每个线程组“
  • 线程组的分类
    • setup线程组:用于测试前的预处理操作,在所有的线程组中最先执行
    • 普通线程组:用于执行业务测试的脚本
    • teardown线程组:用于测试后的后置处理(恢复环境、数据)的操作,在所有线程组中最后执行
  • 线程组的属性
    • 线程数:模拟用户数
    • Ramp-up时间:模拟用户启动所需要的时间
    • 循环次数
      • 配置指定次数:控制脚本循环执行的次数
      • 配置循环永远
        • 需要调度器配置使用
        • 运行时间:脚本执行时间
        • 延迟启动时间:脚本等待特定的时间才能开始运行
  • 线程数m和循环次数n的关系
    • 如果同时配置,实际发送的http请求次数为m*n
    • 虽然发送的次数相同,但是不能相互替换
      • 线程组:代表并发用户数,体现服务器的负载量
      • 循环次数:代表执行时间

取样器

HTTP请求

  • http协议:可以填写为http或者https,默认为http
  • http主机名/ip
  • 端口:默认为80
  • 请求方法:http协议所支持的所有方法
  • 路径:目录+参数
  • 编码格式:默认ios国际标准,推荐使用utf-8

查看结果树

  • 取样器结果:统计请求相关的信息
  • 请求:Http请求的请求头和请求体的详细信息
  • 响应:Http响应的响应头和响应体的详细信息

JMeter响应中出现乱码

  • 修改jmeter.properties文件中,sampleresult.defult.encoding=utf-8
  • 重启jmeter

JMeter 参数化

四种方式:

  1. 用户定义的变量
  2. 用户参数
  3. csv data set config
  4. 函数

用户定义的变量

  • 方式1

    • 添加:线程组–配置文件–用户定义的变量
    • 配置:参数名+参数值
    • 使用:在HTTP请求的取样器中引用定义的变量–${}
      在这里插入图片描述
      在这里插入图片描述
  • 方式2

    • 配置:在测试计划中配置用户定义的变量
    • 使用:在HTTP请求的取样器中引用定义的变量–${}
      在这里插入图片描述

用户参数

  • 添加:线程组–前置处理器–用户参数
  • 配置
    • 参数:添加变量-设置参数名
    • 参数值:添加用户–针对每个用户配置不同的参数值
  • 使用:在HTTP请求的取样器中引用定义的变量–${参数名}
    在这里插入图片描述
    在这里插入图片描述

CSV 数据文件设置

  • 添加:线程组–配置元件–csv data set config
  • 编写csv数据文件(.csv作为后缀):
    • 多个参数写为多个列,其中用逗号隔开
    • 多组参数值,则使用多行来设置
  • 配置:
    • 文件名:填写csv文件的路径,建议使用相对路径
    • 文件编码:utf-8
    • 变量名称:从csv数据文件中读取的数据需要保存的变量名,有多个变量用逗号隔开
    • 是否忽略首行:是否从csv数据文件第一行开始读取
    • 分隔符:要求与csv数据文件中多列的分隔符一致
    • 遇到文件结束符是否再次循环:默认true
    • 遇到文件结束符是否停止线程:当前一个参数为False,则该参数为True,一般设置为True
      在这里插入图片描述

在这里插入图片描述

函数

  • counter
    • true:每个用户使用独立的计数器
    • false:所有用户使用全局的计数器
  • 引用:在取样器中使用${__counter(false,)}来引用对应的值
  • 应用场景:当需要参数化的数据只有唯一性要求,但是对具体的参数值无明确要求时,建议使用函数方式
    在这里插入图片描述
    在这里插入图片描述

JMeter常用断言

作用:让脚本自动执行的过程中,能够自动的判定执行结果是否正确,需要添加断言
常用断言

  1. 响应断言
  2. JSON断言
  3. 断言持续时间

响应断言

  • 添加:线程组–HTTP请求–断言–响应断言
  • 配置
    • 测试字段:需要检查的字段
    • 模式匹配规则:需要使用什么规则来进行检查
    • 测试模式:需要检验的值
      在这里插入图片描述
      在这里插入图片描述

Json断言

  • 适用于返回的HTTP响应为Json格式
  • 添加:线程组–HTTP请求–断言–JSON断言
  • 配置
    • JSON PSTH:$.weatherinfo.city
    • 勾选”Additonal assert value“
    • 在expected value里填写期望值

在这里插入图片描述
在这里插入图片描述

断言持续时间

  • 适用于性能测试时候,检查HTTP请求的响应时间是否超过预期值
  • 添加:线程组–HTTP请求–断言–断言持续时间
  • 配置:预期时间
    在这里插入图片描述

JMeter关联

  • 当多个请求之间有依赖关系,后一个请求的参数需要使用前一个请求的相应数据时,需要用到关联

分类:

  1. 正则表达式提取器
  2. xpath提取器
  3. JSON提取器
正则表达式介绍: 
表达式: <title>.*?</title> 
. :是通配符,可以代表任意字符(除换行回车)
* :代表前面的字符出现0次或多次
? :代表非贪婪匹配,找到左边界后,往右查找匹配右边界,只有有匹配的右边界就停止继续查找,再次查找左边界和右边界

正则表达式提取器

  • 添加:线程组-HTTP请求–后置处理器–正则表达式提取器
  • 配置:
    • 要检查的响应字段:默认主体
    • 引用名称:匹配后的数据要储存的变量名
    • 正则表达式:(.*?) ()里是要保存的数据
    • 模板: 1 1 1
      • 数字1代表上面正则表达式中第几个()
    • 匹配数字:0代表随机值,1代表第一个结果,-1代表所有结果
    • 缺省值:当没有匹配上时该值保存到变量中
  • 引用:
    • 如果匹配数字为1,则直接使用变量名来引用:${变量名}
    • 如果匹配数字为-1,则使用变量名+后缀的方式来引用:${变量名_数字}
      在这里插入图片描述
  • 匹配数字为-1,可以添加:线程组-取样器-debug sampler 来确定参数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

XPath提取器

  • 添加:线程组–HTTP请求器–后置处理器–xpath提取器
  • 配置:
    • 引用名称:匹配后的数据要存储的变量名
    • xpath query:xpath匹配规则
    • 匹配数字:1代表第一个结果,-1代表所有结果,0代表随机
    • 缺省值:默认值
      在这里插入图片描述

Json提取器

  • 添加:线程组–HTTP请求–后置处理器–JSON提取器
  • 配置:
    • 引用名称:匹配的数据要存储的变量名
    • JSON path:json路径 $.weather.city
  • 引用:直接引用变量名
    在这里插入图片描述
    在这里插入图片描述

JMeter直连数据库

  • 连接准备

    • 打开数据库,确定数据库的表及对应的字段
    • 加载mysql的 jdbc驱动
    • 配置jdbc connection configuration
      • created pool name :给连接池命名,用于后续引用
      • database url:jdbc:mysql://127.0.0.1:3306/库名
      • jdbc driver class : com.mysql.jdbc.driver
      • username:
      • password:
  • 直连数据库:

    • 添加JDBC Request:在取样器下添加
    • 配置:
      • 配置连接池的名称
      • 配置sql语句
      • 配置保存的变量名
        • 如果sql语句返回了多个参数,输入相同个数的变量名来保存
    • HTTP断言中,就可以引用变量来判断
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

JMeter逻辑控制器

  • 可以按照设定的逻辑控制器来执行

如果( if) 控制器
循环控制器–ForEach控制器

如果(IF)控制器

  • 用户定义的变量一起使用
  • 添加:线程组–逻辑控制器–if控制器
  • 配置:
    • 使用js语句:"${name}"==‘baidu’
    • 推荐–使用jmeter函数的方式:KaTeX parse error: Expected group after '_' at position 2: {_̲_jexl3("{name}"==‘baidu’,)}
      在这里插入图片描述
      在这里插入图片描述

ForEach控制器

  • 用户定义的变量或者正则表达式提取器配合使用,循环读取返回的变量中的值,执行一次或者多次
  • 添加:线程组–逻辑控制器–ForEach控制器
  • 与用户的定义的变量配合使用:
    • 用户定义的变量
      • 变量名:固定前缀+连续数字
    • ForEach控制器
      • 变量前缀:用户定义的变量中配置的固定前缀
      • 起始数字:连续数字的最小值-1
      • 结束数字:连续数字的最大值
      • 输出变量名称:依次读取变量后存储到参数中,供HTTP请求引用
    • HTTP请求:
      • 使用输出变量进行引用
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
  • 与正则表达式提取器配合使用
    • 先通过正则表达式提取器,提取出请求中所有满足条件的数据
    • 添加ForEach控制器,配置提取所有满足条件的数据,并保存为变量
    • 在其子节点下,添加http请求并引用变量
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

JMeter定时器

同步定时器
常数吞吐定时器

同步定时器(Synchronizing Timer)【集合点】

  • 需要进行大量用户的并发测试时,为了让用户能真正的同时执行,添加同步定时器,用于阻塞线程,直到线程达到预先配置的数值,才开始执行取样器的操作
  • 配置:
    • 并发数:同时达到多少用户才开始发送请求
    • 超时时间:
      • 必须配置:否则当虚拟用户数无法被并发数整除时,就会有部分的用户挂起无法执行
      • 配置不能太短:必须比并发数加载的时间要长,否则不能达到并发数的要求,数据就会被释放
        在这里插入图片描述

常数吞吐量定时器

  • 模拟用户产生的业务压力,通过指定QPS来对服务器发送固定频率的请求
  • 添加:线程组–HTTP取样器–常数吞吐量定时器
    在这里插入图片描述

Jmeter 分布式

在这里插入图片描述

  • 应用场景
    • 当测试机无法模拟用户需要的业务负载量时,需要使用多台测试机配合使用
  • 原理
    • 分布式测试机分为一台控制机和多台代理机
    • 控制机负责发布测试任务给代理机
    • 代理机接收任务并向服务器发送请求,并接收服务器返回的响应,将测试结果返回给控制机
    • 由测试机对测试结果数据进行统计
  • 分布式相关注意事项
    • 所有的测试机防火墙都已经关闭
    • 所有的测试机及服务器在同一个网络内
    • 所有的测试机的Jmeter版本和java版本完全相同
    • 关闭Jmeter里的RMI SSL开关
  • 分布式配置
    • 代理机
      • server_port:不重复
      • 关闭RMI.SSL
    • 控制机
      • remote_server:所有代理机的IP+port,多台之间用逗号分隔
      • 关闭RMI.SSL
  • 运行
    • 代理机
      • jmeter-server.bat运行
    • 控制器
      • jmeter.bat运行
      • 控制代理机执行脚本:运行-远程启动所有
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值