Jmeter 接口测试工具入门

1)Jmeter 介绍

  • JMeter是一款 JAVA 桌面应用程序,常常被用来做接口测试、负载测试等等

  • JMeter是一款开源测试工具:

    1. 开源免费软件,不需要任何使用费用
    2. 小巧绿色,相比LoadRunner的庞大,它非常小巧并且不需要安装(需要安装 JDK)
    3. 功能强大,设计之初只是一个简单的性能测试工具,经过无数次更新已变得非常强大

2)Jmeter 下载安装

1、Jmeter 下载

  • Jmeter 安装包下载(解压即可)

    链接:https://pan.baidu.com/s/1a6iIAYP55rfY4fmdtraOnA
    提取码:fapd

2、JDK 安装

      • JDK 安装包下载(内含安装教程)

        链接:https://pan.baidu.com/s/1-W5fpN4vSPRxkPMdVe6xrw
        提取码:hgh4

3、Jmeter 运行

  • Jmeter 启动相当简单,双击 bin 目录下的jmeter.bat文件即可

3)Jmeter 功能说明

1、接口测试- 示例

  • 新建线程组 => 右键测试计划 => 添加 => 添加 => 线程(用户) => 线程组

    1. 线程数:模拟用户请求线程数(单接口用默认值1即可)
    2. Ramp-Up时间(秒):启动设定线程数在设定时间内启动(单接口用默认值1即可)
    3. 循环次数:可勾选永远或指定循环次数(单接口用默认值1即可)
  • 新建Http请求 => 添加 => 取样器 => Http 请求
  1. 名称:接口名称
  2. 协议:Http 、 HTTPS
  3. 服务器名称或 IP : 请求服务器域名或 IP 地址
  4. 端口号:XXXX(默认端口 80 可以省略)
  5. 方法:GET、POST 等等
  6. 路径:(接口地址名称)
  7. 内容编码:UTF-8(支持中文)
  8. 参数:添加行参数
  9. 消息体数据:JSON 格式数据等
  10. 文件上传:测试接口带有文件(文本文件、图片文件等)

2、测试计划

  • Test Plan (测试计划):用来描述一次接口测试或性能测试相关内容,也就说测试的所有内容是于基于计划完成的

3、线程组

  • Thread Group(线程组):线程组中的每个线程都是一个虚拟用户,线程组中包含的线程数量在测试执行过程中不会发生改变

  • 线程组位置:右键测试计划 => 线程(用户) => 线程组

    1. 线程数:模拟用户请求线程数(即虚拟用户数)

    2. Ramp-Up时间(秒):启动设定线程数在设定时间内启动,立即启动可设置0

    3. 循环次数:每个线程执行次数,可勾选永远或指定循环次数

4、取样器

  • Sampler(取样器):取样器是接口测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元,Jmeter 支持特别多取样器:如 HTTP 请求、FTP 请求、JAVA 请求等等,在这里只介绍 HTTP Request(HTTP 请求),如需要了解更多,请自行百度

  • 取样器位置:右键线程组 => 添加 => 取样器 => Http 请求

    1. 名称:接口名称
    2. 协议:Http 、 HTTPS
    3. 服务器名称或 IP : 请求服务器域名或 IP 地址
    4. 端口号:XXXX(默认端口 80 可以省略)
    5. 方法:GET、POST 等等
    6. 路径:(接口地址名称)
    7. 内容编码:UTF-8(支持中文)
    8. 参数:添加行参数
    9. 消息体数据:JSON 格式数据等文件上传:测试接口带有文件(文本文件、图片文件等)
    10. 文件上传:测试接口带有文件(文本文件、图片文件等)

5、逻辑控制器

  • Logic Controller(逻辑控制器):逻辑控制器对其子节点的取样器有效,作用是控制取样器的执行顺序,Jmeter 总数有 17 种逻辑控制器,功能各不相同,但是大概可以分为 2 种类型

  • 第一种类型:控制测试计划节点的执行顺序 (如果(if)控制器、While控制器等)

    如果(if)控制器 - 示例

    1. 如果(if)控制器:如需要对不同的条件做不同的操作,我们可以使用(if)控制器来实现

    2. 条件格式:${__jexl3(条件表达式)}:表达式可使用Jmeter 函数助手(参见12、函数助手)

    3. 完成需求:如果登录接口返回参数errno = 0,执行用户信息接口,否则不执行

