性能测试之Jmeter元件

1.性能测试的本质

性能测试的定义

  • 基于协议模拟用户发请求,对服务器形成一定的负载,来测试服务器的性能指标是否满足用户(产品&公司)的需求。

关注点

  • 时间性能
  • 空间性能

与界面无关

2.性能测试分类

负载测试

  • 在需要测试的系统上面,不断施加压力,一直到性能指标达到极限。如:响应时间超过预定指标。如:CPU超过预定的指标。如:内存超过预定指标。

性能测试

  • 特定的状态下,测试系统的状态。如:特定的时间中午12左右。晚上10点左右。

压力测试

  • 被测试的系统在一定的饱和状态下。如:CPU,内存和使用情况下。系统能够处理的能力,以及系统是否会出现BUG或者缺陷。

并发测试

  • 模拟用户访问,多用户并发访问(或同一时间段)同一个系统(同一模块)是否出现性能问题。

可靠性测试

  • 系统加载到一定的压力下,持续运行一段时间,以此测试系统的稳定性。

3.性能测试指标

  • 响应时间
  • 并发(并发数,并发用户数)
  • TPS(每秒处理通过的事物数)
  • 吞吐量/吞吐率(事务/s, Kb/s)
  • 资源利用率: cpu利用率(不允许超过80%;队列长度),内存利用率(80%;页交换频率),带宽利用率

PS:具体的还是按照公司的性能测试指标去做的,因为每家公司的指标都不一样,SO这里我就不多做解释了!!!

4.性能测试工具

  • loadrunner

    • 特点
      1.工业化的性能测试工具,能支持大量用户,提供详细的报表来提供测试分析的数据
      2.支持的协议多
      3.使用c语言来编写的

    • 优点
      1.支持用户量大(以万为单位)
      2.提供精确的报表
      3.支持IP欺骗

    • 缺点
      1.收费
      2.体积大
      3.无法控制

  • jmeter
    • 优点
      1.开源免费
      2.体积小
      3.有丰富的第三方插件

    • 缺点
      1.不支持IP欺骗
      2.报表的精度比loadrunner差

jmeter元件及基本作用域

  • 基本元件

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

    • 核心: 根据测试计划中的树形结果的福子节点来确定的
    • 原则
    • 取样器是没有作用域的
    • 逻辑控制器: 只针对其子节点下的所有元件有效
  • 其他元件

    • 如果其父节点是取样器,只针对父节点(取样器)有效

    • 如果其父节点是非取样器,针对父节点下的所有子节点及节点的子节点有效

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

jmeter线程组的特点

  • 介绍: 通过配置线程组中的线程数来模拟用户. 线程数是用户数,线程组就是用户组

  • 特点:

    • 模拟多用户
    • 取样器和逻辑控制器必须在线程组下使用
    • 一个测试计划可以添加多个线程组,他们可以并行或者串行执行
      • 并行: 默认情况下线程组为并行执行
      • 串行: 在测试计划下勾选"独立运行每个线程组"
  • 线程组的分类

    • 线程组: 用于执行业务测试的脚本
    • SetUp线程组: 测试前的预处理操作,在所有的线程组中最先执行
    • TearDown线程组: 测试后的后置处理(恢复环境,数据)的操作,在所有的线程组中最后执行
  • 线程组参数详解

    • 线程数: 模拟虚拟用户数
    • Ramp-up时间: 虚拟用户启动所需要的时间(性能测试)
    • 循环次数:
      • 配置指定次数: 控制脚本循环执行次数
      • 配置循环永久
        1.需要调度器配合使用
        2.运行时间: 脚本执行时间
        3.延迟启动时间: 脚本等待特定的时间才能开始运行
  • 线程数m和循环次数n的关系

    • 如果同时配置,实际发送的HTTP请求数应该为m * n
    • 虽然发送请求次数相同,但不能相互替换
      1.线程数: 代表并发用户数,提现服务器的负载量
      2.循环次数: 代表执行时间

jmeter取样器

  • HTTP请求(取样器):

    • http协议: 可以填写为HTTP或者HTTPS,莫特热闹不填写时为HTTP协议
    • http主机名/IP
    • 端口(http用80,https用443): 可以填任意值,默认不填写时为80端口
    • 请求方法: HTTP协议支持的所有方法
    • 路径: 目录+参数
    • 编码格式: 默认IOS国际标准,推荐使用utf-8
  • 察看结果树(监听器)

    • 取样器结果: 统计请求相关信息
    • 请求: HTTP请求的请求头和请求体的详细信息
    • 响应: HTTP响应的响应头和响应体的详细信息
  • http请求默认值(配置元件)

    • 测试类似API或网址时可以设置公用的参数
  • http信息头管理器(配置元件)

    • 用于新增数据,往数据库添加新的数据
    • 点击’添加’: 名称 Content-Type; 值 application/json:charset=utf-8

