Skip to content

JMeter

官网地址:JMeter

测试部分的接口使用:mall 项目

安装

下载地址:Download JMeter

测试计划

官方文档:Test Plan

一个测试计划表示一个测试项目会保持为一个 .jmx 文件。

可在测试计划中添加全局用户自定义变量。

支持通过 ${变量名} 进行取值。

函数和变量

Functions and Variables

变量

简单的变量取值方式为 ${name}name 为变量名称。 如果需要嵌套取值,则需要使用 V 函数,如:${__V($name1_$name2)} 表示通过先计算 $name1_$name2 再去取值。

对于数据包(如JSON提取时使用 -1)可通过如下后缀获取特殊值:

name_matchNr: 获取数据包的长度。 name_${index}: 获取指定位置的数据(1为第一条,${name_matchNr}为最后一条)。

线程(用户)

代表一定数量的用户,它可以用来模拟用户并发发送请求。

  • setUp 线程组:setUp Thread Group
  • tearDown 线程组:tearDown Thread Group
  • 线程组:Thread_Group, 定义了将针对您的服务器执行特定测试用例的用户池。 在线程组 GUI 中,您可以控制模拟的用户数量(线程数量)、启动时间(启动所有线程所需的时间)、执行测试的次数以及可选的启动时间并停止测试时间。
    • 线程数:要启动的线程数。
    • Ramp-Up 时间(秒):在多少时间内发送完配置的线程数,每个线程启动的时间间隔为 线程数/Ramp-Up 时间
    • 循环次数:线程内配置的采样器要执行多少次,永久表示一直执行。
    • 调度器:支持配置线程的持续时间,当线程执行完成或者持续时间到达时都会结束线程,但是不会终止正在运行的采样器。
  • 开放模型线程组:JMeter 5.5 版本中引入的一个新特性,它允许用户创建具有可变负载的负载配置文件。 相较于传统的线程组,开放模型线程组提供了更多的灵活性和动态调整的能力。

取样器

官方文档:Samplers

取样器执行 JMeter 的实际工作。每个取样器(流量控制操作除外)都会生成一个或多个取样结果。 示例结果具有各种属性(成功/失败、经过的时间、数据大小等),并且可以在各种侦听器中查看。

HTTP 请求

发送一次 HTTP 请求。HTTP Request

基本配置

  • 参数:URL 查询参数,对于包含空格参数,可☑️编码选项。
BeanShell 取样器。

该采样器允许您使用 BeanShell 脚本语言编写采样器。

JDBC Request

该取样器可以将 JDBC 请求(SQL 查询)发送到数据库。JDBC Request

配置说明

  • Variable Name of Pool declared in JDBC Connection Configuration:在JDBC连接配置中声明的池的变量名。
  • Parameter values:使用逗号分割的用于填充 SQL 语句中的 ?
  • Parameter types:使用逗号分割的数据库类型,Types
  • Variable names:对应输出结构的每一列,使用英文逗号分割 ,
    • name_#:获取行数。
    • name_index:获取指定 index 行的名为 name 的列数据。
  • Result valuable name:JMeter 变量的名称,该变量将结果集对象存储在映射列表中,以便根据列名查找结果。
    可在 BeanShell 取样器中使用 vars 读取: vars.getObject("resultObject").get(0).get("Column Name");
  • Query timeout(S):设置查询超时时间(以秒为单位),空值表示 0,即无限。 -1 表示不设置任何用例可能需要的查询超时或当某些驱动程序不支持超时时。默认为 0。
  • Limit ResultSet:限制迭代 ResultSet 的行数。空值表示-1,例如没有限制,这也是默认的。这有助于减少通过 JDBC 驱动程序从数据库获取的数据量,但会分别影响 Handle ResultSet 的所有可能选项。
Java 请求

该采样器允许您控制实现 org.apache.jmeter.protocol.java.sampler.JavaSamplerClient 接口的 Java 类。 通过编写您自己的该接口的实现,您可以使用 JMeter 来利用多线程、输入参数控制和数据收集。Java Request

其它

监听器

监听器可添加在任何位置。

查看结果数

展示取样器的结果,如 JSON、HTML、Text。

配置元件

进行一些而外的配置,比如设置请求头,Cookie 等。

计数器

可记录循环的次数。

逻辑控制器。

条件判断,循环控制等。

后置处理器

JSON 提取器

使用 JSONPath 语法提取变量。参考:jsonpath

  • Name of created variables:提取到变量之后创建的变量名。】
  • JSON Path expressions:JSONPath 表达式
  • Match No.(0 for Random):要提前的位置,-1:表示提前所有,0:表示随机
  • Compute concatentation var (suffix _ALL)
  • Defalus Value:没有匹配到的默认值。

正则表达式提取器

使用正则表达式提取变量。参考: 官方文档Regex 101

  • 引用名称:要提取的变量。
  • 正则表达式:正则表达式,不支持命名组,只能通过索引提取,至少需要一个匹配组()
  • 模板:变量的值,使用$正则表达式匹配组索引$提取匹配的值。
  • 匹配数字:一个正则表达式能匹配多次,要选中匹配的哪一项,0表示随机。
  • 缺省值:没有匹配到的默认值。

断言

断言是测试必不可少的一部分,用于判断用例是否通过。

需要添加断言结果监听器查看断言的结果。

JSON 断言

通过 jsonpath 判断返回类似为 JSON 的接口是否符合预期。 可选设置预期判断 jsonpath 匹配值是否和预期结果一致。

响应断言

断言返回类型为 text/html 的接口是否符合预期。

BeanShell 断言

编写脚本代码实现断言功能。 修改变量 Failure 的值为 true 表示断言通过,false 表示失败。 FailureMessage 表示失败的信息。

使用

修改语言

  • 临时修改:通过 Options -> Select Language 修改
  • 永久修改:通过修改 jmeter.properties 配置文件中的 language 即可,eg:language=zh_CN

发送 application/x-www-form-urlencoded 请求

  1. 通过使用 HTTP 信息头管理器配置 Content-Typeapplication/x-www-form-urlencoded
  2. 配置消息体数据,格式为 key=value&key=value...

使用 CSV 进行参数化

csv
name,age
wen,23
li,22
  1. 添加循环控制器,设置循环次数,或者设置为永远
  2. 添加配置元件:CSV 数据文件设置。
  3. 选中创建的 CSV 文件(相对位置是当前 jmx 文件位置),选中文件编码,可以不用手动指定变量名。
  4. 如果不需要重复执行,修改“遇到文件结束符再次循环”修改为 False,“遇到文件结束符停止线程”修改为 True。
  5. 添加需要的操作

连接数据库

  1. 下载 JDBC 数据库连接驱动,可取官网或者 Maven 仓库下载。
  2. 然后放到 lib/ext 目录下,也就是插件目录。
  3. 重启 JMeter。
  4. 添加配置元件:JDBC Connection Configuration。
    1. 配置数据库连接池变量名:Variable Name for create pool,如 db_mysql
    2. 配置数据库连接 URL,驱动,用户名和密码。
  5. 添加 JDBC Request
    1. 配置数据库连接池名称为上面配置的 db_mysql
    2. 具体查看上面的:JDBC Request

跨线程共享变量

  1. 勾选测试计划,独立每个线程组,使得一个线程组结束后再启动下一个
  2. 在 BeanShell 后置处理器使用 setProperty 设置属性值。
  3. 在 BeanShell 前置处理器中使用 property 读取属性值。

插件

存放在 lib/ext 目录下。

下载 JMeter Plugin Manager 插件,用来下载其它插件。