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 编辑器打开配置文件:
    vim ~/.zshrc
  2. 在编辑器中, 按 i 键进入“插入模式”(Insert Mode)
  3. 在文件的末尾, 添加下面这行代码. 记得替换为自己的 JMeter bin 目录路径:
    # 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 操作符:

OperatorDescription
$表示根元素
@当前元素
*通配符。所有节点
..选择所有符合条件的节点
.<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 匹配非空字符

未完待续

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/93942.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93942.shtml
英文地址,请注明出处:http://en.pswp.cn/web/93942.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go语言实战案例-数据库事务处理

在实际业务中&#xff0c;很多操作需要保证 要么全部成功&#xff0c;要么全部失败&#xff0c;否则可能造成数据不一致。比如&#xff1a;• 用户转账&#xff08;A 账户扣款&#xff0c;B 账户加款&#xff09;• 下单支付&#xff08;生成订单、扣减库存、记录支付&#xff…

为何vivo做了头显,小米却选择AI眼镜

在押注下一代智能终端这件事上&#xff0c;手机厂商为何步调不一致&#xff1f;文&#xff5c;游勇编&#xff5c;周路平在手机销量和创新都陷入停滞的背景下&#xff0c;主流手机厂商正在探索下一代交互终端&#xff0c;试图寻找新的增长点。今年6月&#xff0c;小米发布了AI眼…

Day24 目录遍历、双向链表、栈

day24 目录遍历、双向链表、栈显示指定目录下的所有 .h 文件 功能描述 遍历指定目录&#xff08;递归进入子目录&#xff09;&#xff0c;查找所有以 .h 为后缀的头文件&#xff0c;将其完整路径&#xff08;路径 文件名&#xff09;存储到双向链表中&#xff0c;并正向或反向…

JupyterLab 安装(python3.10)

目录 一、环境 二、安装 三、启动Jupyterlab 四、通过chrome浏览器进行访问 五、打开Jupyter Notebook 六、pandas验证 JupyterLab 是一个基于 Web 的交互式开发环境&#xff0c;是经典 Jupyter Notebook 的下一代版本。它支持多种编程语言&#xff08;如 Python、R、Juli…

【neo4j】安装使用教程

一、安装 1.0 前置条件 安装配置好jdk17及以上 注意我使用的是neo4j 5.26.10版本&#xff0c;匹配java17刚好 Java Archive Downloads - Java SE 17.0.12 and earlier 无脑安装即可 配置以下环境变量 1.1 安装程序 Neo4j Deployment Center - Graph Database & Anal…

AECS(国标ECALL GB 45672-2025)

车载紧急呼叫功能作为车辆遇险时的响应机制&#xff0c;为司机和乘客的安全营救提供通信支持。为了能够降低通信延迟&#xff0c;提高响应速度&#xff0c;基于4G/5G的下一代紧急呼叫技术&#xff08;NG eCall&#xff09;将在欧盟于2027年起成为强制标准&#xff0c;中国也已经…

week3-[循环嵌套]好数

week3-[循环嵌套]好数 题目描述 如果一个正整数 xxx 只有最左边一位不是 000&#xff0c;其余都是 000&#xff0c;那么称其为好数。例如 400040004000 和 222 都是好数&#xff0c;但是 120120120 不是。 给定正整数 nnn&#xff0c;在 111 到 nnn 间有多少个数是好数&#xf…

智能制造加速器:某新能源车智慧工厂无线网络优化提升方案

随着工业4.0和智能制造的快速发展&#xff0c;传统制造工厂的网络架构正面临前所未有的挑战。为了满足柔性生产、实时数据驱动以及高可靠运营的需求&#xff0c;某新能源车智慧工厂启动了一项无线网络优化提升项目。本项目通过部署智能组网设备&#xff0c;构建高效、稳定、智能…

nginx-自制证书实现

nginx-自制证书实现一、 确认nginx是支持https功能的二、生成私钥三、 根据ca.key生成nginx web服务器使用的证书签名请求文件nginx.csr四、使用ca.key给nginx.csr进行签名&#xff0c;生成公钥证书nginx.crt五、将证书与域名绑定六、添加域名解析并访问一、 确认nginx是支持ht…