jmeter响应中文乱码的处理

  1. 修改jmeter.properties文件中,sampleresult.default.encoding=utf-8
  2. .重启jmeter

Jmeter参数化

  • JMeter参数化常用方式

    • 用户定义的变量
    • 用户参数
    • CSV Data Set Config
    • 函数
  • 用户定义的变量(作用域不同)
    • 方式1:

      • 添加: 线程组 -> 配置元件 -> 用户定义的变量
      • 配置: 参数名 + 参数值
      • 使用: 在HTTP请求的取样器中引用定义的变量. ${参数名}
    • 方式2:
      • 配置: 在测试计划中配置用户定义的变量
      • 使用: 在HTTP请求的取样器中引用定义的变量. ${参数名}
    • 用户参数
      • 添加: 线程组 -> 前置处理器 -> 用户参数
      • 配置:
        • 参数: 添加变量
        • 参数值: 添加用户 – 针对每个用户配置不同的参数值
        • 使用: 在HTTP请求的取样器中引用定义的变量. ${参数名}
      • CSV数据文件配置
        • 添加: 线程组 -> 配置文件 -> CSV数据文件设置
        • 编写CSV数据文件(.csv作为后缀)
          • 多个参数写为多列,其中用逗号分割
          • 多组参数值,则使用多行来设置
        • 配置:
          • 文件名: 填写CSV文件的路径,建议使用相对路径
          • 文件编码: UTF-8
          • 变量名称: 从CSV数据文件中读取的数据需要保存的变量名,有多个变量时用逗号分隔
          • 是否忽略首行: 是否从CSV数据文件第一行开始读取
          • 分隔符: 要求与CSV数据文件中多列的分隔符一致
          • 遇到文件结束符是否再次循环: 默认TRUE
          • 遇到文件结束符是否停止线程: 当前一个参数为FALSE,该参数有效,一般设置为TRUE
        • 函数
          • counter:

            • TRUE: 每个用户使用独立的计数器
            • FALSE: 所有用户使用全局的计数器
            • 引用: 在取样器中使用${__counter(FALSE,)}来引用对应的值
            • 应用场景: 当需要参数化的数据只有唯一性要求,但是对具体的参数值无明确要求时,建议使用函数方式
          • random:
            • 随机数函数: 生成用户名称
          • time
            • 生成一组数字: 时间戳–19700000到现在的时间换算成毫秒
            • 在函数助手可设置固定的时间戳: Format string for SimpleDateFormat (optional):yyyy-MM-dd hh:mm:ss

JMeter断言

  • 作用: 让脚本自动化执行的过程中,能够自动的判定执行结果是否正确,需要添加断言
  • 常用断言类型
    • 响应断言
    • JSON断言
    • 持续时间断言
    • 大小断言
  • 响应断言
    • 添加: 线程组 -> HTTP请求 -> 断言 -> 响应断言
    • 配置:
      • 测试字段: 需要检查的字段
      • 模式匹配规则: 需要使用什么规则来进行检查且, 或者, 非
      • 测试模式: 需要校验的值
      • 填写多个值
  • JSON断言
    • 添加: 线程组 -> HTTP请求 -> 断言 -> JSON
    • 适用于返回的HTTP响应为JSON格式
    • 配置
      • JSON PATH: $.weather.city
      • 勾选"Additional assert value"
      • 在expected value里填写期望值
    • 断言持续
      • 适用于性能测试时候,检查HTTP请求响应时间是否超过预期
      • 添加: 线程组 -> HTTP请求 -> 断言 -> 断言持续时间
      • 配置: 预期时间
    • 大小断言
      • 响应代码: 比如200 代表2,0,0三个字符,需要写3,不能写200