实现步骤(已知登录接口返回 JSON 数据):

第一步:右键登录接口 => 后置处理器 => JSON 提取器

第二步:点击“选项”=> 函数助手 => 选择函数“__jexl3”=>引用变量名“login_judge”

获得函数:${__jexl3(${login_judge},)}

最终函数:${__jexl3(${login_judge}==0,)}(判断的条件为字符串需要加"")

第三步:在(if)控制器下添加用户信息接口

While 控制器 - 示例

    1. While 控制器 :一直循环执行子节点内容,直到条件为False(假)

    2. Condition 条件如下:

      1、为空:直到请求失败退出循环

      2、LAST:直到最后一个请求失败退出循环

      3、其他:条件值为False,退出循环

    3. While 控制器 - 示例:登录判断 errno != 0,退出循环

  • 第二种类型:统计执行结果以及进行脚本的运行时控制(吞吐量控制器、事务控制器等)

吞吐量控制器 - 示例

    1. 吞吐量控制器:它跟吞吐量没有任何关系

    2. 两种执行方式:设置百分比行和设置线程数控制执行执行次数

6、前置处理器

  • Pre Processors(前置处理器):前置处理器用于在实际的请求发出之前,对发出的请求进行特殊处理,Jmeter 提供了 8 种(这里不一一说明,主要说明用户参数)

    用户参数 - 示例

    1. 添加变量:添加用户参数,支持多参数
    2. 添加用户:添加参数使用用户,支持多用户
    3. 每次迭代更新一次:勾选后,每次运行都要重新获取参数(针对使用随机函数)

7、后置处理器

  • Post Processors(后置处理器):后置处理器是用于对取样器发出请求后得到的服务器响应进行处理,一般用来提取响应中的特定数据,Jmeter 提供了 11 种(这里不一一说明,主要说明 Json 提取器与正则表达式提取器)

    Json 提取器 - 示例

    1. 如下 JSON 代码:提取 authToken 的值

      {
          "errno": 0,
          "data": {
              "authToken": "37f95bc40fb0ccb0be4e922655d4660b"
          },
          "errmsg": "登录成功"
      }
    2. 位置:添加 => 后置处理器 => Json 提取器

    3. 引用变量:${authToken}
  • 正则表达式 提取器 - 示例(可以提取任何格式数据,这以JSON数据为例)
  1. 如下 JSON 代码:提取 authToken 的值

    {
        "errno": 0,
        "data": {
            "authToken": "37f95bc40fb0ccb0be4e922655d4660b"
        },
        "errmsg": "登录成功"
    }
  2. 位置:添加 => 后置处理器 => 正则表达式提取器

8、断言

  • Assertions(断言)一般用来设置检查点,用于检测实际数据是否符合预期,Jmeter 总数有13 种断言(这里不一一说明,主要说明:响应断言与 JSON 断言)

    响应断言 - 示例

    1. 如下 JSON 代码:断言 errno = 0 为接口成功,反之接口失败

      {
          "errno": 0,
          "data": {
              "authToken": "37f95bc40fb0ccb0be4e922655d4660b"
          },
          "errmsg": "登录成功"
      }
    2. 位置:添加 => 断言 => 响应断言
  • JSON 断言 - 示例
  1. 如下 JSON 代码:断言 errno = 0 为接口成功,反之接口失败

  2. 位置:添加 => 断言 => JSON 断言

9、定时器

  • Timer(定时器)用于操作之间设置等待时间,也就是我们常说的思考时间,Jmeter 有9 种定时器(这里不一一说明,主要说固定定时器、高斯随机定时器)

  • 定时器作用域:定时器是在每个取样器之前执行,如果希望定时器仅应用于其中一个取样器,则在其子节点中加入,定时器的延时不会计入取样器的响应时间

    固定定时器 - 示例

    1. 固定定时器:登录请求延迟1000毫秒执行

    2. 位置:添加 => 定时器 => 固定定时器

