接口性能测试工具 - JMeter

1. 下载和运行

JMeter 是由 Java 语言编写的, 因此 JMeter 的使用依赖于 Java 环境 - JRE.

前往 oracle 网管下载 JMeter 压缩包.

Mac 用户解压完成后, 在包内的 bin 目录下运行 sh jmeter:

Windows 用户直接运行 bin 目录下的 jmeter.bat:

即可进入 JMeter 主页面:

1.1 添加环境变量

上面的方法虽可以打开 JMeter, 但是过程比较繁琐(需要手动打开 bin 目录). 如果我们把 bin 目录添加至系统环境变量, 那我们就可以直接在终端运行 jmeter 命令, 即可打开 JMeter.

步骤(macOS):

  1. vim 编辑器打开配置文件:

    bash 复制代码
    vim ~/.zshrc
  2. 在编辑器中, 按 i 键进入"插入模式"(Insert Mode)

  3. 在文件的末尾, 添加下面这行代码. 记得替换为自己的 JMeter bin 目录路径:

    bash 复制代码
    # JMeter Environment Variable
    export JMETER_HOME="/Users/shybee/apache-jmeter-5.5"
    export PATH="$JMETER_HOME/bin:$PATH"
  4. 按 Esc 键退出插入模式

  5. 输入 :wq 然后按回车, 保存文件并退出 vim 编辑器

  6. 关闭当前的终端窗口, 然后重新打开一个新的(让配置立即生效)

  7. 验证配置是否成功

这样, 我们可直接在终端输入 jmeter 命令, 运行 JMeter:

配置语言为简体中文(修改 bin 目录下的 jmeter.properties 文件):

配置编码为 utf-8(修改 bin 目录下的 jmeter.properties 文件):

修改配置后, 重启 JMeter, 配置生效.

2. 配置 HTTP 请求

2.1 创建线程组

  1. 在测试计划下, 创建线程组:
  2. 在线程组中进行配置

上述配置, 在 "循环次数" 没有勾选 "永远", 表示指定循环次数.

如果勾选 "永远", 那么必须打开 "调度器" 并配置 "持续时间", 表示在 n 秒内, x 个虚拟用户不断的发起请求, 但是具体多少次请求是未知的.

2.2 配置 HTTP 请求

首先在线程组下创建 HTTP 请求:

然后进行数据配置:

需要注意的是, 填写路径时, 最开始一定要加上斜杠 "/"

此外: 该 POST 请求的数据为 Json 格式, 除了上图选择 "消息体数据" 写入数据外, 我们该需额外的在请求的 header 中配置 Content-Type 为 application/json(需配置 HTTP 信息头管理器, 下文会讲):

(将 HTTP 信息头管理器建立在 博客登录接口 下, 那么这个信息头管理器, 只对这一个接口生效)

2.3 配置查看结果树

添加查看结果树:

添加完结果树后, 点击运行, 便可发送所配置的所有请求:

注意: 上图是将结果树配置于线程组下, 即: 与所有接口同级, 那么这个结果树会查询到该线程组下所有的请求和响应信息.

如果想获取单一接口的请求结果, 那就可以把结果树添加在指定的接口下:

2.4 配置 header 信息 - 信息头管理器

大多数请求的 header 中, 都会携带用户身份验证信息(如: cookie, token 令牌), 如果不携带这些信息, 则请求无法发出.

拿博客系统举例, 当用户登录成功后, 前端会把 "loginUserToken" 存储到浏览器的 localStorage 中, 当用户再次发送请求时(如获取博客列表接口), 前端就会把这个 token 放在请求的 header 中, 供后端进行校验, 若后端发现请求中携带 token 且值正确, 就正确返回响应. 若请求的 header 中未携带 token, 则被拦截器拦截, 进行强制登录操作.

使用 postman 访问接口举例.

不携带 token:

携带 token:

因此, 我们在使用 JMeter 发送请求时, 也要对 header 进行相应的配置, 否则请求根本无法发送成功:

因为只有 获取博客列表接口 需要 token 信息, 而登录接口并不需要, 因此, 为了使得这个配置了 token 的信息头管理器只对 获取博客列表接口 生效, 我们只需将它建立在 获取博客列表接口 下即可:

配置完成后, 请求便可发送成功:

2.5 HTTP 请求默认值

对于同一个项目, 存在许多重复的配置, 如: URL 中的协议类型/IP/端口号.