关联和提取器

  • 当多个请求之间有依赖关系,后一个请求的参数需要使用前一个请求的相应数据时,需要用到关联
  • 分类: 正则表达式提取器;xpath提取器;JSON提取器
  • 正则表达式:
    • 添加: 线程组 - HTTP请求 - 后置处理器 -正则表达式
    • 配置:
      • 要检查的响应字段: 默认主体
      • 引用名称: 匹配后的数据要存储的变量名
      • 正则表达式: (.*?) ()里是要保存的数据
      • 模板: 111
        • 数字1代表上面正则表达式中第几个()
      • 匹配数据: 0代表随机值, 1代表第一个结果, -1代表所有结果
      • 缺省值: 当没有匹配上时将该值保存到变量里
    • 引用:
      • 如果匹配数字为1,则直接使用变量名来使用: $(变量名)
      • 如果匹配数字为-1,则使用变量名+后置的方式来引用: $(变量名_s)
    • Xpath提取器
    • 添加: 线程组 – HTTP请求 – 后置处理器 – xpath提取器
    • 配置
      • 引用名称: 匹配后的数据要存储的变量名
      • xpath_xpath: xpath匹配规则
      • 匹配数字: 1代表第一个结果, -1代表所有结果, 0表示随机
      • 缺省值: 当没有匹配上时将改制保存到变量里
    • JSON提取器
      • 添加: 线程组 – HTTP请求 – 后置处理器 – JSON提取器
      • 配置
        • 引用名称: 匹配后的数据要存储的变量名
        • JSON path: json路径. $.weatherinfo.city
      • 引用: 直接引用变量名即可
    • 跨越线程组传值(线程组1,线程组2)
      • 在线程组1里: 点击函数助手–选取函数setProperty – 设置参数(属性名称(该函数名称),Value of property(${其他提供的属性名称})) – 生成,复制
      • 在线程组1里: 取样器 – BeanShell取样器 – 粘贴
      • 在线程组2里: 函数助手 – property --属性名称(该函数名称) – 生成,复制
      • 在线程组2里: 放到用到的地方

JMeter直连数据库

  • 连接准备

    • 打开数据库,确定数据库的表及对应的字段
    • 加载mysql的jdbc驱动
      • 将jdbc驱动通过测试计划,浏览的方式添加
      • 将jdbc驱动jar包放入到lib\ext目录下,并重启jmeter
    • 配置jdbc connection configuration
      • created pool name: 给连接池命名,用于后续引用
      • 数据库url: jdbc:mysql://127.0.0.1:3306/tpshop2.0
      • 用户名
      • 密码
    • 直连数据库使用:
      • 添加JDBC Request: 在取样器下添加
      • 配置
        • 配置连接池的名称
        • 配置SQL语句
        • 配置保存的变量名
        • 如果SQL语句返回了多个参数,输入相同个数的变量名来保存
      • HTTP断言中,就可以引用变量来进行判断

JMeter逻辑控制器

  • 控制元件的执行顺序

    • IF控制器
    • 添加: 线程组 – 逻辑控制器 – if控制器
      • 配置:

        • 使用JS语法: “${name}” == “百度”
        • 使用JMeter函数的方式: KaTeX parse error: Expected group after '_' at position 2: {_̲_jexl3("{name}" == ‘baidu’,)}
        • 推荐使用函数方式
      • 循环控制器
        • 指定HTTP请求执行特定的次数
        • 添加: 线程组 – 逻辑控制器 – 循环控制器
        • 配置: 指定次数
        • 循环控制器中的循环次数配置m与线程组中的循环次数配置n对比:
          • 关系: 如果同时配置,循环控制器下HTTP请求实际的执行次数应该是m*n
          • 区别: 这两个循环次数作用域不同
            • 线程组的循环次数针对整个测试计划
            • 循环控制器的循环系数只做用于循环控制器下的请求
      • ForEach控制器
        • 与用户定义的变量或者与正则表达式提取器配合使用,循环读取返回的变量中的值,执行一次或者多次
        • 与用户定义的变量配合使用
        • 添加: 线程组 – 逻辑控制器 – ForEach控制器
        • 配置:
        • 用户定义的变量
          • 变量名: 固定前缀+连续数字
        • ForEach控制器
          • 变量的前缀: 用户定义的变量中配置的固定前缀
          • 起始数字: 连续数字的最小值-1
          • 结束数字: 连续数字的最大值
          • 输出的变量名称: 依次读取变量值后存储到参数中,供HTTP请求来引用
        • HTTP请求
          • 引用输出的变量名称
          • 与正则表达式配合使用
          • 先通过正则表达式提取器,提取出请求中所有满足条件的数据
          • 添加ForEach控制器,并配置提取所有满足条件的数据,并保存为变量
          • 在其子节点下,添加HTTP请求并引用变量,即可循环读取正则表达式中匹配的所有数据