FreeRTOS,事件标注组创建,xEventGroupCreate、xEventGroupCreateStatic

1. xEventGroupCreate ()&#xff1a;动态创建&#xff08;临时借内存&#xff09; 作用&#xff1a; 向系统&#xff08;FreeRTOS 的堆内存&#xff09;“临时申请” 一块内存来存放事件组&#xff0c;不需要我们自己提前准备内存。 例子&#xff08;基于你的代码修改&#xf…

Linux网络socket套接字(上)

目录 前言 1.Socket编程准备 1.理解源IP地址和目的IP地址 2.认识端口号 3.socket源来 4.传输层的典型代表 5.网络字节序 6.socket编程接口 2.Socket编程UDP 1.服务端创建套接字 2.服务端绑定 3.运行服务器 4.客户端访问服务器 5.测试 6.补充参考内容 总结 前言…

RK android14 Setting一级菜单IR遥控器无法聚焦问题解决方法

文章目录 前言 一、问题分析 1.1. 布局文件分析 1.2. Java代码 二、解决方法 2.1.移除冲突的滚动标志 2.2.解决有问题的初始化调用 2.3.完整补丁 前言 在Android系统Settings应用(packages/apps/Settings)的首页(SettingsHomepageActivity)中,存在一个 accessibility (无…

iOS 手势与控件事件冲突解决清单

总结一份「iOS 手势与控件事件冲突解决清单」&#xff0c;以后你遇到 UIButton / UITableView / UIScrollView 被手势拦截就能快速排查了&#xff1a;&#x1f4cc; iOS 手势与控件事件冲突常见解决办法1️⃣ cancelsTouchesInView&#x1f449; 最常用&#xff0c;决定手势识别…

笔试——Day45

文章目录第一题题目思路代码第二题题目思路代码第三题题目思路代码第一题 题目 kanan和高音 思路 双指针遍历数组&#xff0c;更新左右端点并计算最大值 代码 #include<iostream> #include<vector> using namespace std;int main() {int n; cin >> n;vect…

nnDetection网络结构分析

基于 RetinaNet 框架扩展&#xff0c;核心用于处理 3D 体积数据&#xff08;如医学影像 CT/MRI&#xff09;&#xff0c;通过 “Encoder-Decoder-Head” 架构实现多任务学习。以下从整体框架、核心模块细节、技术特点、应用场景四个维度展开分析。一、整体框架概览首先通过表格…

Torch -- 卷积学习day4 -- 完整项目流程

完整项目流程总结1. 环境准备与依赖导入import time import os import numpy as np import pandas as pd import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms from torch.utils.data import Dat…

MTK Linux DRM分析(七)- KMS drm_plane.c

一、简介在 Linux DRM&#xff08;Direct Rendering Manager&#xff09;子系统中&#xff0c;Plane&#xff08;平面&#xff09;代表了一个图像源&#xff0c;可以在扫描输出过程中与 CRTC 混合或叠加显示。每个 Plane 从 drm_framebuffer 中获取输入数据&#xff0c;并负责图…

OpenHarmony之 蓝牙子系统全栈剖析:从协议栈到芯片适配的端到端实践(大合集)

1. 系统架构概述 OpenHarmony蓝牙系统采用分层架构设计&#xff0c;基于HDF&#xff08;Hardware Driver Foundation&#xff09;驱动框架和系统能力管理&#xff08;System Ability&#xff09;机制实现。 1.1 架构层次 ┌─────────────────────────…

探索 Ultralytics YOLOv8标记图片

1、下载YOLOv8模型文件 下载地址&#xff1a;https://docs.ultralytics.com/zh/models/yolov8/#performance-metrics 2、编写python脚本 aaa.py import cv2 import numpy as np from ultralytics import YOLO import matplotlib.pyplot as pltdef plot_detection(image, box…

Matplotlib数据可视化实战:Matplotlib子图布局与管理入门

Matplotlib多子图布局实战 学习目标 通过本课程的学习&#xff0c;学员将掌握如何在Matplotlib中创建和管理多个子图&#xff0c;了解子图布局的基本原理和调整方法&#xff0c;能够有效地展示多个数据集&#xff0c;提升数据可视化的效果。 相关知识点 Matplotlib子图 学习内容…