使用JMeter(组件详细介绍+使用方式及步骤)
JSON操作符
在我们使用请求时,经常会遇到JSON格式的请求体,所以在介绍组件之前我会将介绍部分操作符,在进行操作时是很重要的
Operator | Description |
$ | 表示根元素 |
@ | 当前元素 |
* | 通配符,所有节点 |
.. | 选择所有符合条件的节点 |
.name | 子元素,name是子元素名称 |
[start:end] | 数组切片操作符 |
[?(<expression>)] | 过滤器表达式,表达式要评估为布尔值 |
重要组件
在了解组件之前,我们要先了解,在JMeter中,元件的作用域以及执行顺序
作用域: 主要由测试计划的树形结构中的元件父子关系来确定
执行顺序:
-
取样器中的元件内组件不依赖其他元件就可以执行,所以取样器不存在作用问题
-
元件的作用域只对它的子节点有作用
-
其他作用域默认根据测试计划中树形结构来决定
所以对于当进行测试时,如果出现了问题,在检查完请求体以及各项信息之后还有问题,那就可以检查一下组件的顺序
线程组
用来控制JMeter中要用来执行测试的线程数,也可以把一个线程理解为一个测试用户
HTTP取样器
用来设置 http 请求
如果我们要满足中文,可以在内容编码出填写 utf-8
查看结果树
用来查看请求的结果以及请求和响应的详细信息
HTTP Cookie管理器
添加了 HTTP Cookie管理器 之后,就会自动存储并发送Cookie
可以像Web浏览器一样存储和发送Cookie,如果http请求中有Cookie,并会用来进行特定网址的请求
添加之后,就会自动获取cookie并添加入请求,并不需要额外的配置
HTTP 请求默认值
我们可以将所有请求的公共部分填在一起,之后进行每次请求的时候就会获取默认值
一般是填写: 协议、IP、端口号
继承这些默认值的请求就无需再填写对应的内容
用户定义的变量
有时我们只想在固定的场景下使用参数,并且改动后不希望影响其他的脚本
需要结合json操作符
使用方法: 在 HTTP 请求的取样器中引入定义的变量 ${参数名}
使用场景: 变量需要在多个脚本中使用,方便进行统一管理和修改,尤其是多个请求的变量都是同一变量时,就可以进行统一管理
JSON断言
接口发送请求成功,响应码为200(就是自己设置的请求成功的响应码)并不能完全代表接口请求成功,此时就需要关注接口响应数据是否符合预期
-
针对某一HTTP请求接口添加JSON断言
-
添加JSON配置: 和JSON提取器语法配置相同
具体设置:
-
不选 Additionally assert value ,表示添加断言值,只会用来判断字段是否存在,不会对字段的值进行匹配
-
选择 Additionally assert value ,表示必须添加 Expected Value 期望的断言值,如果此时没有勾选 Match as regular expression ,就会进行完整政正则匹配,即获得内容要和设置内容完全一致
-
如果选择 Additionally assert value ,并且选 Match as regular expression 正则匹配,则Expected Value 只需要填写部分关键词就行,类似于模糊查询
其中正则表达式需要我们进行了解,我将对一些常见的正则表达符号进行介绍
字符 | 描述 |
[……] | 匹配括号内的所有字符 |
[^……] | 匹配除了括号内的所有字符 |
[A-Z] | 匹配所有大写字母 |
[a-z] | 匹配所有小写字母 |
. | 匹配除换行符之外的任何单个字符 |
\s | 匹配所有空白符 |
\S | 匹配所有非空白符,不包括换行 |
\w | 匹配字母、字母、下划线 |
\d | 匹配任意一个阿拉伯数字 |
更多详细可以查看网页: https://www.runoob.com/regexp/regexp-syntax.html
JSON提取器
接口相应成功后,通过提取返回值对应的字段,可以用于其他接口的参数配置,尤其是 token
那我们要怎么获取对应信息呢?这里也要我们结合json操作符
假设以下是我的json字段
{"code": 200,"data": null,"message": "æ\u0088\u0090å\u008A\u009F"
}
那么此时我要使用 code ,要怎么获取呢?
这里我们查询到了之后,就要去JSON提取器中设置了
配置完成之后,我们就要去 HTTP请求 中进行使用了
然后点击运行,我们就可以看到请求中带入了设置的JSON字段了
CSV数据文件设置 (CSV Data Set Config)
在实际使用中,对于一个接口,我们不可能一直只有一个用户会使用这个接口,更多时候是若干个用户同时使用,那么如果我们只测试一个账号,就会有很多问题无法完全体现,为了更加真实的模拟正常情况,我们就需要同时使用多个用户,这里就需要我们使用 数据文件设置了
在使用之前,我们先来了解这些配置
遇到文件结束符再次循环: 若选择为 true ,当数据不够时就会从头开始重新取; 若选择为 false ,就需要勾选后续的配置,遇到文件结束符就会停止线程(不勾选就会报错)
那么我们要怎么编写 csv文件 呢? 使用 Excel ,编写表格完成之后保存为 .csv 文件
修改配置
修改完之后,当我们发送请求,程序就可以从 csv文件 中获取参数(从上往下依次获取)
同时,因为我们添加了多组数据,我们就需要修改线程数,一个线程用来对应一组数据
只有这样才能保证每次获得的数组不一样
运行结果
同步定时器(集合点)
我们虽然定义了多个线程,但是我们怎么能保证他们是同一时间进行呢?怎么保证线程不是一个一个进行呢?
我们可以通过右上角的三角符号查看线程的运行顺序,这里还可以查看运行时间以及未完成的线程个数
如果我们要让这些线程同时运行,就需要使用同步定时器
在使用之前,我们也要来查看它的配置
需要注意的是: 模拟用户组的数量是不能超过线程组里配置的线程数
在实际运行中, 当进行等待的 进程数>=设置数 时,就直接发送请求,我们举个例子:
在等红绿灯的时候,如果规定一个路口最多能经过5个行人,但是实际情况确是,你不知道什么时候能够到达5个人,还很有可能在到达5个人的时候,同时还达到了6个人,此时已经达到了经过条件,那么也是可以通过路口的
所以 当配置的数量小于线程数时,最好把循环打开,避免最后一次状态为准备好的线程数量达不到进行并发的数量
事务控制器
主要是用来进行测试执行嵌套测试元素所花费的时间,用来模拟用户进行一系列操作的测试
可以更好的测试复杂环境
在没有添加事务控制器之前,一个接口就是一个事务
添加之后,就可以将多个接口放在一起表示一个业务
举例:
从这些测试结果中,我们要怎么来看具体性能怎么样呢?
指标 | 对应 | 说明 |
Sample | 样本数 | 发起的HTTP请求调用数 |
Average | 平均值 | 平均响应时间,单位为毫秒 |
Median | 中位数 | 请求调用响应时间的中间值,也就是50%请求调用的响应时间,单位为毫秒 |
90%Line | 90%百分位 | 90%请求调用的响应时间,单位为毫秒 |
95%Line | 95%百分位 | 95%请求调用的响应时间,单位为毫秒 |
99%Line | 99%百分位 | 99%请求调用的响应时间,单位为毫秒 |
Min | 最小值 | 请求调用的最小响应时间,单位为毫秒 |
Max | 最大值 | 请求调用的最大响应时间,单位为毫秒 |
Error% | 异常% | 调用失败的请求占比,调用失败一般指响应断言失败或者请求调用出错 |
Throughput | 吞吐量 | TPS/QPS 每秒处理的事务数 |
KB/sec | 接收/发送 | 每秒网络传输的流量大小,单位为KB,这个指标是以网络传输的大小来衡量网络的吞吐量 |
插件
在真实情况下,我们经常需要一点一点的增加线程数,所以需要一些插件
在这之前,我们要为JMeter添加能够添加插件的功能
https://jmeter-plugins.org/install/Install/
下载完之后,放入 自己下载的JMeter文件下的lib/ext路径下 ,然后重启JMeter
重启之后,右上角就多了一个图标
点击,对以下常用插件进行下载
点击右下角下载,下载完成之后会自动重启
下载完成之后,就可以在线程和监听器中看到新的元件
Stepping Thread Group
让我们举一个例子
表示,总共有30个进程,从零开始,每一秒有5个进程做好准备,一组准备好之后,等三秒进行下一组准备,等线程数达到30之后,线程开始运行,并保持运行60秒就开始结束,一次结束5个线程,每隔1秒就会结束5个线程
Response Times Over Time
在测试过程中,它可以帮助测试人员观察并分析响应时间的实时平均值以及整体响应时间的走向。通过这一监听器,测试人员能够更直观地了解系统在不同时间点的响应性能,从而发现可能存在的性能问题或瓶颈。
横坐标通常代表运行时间,而纵坐标则代表响应时间(单位是毫秒)。测试人员可以根据图形中的趋势线来判断响应时间的稳定性以及是否存在大的波动。例如,如果响应时间在某个时间点突然增加,这可能意味着系统在该时间点遇到了性能问题。
Transactions per Second (TPS)
TPS监听器是一个用于分析系统吞吐量的重要工具。TPS,即每秒事务数,表示一个客户和向服务器发送请求后服务器做出反应的过程。这个指标反映了系统在同一时间内处理业务的最大能力。TPS值越高,说明系统的处理能力越强。
在使用TPS监听器时,横坐标通常代表运行时间,而纵坐标则代表TPS值。通过监听器展示的图表,可以清晰地看到TPS值随时间的变化情况。在图表中,红色通常表示通过的TPS,而绿色可能表示失败的TPS。这有助于我们快速识别系统性能的变化和瓶颈。
测试报告
JMeter的测试报告是一个非常详细的文档,它提供了测试执行结果的详细信息
我们需要在控制台使用对应指令来生成报告
jmeter -n -t 脚本文件名(加后缀) -l 日志文件名 -e -o 目录(被保存的地方)-n : 无图形化运行(后台运行,不需要打开JMeter运行)
-t : 被运行的脚本
-l : 将运行信息写入日志文件,后缀必须要为 jtl 的日志文件
-e : 生成日志报告
-o : 指定报告的输出目录
注意: 日志文件和目录可以不存在,若为已经存在的情况下需要保证内容为空,否则会出现错误
打开 index.html ,就可以看到测试报告了
相关文章:

使用JMeter(组件详细介绍+使用方式及步骤)
JSON操作符 在我们使用请求时,经常会遇到JSON格式的请求体,所以在介绍组件之前我会将介绍部分操作符,在进行操作时是很重要的 Operator Description $ 表示根元素 当前元素 * 通配符,所有节点 .. 选择所有符合条件的节点 .name 子元素,name是子元素名称 [start:e…...

lamp平台的应用
一.lamp介绍 网站: 静态网站 动态网站 【php语言 .php结尾的文件】 作用:运行php语言编写的动态网站应用 lamp LinuxApache【负责解析静态资源】MySQL【负责存储网站产生的数据】PHP【负责解析动态资源】 如上图所示,是lamp平台中三…...

蓝桥杯4T平台(串口打印电压值)
知识点:串口(单片机发送数据)按键ADC 题目 配置 代码 adc.c uint16_t getadc2(void) {uint16_t adc0;HAL_ADC_Start(&hadc2);adcHAL_ADC_GetValue(&hadc2);return adc; } adc.h uint16_t getadc2(void); main.c #include "lcd.h" #include…...
使用ASIWebPageRequest库编写Objective-C下载器程序
使用 ASIWebPageRequest 库编写 Objective-C 下载器程序是一个简单且高效的方式来处理 HTTP 请求。在 ASIHTTPRequest 和 ASIWebPageRequest 中,ASIWebPageRequest 是专门用于下载网页及其资源的库。 1. 安装 ASIWebPageRequest 首先,你需要安装 ASIHT…...
代码随想录算法训练营 | 图论 | 孤岛总面积、沉没孤岛
101. 孤岛的总面积//思路大概是先计算面积,然后如果有接触路面就返回false。可能稍微多余算了太多无用面积。 #include<bits/stdc.h> using namespace std; void sum(vector<vector<bool>>& finded,const vector<vector<int>>&a…...
迷你世界脚本出生点接口:Spawnport
出生点接口:Spawnport 彼得兔 更新时间: 2023-04-26 10:19:56 具体函数名及描述如下: 序号 函数名 函数描述 1 getSpawnPoint(...) 获取默认出生点 2 setSpawnPoint(...) 设置出生点位置 3 getChunkValidSpawnPos(...) 获取区块有效刷新点…...

双链路提升网络传输的可靠性扩展可用带宽
为了提升网络传输的可靠性或增加网络可用带宽, 通常使用双链路冗余备份或者双链路聚合的方式。 本文介绍几种双链路网络通信的案例。 5GWiFi冗余传输 双Socket绑定不同网络接口:通过Android的ConnectivityManager绑定5G蜂窝网络和WiFi的Socket连接&…...

Pytest测试用例执行跳过的3种方式
文章目录 1.前言2.使用 pytest.mark.skip 标记无条件跳过3.使用 pytest.mark.skipif 标记根据条件跳过4. 执行pytest.skip()方法跳过测试用例 1.前言 在实际场景中,我们可能某条测试用例没写完,代码执行时会报错,或者是在一些条件下不让某些…...

【蓝桥杯】每天一题,理解逻辑(3/90)【Leetcode 快乐数】
闲话系列:每日一题,秃头有我,Hello!!!!!,我是IF‘Maxue,欢迎大佬们来参观我写的蓝桥杯系列,我好久没有更新博客了,因为up猪我寒假用自己的劳动换了…...
深度学习Save Best、Early Stop
一、Save Best 今天的大模型,在训练过程中可能会终止,但是模型其实是可以接着练的,假设GPU挂了,可以接着训练,在原有的权重上,训练其实就是更新w,如果前面对w进行了存档,那么可以从…...
数据库与存储优化
一、MySQL深度优化 索引优化 B树索引结构 结构特点: 平衡多路搜索树,所有数据存储在叶子节点,非叶子节点仅存键值和指针。叶子节点通过双向链表连接,支持范围查询高效遍历。 优势: 减少磁盘IO(高扇出&#…...

Android15请求动态申请存储权限完整示例
效果: 1.修改AndroidManifest.xml增加如下内容: <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-perm...

C/C++蓝桥杯算法真题打卡(Day3)
一、P8598 [蓝桥杯 2013 省 AB] 错误票据 - 洛谷 算法代码: #include<bits/stdc.h> using namespace std;int main() {int N;cin >> N; // 读取数据行数unordered_map<int, int> idCount; // 用于统计每个ID出现的次数vector<int> ids; …...

【数据结构与算法】Java描述:第二节:LinkedList 链表
一、链表的概念与结构 1.1 概念: 通俗的来说,链表是由一个个结点连接起来的就叫链表。 1.2 结构: 链表存储的数据 在 物理上是不一定连续的,它是由前面链接后面,一个个连起来的。 二、Java底层的 LinkedList 2.1…...

LLM run
lmstudio lmstudio ollama ollama N 卡使用自带UI gpu加速推理 ,选择满足条件的, ds模型选择列表 https://ollama.com/library/deepseek-r1 a卡当前支持的显卡型号 I卡 gpu加速配置 2025.3 intel Official project optimization https://www.modelscope.cn/m…...

k8s面试题总结(十)
1.为什么HDFS不适合存储小文件? 元数据存储在NameNode内存中,一个节点的内存是有限的。存储大量的小文件会消耗过多的寻道时间 同等大小一个大文件的访问速度一定比多个小文件访问速度快 3.NameNode存储block的数量是有限的 比如你一个block元数据需要消…...
android中activity1和activity2中接收定时消息
android中activity1和activity2中接收定时消息 业务类 import java.util.Timer; import java.util.TimerTask;public class MyAnager {private MyAnager() {}private static MyAnager instance;//回调接口onRecvTaskpublic interface OnMsgListener {void onRecvTask(String a…...

Non-Homophilic Graph Pre-Training and Prompt Learning
Non-Homophilic Graph Pre-Training and Prompt Learning KDD25 #paper/⭐# 目的:对异配图进行prompt 方法 邻居节点的综合嵌入 s v 1 ∣ V ( S v ) ∣ ∑ u ∈ V ( S v ) h u ⋅ s i m ( h u , h v ) , \mathbf{s}_{v}\frac{1}{|V(S_{v})|}\su…...

Ollama 框架本地部署教程:开源定制,为AI 项目打造专属解决方案!
Ollama 是一款开源的本地大语言模型(LLM)运行框架,用于管理和运行语言模型。具有以下核心特点: 开源可定制:采用 MIT 开源协议,开发者能自由使用、阅读源码并定制,可根据自身需求进行功能扩展和…...
unittest框架 核心知识的系统复习及与pytest的对比
1. unittest 介绍 是什么:Python 标准库自带的单元测试框架,遵循 xUnit 架构(类似Java的JUnit)。 核心概念: TestCase:测试用例的基类,所有测试类需继承它。 TestSuite:测试套件&a…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...

FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...