JMeter定时器

  • 同步定时器[集合点(loadrunner)]高并发

    • 当需要进行大量用户的并发测试时,为了让用户能真正的同时执行,添加同步定时器,用户阻塞线程,直到线程数达到预先配置的数值,才开始执行取样器的操作
    • 配置:
      • 模拟用户组的数量(并发数): 同时达到多少用户才开始发送请求
      • 超时时间:
        • 必须配置: 否则当虚拟用户数无法被并发数整除时,就会有部分的用户挂起无法执行
        • 配置不能太短: 必须比并发数加载的时间要长.否则无法达到并发数的要求,数据就会被释放掉
      • 常数吞吐定时器(高频率)
        • 用于性能测试时模拟用户产生的业务压力,通过指定QPS来对服务器发送固定频率的请求
        • 添加: 线程组 – HTTP取样器 – 常数吞吐量定时器
        • 配置: 吞吐量的值: QPS * 60

JMeter分布式

  • 应用场景: 当测试机无法模拟用户需要的业务负载时,需要使用多台测试机配合使用
  • 原理:
    • 分布式测试时分为一台控制机和多台代理机
    • 控制机负责发布测试任务给代理机
    • 代理机接受任务并向服务器发送请求,并接受服务器返回的响应,然后将测试结果返回给控制机
    • 由控制机对测试结果数据进行汇总统计
  • 注意事项:
    • 所有的测试机防火墙都已经关闭
    • 所有的测试机及服务器在同一个网络内
    • 所有的测试机的JMeter版本和JDK版本完全相同
    • 关闭JMeter里的RMI.SSL开关
  • 分布式配置:
    • 配置:

      • 代理机:
      • server_port: 不重复.如果使用多台机器做代理机,可不用配置
      • 关闭RMI.SSL
    • 控制机
      • emote_server: 所有代理机的IP+port,有多台代理机时用逗号分隔
      • 关闭RMI.SSL
    • 运行
      • 代理机: jmeter-server.bat运行
      • 控制机:
      • jmeter.bat运行
      • 控制代理机执行脚本: 运行 - 远程启动所有

Jmeter报告

  • 生成HTML报告

    • 在cmd中输入

      • jmeter -n -t 脚本文件 -l 日志文件 -e -o 目录
      • -n: 无图形化运行
      • -t: 被运行的脚本
      • -l: 将运行信息写入日志文件(日志文件必须为空或者不存在)
      • -e: 生成测试报告
      • -o: 指定报告输出目录(目录不存在或者为空)
    • jmeter -n -t xxx.jmx -l xxx.jtl

    • jmeter -g xxx.jtl -o [空文件夹]

    • 参数解析

      • -n:非GUI模式执行JMeter
      • -t: 执行测试文件所在的位置
      • -l: 指定生产测试结果的保存文件, jtl文件格式
      • -e: 测试结束后,生成测试报告
      • -o: 指定测试报告的存放位置
      • -g: 指定已存在的测试结果文件
  • 聚合报告

    • Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
    • Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
    • Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间
    • Median:中位数,也就是 50% 用户的响应时间
    • 90% Line:90% 用户的响应时间
    • Min:最小响应时间
    • Max:最大响应时间
    • Error%:本次测试中出现错误的请求的数量/请求的总数
    • Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
    • KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec
    • Label: 请求的名称,就是我们在进行测试的httprequest sampler的名称
    • Samples:总共发给服务器的请求数量,如果模拟10个用户,每个用户迭代10次,那么总的请求数为:10*10 =100次;
    • Average:默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间 ,单位是毫秒
    • Median: 50%用户的请求的响应时间,中位数

      PS:下篇文章再讲 loadrunner 吧。今天眼睛有点疼了