高斯随机定时器 - 示例

    1. 高斯随机定时器:要求随机时间在200毫秒~300毫秒之间

    2. 位置:添加 => 定时器 => 高斯随机定时器

10、配置元件

  • Config Element(配置原件),用于提供对各种数据支持,Jmeter 有19种配置原件(这里不一一说明,主要说明 CSV 数据文件设置、HTTP 信息头管理器、HTTP 请求默认值、用户自定义变量)

    CSV 数据文件设置 - 示例

    1. CSV 数据文件设置:

    2. 位置:添加 => 配置元件 => CSV 数据文件设置

    3. 准备 CSV 格式数据

    4. 配置 CSV 数据
    5. 引用 CSV 数据:

HTTP 信息头管理器 - 示例

  1. HTTP 信息头管理器:

  2. 位置:添加 => 配置元件 => HTTP 信息头管理器

  3. 执行后结果:

用户自定义变量 - 示例

  1. 用户自定义变量:定义变量 phoneNumber = 18589236787

  2. 位置:添加 => 配置元件 => 用户自定义变量

  3. 引用自定义变量:

11、监听器

  • Listener(监听器),用于对测试结果数据处理和可视化展示的一系列元件,Jmeter 提供了16 种监听器(这里不一一说明,只讲解最常用察看结果树、聚合报告)

    察看结果树 - 示例

    1. 察看结果树:显示了每一个取样器的结果、请求信息和响应信息,可以分析接口是否存在问题

    2. 位置:添加 => 监听器 => 察看结果树

聚合报告 - 示例

    1. 聚合报告:对于每个请求统计响应信息并提供请求数、平均值、最大、最小值、错误率、大约吞吐量、kb/秒为单位的吞吐量

    2. 位置:添加 => 监听器 => 聚合报告

    3. 报告内容分析:

1、Label:请求名称

2、#Samples:总线程数 = 线程数 * 循环次数

3、Average:单个请求的平均响应时间 = 总运行时间 / 发送到服务器的总请求数

4、Median、90%line、95%line、99%line:分别代表50%的用户响应时间、90%的用户响应时间、95%的用户响应时间、99%的用户响应时间(90%line是性能测试重要的一个衡量指标)

5、Min:最小响应时间

6、Max:最大响应时间

7、Error%:错误率 = 发生错误的请求 / 总请求数

8、Throughput:吞吐量,表示每秒完成的请求数

9、KB/sec:每秒发送的千字节为单位测量数据

12、函数助手

  • 函数助手对话框(Ctrl + Shift + F1),可以参照一定的规则生成数据函数,Jmeter 支持的函数特别多(不一一说明,主要说明随机数、当前时间、唯一ID)

    随机数函数 - 示例

    1. 随机数函数:可按照一定规则生成需要的随机数
    2. 位置:选项 => 函数助手对话框 => 随机数函数 => __Random()

当前时间函数 - 示例

  1. 随机数函数:可按照一定规则生成时间函数
  2. 位置:选项 => 函数助手对话框 => 随机数函数 => __time()
    1. 时间格式说明:

      1、${__time(yyyy-MM-dd HH:mm:ss:SSS,time)} :格式化生成时间格式 2100-01-01 11:08:23:635

      2、${__time(yyyy-MM-dd HH:mm:ss,time)} :格式化生成时间格式 2100-01-01 11:08:23

      3、${__time(yyyy-MM-dd,time)} :格式化生成时间格式 2100-01-01

      4、${__time(,)}:默认该公式精确到毫秒级别, 13位数 1527822855323

唯一ID函数 - 示例

唯一ID函数:可按照一定规则生成需要的唯一表示

位置:选项 => 函数助手对话框 => 随机数函数 => __UUID()

posted @ 2023-08-20 20:37  乐瓜乐虫  阅读(134)  评论(0编辑  收藏  举报