对于这些重复的配置, 我们就可以创建一个 "HTTP 请求默认值", 将重复的部分管理起来, 这样就不需要每创建一个接口 都填写这些重复信息了:

发送请求时, "HTTP 请求默认值" 中的信息, 就会拼接到 URL 中:

因此, 当多个接口发起请求时存在多个重复的 HTTP 配置, 我们就可以将这些重复的配置提取出来, 放到 "HTTP 请求默认值" 中, 后续的 HTTP 取样器(接口请求) 中, 就无需再添加这些配置, 发起请求时会读取 "HTTP 请求默认值" 中的配置并进行拼接.

但是, 配置的读取遵循 "就近原则", 只有当接口请求中没有配置时, 才会从读取 "HTTP 请求默认值" 中读取, 若接口请求中配置了, 则读取接口请求中的数据.

2.6 提取请求返回值 - JSON 提取器

在开发中, 一个请求的返回值作为另一个请求的参数, 是很常见的时间, 比如: 获取博客列表请求的 header 中, 需要携带 登录请求 返回的 user_token 信息; 获取博客详情请求的参数, 需要携带 获取博客列表请求 的 bolg_id.

此时, 我们就可以使用 Json 提取器, 获取某个请求的响应中 Json 格式的 body 中的信息.

要提取 Json 格式的数据, 我们需要先了解 Json 操作符.

2.6.1 Json 操作符

获取 Json 数据, 需要用到 Json 操作符:

|-----------------------------------|-------------------------|
| Operator | Description |
| $ | 表示根元素 |
| @ | 当前元素 |
| * | 通配符。所有节点 |
| .. | 选择所有符合条件的节点 |
| .<name> | 子元素 |
| ['<name>' (, '<name>')] | 括号表示子元素或子元素列表 |
| [<number> (, <number>)] | 数组索引或索引列表 |
| [start:end] | 数组切片操作符 |
| [?(<expression>)] | 过滤器表达式。表达式必须评估为布尔值。 |

获取响应 body 中指定字段时, 通常使用: $..字段名

若该字段有多个, 要获取第一个, 则用: $..[0]字段名

如, 获取 body 中所有的 id 字段(先选择 JSON Path Tester):

获取 body 中第一个 id 字段:

2.6.2 配置 Json 提取器

在需要提取返回值的请求下, 添加一个 Json 提取器. 例如, 我们需要提取登录接口请求返回的 user_token 数据, 则在 登录接口请求 下建立一个 Json 提取器:

使用 Json Path Tester 进行测试, 可知该 token 数据可用 $..token 表示:

注意: 使用提取出的变量, 需要通过 ${变量名} 进行使用:

这样, 在其他请求发送时, 就会携带 登录接口 返回的 token 字段:

除了上述提取登录请求的返回值外, 也可以提取博客列表请求的返回值, 作为博客详情页请求的参数:

2.7 JSON 断言

判断一个请求的结果是否符合预期, 不仅仅是查看状态码, 而是要查看响应的数据是否正确, 此时就需要用到 JSON 断言.

对断言进行配置:

若请求结果符合断言, 则请求成功, 若请求结果不符合断言, 则请求失败:

常用正则表达式:

  • /d 匹配数字
  • /S 匹配非空字符

未完待续

相关推荐
zzc9211 小时前
Wireshark获取数据传输的码元速率
网络·测试工具·wifi·wireshark·路由器·802.11n·物理层参数
甄超锋1 天前
python sqlite3模块
jvm·数据库·python·测试工具·django·sqlite·flask
zzc9212 天前
TLSv1.2协议与TCP/UDP协议传输数据内容差异
网络·测试工具·安全·wireshark·ssl·密钥·tlsv1.2
Jinkxs2 天前
告别“测试滞后”:AI实时测试工具在敏捷开发中的落地经验
人工智能·测试工具·敏捷流程
秃了也弱了。3 天前
WireShark:非常好用的网络抓包工具
网络·测试工具·wireshark
敲上瘾3 天前
Linux系统cgroups资源精细化控制基础
linux·测试工具·docker·压力测试·cgroups
曾经的三心草3 天前
微服务的编程测评系统11-jmeter-redis-竞赛列表
redis·jmeter·微服务
天才测试猿3 天前
常见的Jmeter压测问题
自动化测试·软件测试·python·测试工具·jmeter·职场和发展·压力测试
张永清-老清4 天前
《JMeter核心技术、性能测试与性能分析》 教学大纲及标准
jmeter·性能优化