性能测试之Jmeter元件相关推荐

  1. 性能测试之JMeter配置元件【HTTP信息头管理器】

    JMeter提供了丰富的配置元件,常用的包括参数化配置元件.HTTP请求默认值.HTTP信息头管理器.计数器等,这些配置元件用于设置默认值和变量,提供给后面的sampler(取样器)使用. 提示:本文 ...

  2. 性能测试之JMeter配置元件【计数器】

    1.计数器介绍 如果需要引用的数据量较大,且要求不能重复或者需要自增,那么可以使用计数器组件来实现. 计数器组件中的数据,允许在一个线程组之内都可以被引用. 2.计数器界面详解 添加计数器组件的操作: ...

  3. 性能测试之JMeter配置元件【随机变量】

    1.随机变量介绍 随机变量应用场景:在一些数据要求不重复,或者对数据取值需要正态分布的时候,我们可以采用随机变量组件来满足需求. 随机变量与用户自定义变量的区别: 随机变量(random variab ...

  4. 性能测试之JMeter函数助手详解

    1.函数助手介绍 在性能测试过程中,为了模拟真实的用户,往往我们需要让提交的表单内容每次都发生变化,这个过程叫做参数化. JMeter中的配置元件与前置处理器都能帮助我们实现参数化,为了能够更好的帮助 ...

  5. jmeter 线程执行顺序_性能测试之jmeter逻辑控制种类详解一

    逻辑控制器介绍 Jmeter逻辑控制可以对元件的执行逻辑进行控制,除Once only Controller仅一次控制器以外,其他控制器都可以可以嵌套其他种类的控制器,下面是jmeter5.3支持的控 ...

  6. 性能测试之JMeter主页面布局

    在介绍JMeter主页面布局的菜单栏和图标之前,我们可以把语言切换为简体中文,如下图所示: JMeter的主界面布局分为标题栏.菜单栏.工具栏.树形标签栏和内容栏,如下图所示: 接下来我们来逐一说明. ...

  7. 性能测试之JMeter取样器详解:sampler

    1.取样器介绍 取样器是用来模拟用户操作的,向服务器发送请求以及接收服务器的响应数据. 取样器是在线程组内部的元件,也就是说取样器只能在线程组中添加. 取样器(Sampler)是性能测试中向服务器发送 ...

  8. 性能测试之JMeter测试结果写入Excel

    在使用JMeter进行测试的过程中,有时候需要将测试结果写入到Excel文件,本篇文章将详细说明具体步骤. 把测试结果写入Excel文件中操作思路分析: (1)准备需要的环境 引入操作Excel文件的 ...

  9. 性能测试之Jmeter 中 CSV 如何参数化测试数据并实现自动断言

    当我们使用Jmeter工具进行接口测试,可利用CSV Data Set Config配置元件,对测试数据进行参数化,循环读取csv文档中每一行测试用例数据,来实现接口自动化.此种情况下,很多测试工程师 ...

最新文章

  1. Pinpoint 插件开发
  2. wdlinux 安装apc扩展
  3. Qt5应用改变窗口大小时出现黑影
  4. Linux内核中ioremap映射的透彻理解
  5. 2016年全国计算机技术与软件,2016年的上半年的全国计算机技术与软件专业技术资格(水平)考.doc...
  6. lisp 读取dwg 统计信息_预制梁厂 BIM 技术和自动化、信息化应用方案
  7. 间接寻址级别不同_被遗忘的利息税,国债与存款的利率区别,同大额存单的4点大不同...
  8. 全面解析Oracle等待事件的分类、发现及优化
  9. MLN Alchemy
  10. Eprime error number 1234 :unable to load sound 203
  11. SpringData JPA(一)——什么是SpringData JPA
  12. 关于计算机固态硬盘正确的是,如何对固态硬盘进行初始化?选择合适的格式及分区结构很重要...
  13. 用latex写英文论文
  14. androidのBack返回键,home键,menu键监听使用
  15. Freebase调研(持续更新中)
  16. protobuf中repeated类型变量与C++ vector类型变量的相互赋值方法
  17. mysql如何导入生僻字_MySQL插入生僻字失败的处理方法(图)
  18. 嘿!大三了怎么找到对象?膜拜!
  19. egg.js 使用笔记
  20. 东北师范大学计算机大一操作题,东北师范大学计算机应用基础答案

热门文章

  1. 3DAOI原理及编程手册(1)——工作原理
  2. python小制作 tkinter 简单音乐播放器
  3. Blender Python API中文介绍文档四
  4. java 爬取 flash 里面的数据
  5. 中兴zxr10路由器重启命令_中兴ZXR10系列路由交换机用户、命令行手册
  6. 某些荒谬的传统是如何形成的
  7. 嵌入式工程师的现状,有人月薪3千,有人年薪快80万
  8. 九阳股份有“喜”有“忧”,是豆浆机不好卖了,还是小家电不行了?
  9. 压铸模具的失效形式与模具设计要点
  10. 【SEUSE】编译原理 - 词法分析器