jMeter学习
一. JMeter介绍
1. 什么是JMeter?
Apache JMeter™ 应用程序是开源软件,一个 100% 纯 Java 应用程序,旨在加载测试功能行为和测量性能 。它最初是为测试 Web 应用程序而设计的,但后来扩展到其他测试功能。
2. JMeter能做啥?
         Apache JMeter 可用于测试静态和动态资源、Web 动态应用程序的性能。
         它可用于模拟服务器、服务器组、网络或对象上的重负载,以测试其强度或分析不同负载类型下的整体性能。      
Apache JMeter 功能包括:
- 能够加载和性能测试许多不同的应用程序/服务器/协议类型: 
- Web - HTTP、HTTPS(Java、NodeJS、PHP、ASP.NET,...)
 - SOAP / REST Web 服务
 - FTP
 - 通过 JDBC 的数据库
 - LDAP
 - 通过 JMS 的面向消息的中间件 (MOM)
 - 邮件 - SMTP(S)、POP3(S) 和 IMAP(S)
 - 本机命令或 shell 脚本
 - TCP
 - Java 对象
 
 - 功能齐全的测试 IDE,允许快速记录测试计划(从浏览器或本机应用程序)、构建和调试。
 - CLI 模式(命令行模式(以前称为 Non GUI)/无头模式) 可从任何 Java 兼容操作系统(Linux、Windows、Mac OSX 等)进行负载测试
 - 完整且 可随时呈现的动态 HTML 报告
 - 能轻松从最流行的响应格式 HTML 、 JSON 、 XML 或 任何文本格式 中提取数据
 - 完全的可移植性和 100% Java 纯度。
 - 完整的多线程框架允许多个线程同时采样和不同线程组同时采样不同功能。
 - 缓存和离线分析/重放测试结果。
 - 高度可扩展的核心: 
- 可插拔采样器允许无限的测试能力。
 - 可编写脚本的采样器(与 Groovy 和 BeanShell 等 JSR223 兼容的语言)
 - 可以使用 可插入计时器 选择几个负载统计信息。
 - 数据分析和 可视化插件 允许很好的可扩展性和个性化。
 - 函数可用于为测试提供动态输入或提供数据操作。
 - 通过 Maven、Gradle 和 Jenkins 的 3 rd方开源库轻松实现持续集成。
 
 
3. 下载Apache JMeter
下载地址:Apache JMeter - Download Apache JMeter

安装要求:·
- JMeter是基于jdk运行的,因此要先安装java,java8或更高版本
 - JMeter默认以1GB的堆运行(可通过修改配置文件进行调整)
 
解压后,目录结构:

Jmeter bin目录文件讲解
- jmeter.bat:: Windows启动文件
 - jmeter:Mac或者linux启动文件
 - jmeter-server:Mac或者Liunx分布式压测使用的启动文件
 - jmeter-server.bat::Windows分布式压测使用的启动文件
 - jmeter.properties::配置文件
 
4. 运行JMeter
要运行 JMeter,请运行 jmeter.bat(对于 Windows)或 jmeter(对于 Unix)文件。这些文件位于 bin 目录中。执行后,会出现JMeter GUI。
GUI 模式只能用于创建测试脚本,CLI 模式(非 GUI)必须用于负载测试
5. 中文设置
方式一:控制台修改(临时性显示为中文,下次在打开Jmeter还是默认显示问英文):菜单栏 -> options -> choose language -> Chinese(Simplified)

方式二:配置文件修改(永久性显示问中文样式):Jmeter的安装目录-> bin目录 -> jmeter.properties文件-> 使用记事本打开-> #language=en修改为language=zh_CN
二、核心组件
1. 测试计划
测试计划是使用JMeter进行测试的起点,它是其它JMeter测试 元件的容器。

2. 线程组
       线程数:模拟用户并发数(虚拟用户数)。一个虚拟用户占用一个进程或线程。
     Ramp-Up时间(秒):设置的虚拟用户数需要多长时间全部启动。如果线程数为10 ,准备时长为20 ,那么需要20秒钟启动10个线程。也就是每2秒钟启动1个线程。
     循环次数:每个线程发送请求的次数。如果线程数为10 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为10*100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。


3. 取样器(Sampler)
模拟各种请求。所有实际的测试任务都由取样器承担,存在很多种请求。如:HTTP 、ftp请求等等。
4. 监听器
负责收集测试结果,同时也被告知了结果显示的方式。功能是对取样器的请求结果显示、统计一些数据(吞吐量、KB/S……)等。

5. 逻辑控制器
允许自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
6. 断言
6.1 响应断言
用于来判断请求响应的结果是否如用户所期望,是否正确。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。


Apply to:指定断言作用范围。关于应用范围,我们大多数勾选“main sample only” 就足够了,因为我们一个请求,实质上只有一个请求。但是当我们发一个请求时,可以触发多个服务器请求,就有main sample 和 sub-sample之分了。
         Main sample and sub-samples:匹配范围包括当前父取样器并覆盖至子取样器
         Main sampie only:匹配范围是当前父取样器
         Sub-samples only:仅匹配子取样器
         JMeter Variable Name to use:支持对JMeter变量值进行匹配
         测试字段:针对响应数据的不同部分进行匹配
                 ①响应文本:响应服务器返回的文本内容
②响应代码:匹配响应代码,比如返回代码“200”表示成功
③响应信息:匹配响应信息,比如处理成功返回“成功”字样
④响应头:匹配响应中的头信息
⑤请求头:请求中的头信息
⑥URL样本:匹配URL链接
⑦文档(文本):对文档内容进行匹配
⑧忽略状态:当第一个断言失败时可以忽略
⑨请求数据:请求数据
        模式匹配规则:
                 ①包括:响应内容包括需要匹配的内容即代表响应成功
②匹配:响应内容要完全匹配需要匹配的内容即代表响应成功,不区分大小写,支持正则
③相等:响应内容要完全等于需要匹配的内容才代表响应成功,区分大小写,匹配内容是字符串非正则表达式
④字符串:响应内容包含需要匹配的内容才代表响应成功,区分大小写,匹配内容是字符串非正则表达式
⑤否:反转检查结果,用于表示不包含,不匹配,不等于,没有和模式字符串相匹配的字符串。若匹配成功则返回失败
⑥或者: 一个断言可以添加多个“要测试的模式”。使用OR选项后,只要其中有1个模式匹配,断言将会成功。不选择“OR”时将默认为AND选项,必须所有模式都匹配,断言才会成功。
测试模式:输入结果期望值(空格要去掉)。这里填写我们要进行断言的内容,可以添加多个模式,可以使用变量、文本、正则表达式(在“包括”和“匹配”模式下)。
6.2 JSON断言
JSON断言:书写格式为 $.msg
$表示根 也就是{
.表示子 也就是{下的元素
{"msg":成功,"state":b,"data":[{"name":"测试","age":"12"}]
} 
注释:需要勾选上Additionally assert value,并填写上需要断言的内容,否则只检测是否有msg这个属性,有就返回ture,不会对内容做判断
         若需要获取content,则修改为$.content (获取所有content)
若需要获取A的所有子类,则修改为$…A(获取所有的所有子类)
若只需要获取A的第二个子类,则修改为$…A[1],
当然也可以这样写:$.content.data.allCitySearchLabels.A[1].id,这样便能获取所有A类第二个的ID

6.3 XPath断言
        书写格式为 //a[@name =“tj_trnews”]
                     其中,//表示相对路径,a表示标签,[]里面放谓词,@name="tj_trnews"表示属性,多个属性用 and、or表示。如果查看结果树使用XPath Tester显示时,记得勾选上return entire XPath fragment instead of text content,否则结果会显示失败。
断言结果监听器: 线程组-> 添加 -> 监听器 -> 断言结果
                里面的内容是sampler采样器的名称
                断言失败,查看结果树任务结果颜色标红(通过结果数里面双击不通过的记录,可以看到错误信息)
7. 定时器
负责定义请求(线程)之间的延迟间隔,模拟对服务器的连续请求。

8. 配置元件
维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。

9. 前置处理器和后置处理器
负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。

三、实战使用
1. 新增测试计划

2. 新增线程组

3. HTTP请求
        web服务器:
             默认协议:http
             默认端口:80
             服务器名称或IP :请求的目标服务器名称或IP地址
             路径:服务器URL
             Use multipart/from-data:当发送POST请求时,使用Use multipart/from-data方法发送,默认不选中。(如服务器支持,不进行勾选也可以)


4. 新增监听器
对结果进行收集

以上一个简单的实例完成,更多的功能可以参考文档:
Apache JMeter™ | JMeter 官方帮助文档中文版 (xiniushu.com)
5. 其它
        5.1 执行顺序
                 jmeter测试计划脚本呈树形结构排列,元件的执行顺序是先执行根节点,再执行子节点。在同一层次中,各个元件的执行顺序逻辑:
- 配置元件
 - 前置处理器
 - 定时器
 - 取样器
 - 后置处理器
 - 断言
 - 监听器
 
        5.2 取样器(Sampler)
                 取样器执行jmeter的实际请求交互工作。Apache JMeter提供了一些案例:https://jmeter.apache.org/usermanual/component_reference
http取样器
 1.testplan -> add -> threads->thread g roup
 2.thread group -> add-> Sampler -> http reqeust (填入参数)
 3.thread group -> add ->listener -> view results tree
 4.http request -> add ->assertions -> response assertion
 5.view results tree -> start
相关文章:
jMeter学习
一. JMeter介绍 1. 什么是JMeter? Apache JMeter™ 应用程序是开源软件,一个 100% 纯 Java 应用程序,旨在加载测试功能行为和测量性能 。它最初是为测试 Web 应用程序而设计的,但后来扩展到其他测试功能。 2. JMeter能做啥&#x…...
Nodejs运行vue项目时,报错:Error: error:0308010C:digital envelope routines::unsupported
前端项目使用( npm run dev ) 运行vue项目时,出现错误:Error: error:0308010C:digital envelope routines::unsupported 经过探索,发现问题所在,主要是nodeJs V17版本发布了OpenSSL3.0对算法和秘钥大小增加了更为严格的限制&#…...
华为汽车图谱
极狐 极狐(ARCFOX)是由北汽、华为、戴姆勒、麦格纳等联合打造。总部位于北京蓝谷。 问界 华为与赛力斯(东风小康)合作的成果。 阿维塔 阿维塔(AVATR)是由长安汽车、华为、宁德时代三方联合打造。公司总部位…...
鸿蒙操作系统-初识
HarmonyOS-初识 简述安装配置hello world1.创建项目2.目录解释3.构建页面4.真机运行 应用程序包共享包HARHSP 快速修复包 官方文档请参考:HarmonyOS 简述 1.定义:HarmonyOS是分布式操作系统,它旨在为不同类型的智能设备提供统一的操作系统&a…...
【ZZULIOJ】1003: 两个整数的四则运算(Java)
题目描述 输入两个整数num1和num2,请你设计一个程序,计算并输出它们的和、差、积、整数商及余数。 输入 输入只有两个正整数num1、num2。 输出 输出占一行,包括两个数的和、差、积、商及余数,数据之间用一个空格隔开。 样例…...
聊聊芯片原厂
芯片原厂是芯片的生产商,他们制造和设计芯片,并拥有产品的所有权原厂这个词是为了区分芯片代理商(厂)而创造的。 每一家芯片制造商都会通过自己忠诚的芯片代理商(厂)来销售自己的芯片,代理商(厂)也会打着芯片制造商的旗号来销售芯片,因此有时候为了强调自己的正统地…...
百人一岗,Android开发者的困境。。。。。
前言 在当前的Android开发领域,竞争的激烈程度已经达到了前所未有的水平,几乎到了100个开发者竞争1个岗位的地步。 这种“内卷”现象的背后,是技术的快速发展和市场对Android开发者技能要求的不断提升。随着移动应用的普及和多样化…...
若依分离版 —引入echart连接Springboot后端
1. vue引入echart (1)首先安装ECharts库。可以通过npm npm install echarts --save (2)在vue页面中添加一个容器元素来显示图表 <el-card class"mt20"><div id"ha" ref"main"><…...
Halcon深度学习项目实战
Halcon在机器视觉中的价值主要体现在提供高效、可扩展、灵活的机器视觉解决方案,帮助用户解决各种复杂的机器视觉问题,提高生产效率和产品质量。 缩短产品上市时间 Halcon的灵活架构使其能够快速开发出任何类型的机器视觉应用。其全球通用的集成开发环…...
子类中的方法去调用父类中的方法有几种形式?原生django如何向响应头写入数据
1 子类中的方法去调用父类中的方法有几种形式 2 原生django如何向响应头写入数据 1 子类中的方法去调用父类中的方法有几种形式? class Animal:def eat(self):print(self.name, 在吃饭)class Dog(Animal):def __init__(self, name):self.name namedef test(self):#…...
数据安全治理框架构建
一、引言 在数字化时代,数据已成为企业和社会发展的重要驱动力。然而,随着数据量的激增和数据应用场景的扩展,数据安全风险也日益凸显。数据安全治理作为确保数据安全、合规使用的关键手段,受到了广泛的关注。本文旨在探讨数据安…...
深度学习十大算法之图神经网络(GNN)
一、图神经网络的基础 图的基本概念 图是数学中的一个基本概念,用于表示事物间复杂的关系。在图论中,图通常被定义为一组节点(或称为顶点)以及连接这些节点的边。每个边可以有方向,称为有向边,或者没有方向…...
【工具类】git log 常用别名,git log 干活,git log常用参数
git log 常用参数及 .gitconfig 配置 git log 常用参数及 .gitconfig 配置 干货,执行下边命令,添加别名git log 参数参考资料 干货,执行下边命令,添加别名 注意,需要将 knowledgebao 修改为自己的名字,…...
[linux] AttributeError: module ‘transformer_engine‘ has no attribute ‘pytorch‘
[BUG] AttributeError: module transformer_engine has no attribute pytorch Issue #696 NVIDIA/Megatron-LM GitHub 其中这个答案并没有解决我的问题: import flash_attn_2_cuda as flash_attn_cuda Traceback (most recent call last): File "<stdi…...
前端面试题---->JavaScript
const声明的对象属性和数组的值可以被修改吗?为什么 原因:当使用const声明一个对象或数组时,实际上是保证了对象或数组的引用不会被修改,但对象或数组本身的属性或元素是可以被修改的。这是因为const只能保证指向的内存地址不变&a…...
spring 的理解
spring 的理解 spring 是一个基础的框架,同时提高了一个Bean 的容器,用来装载Bean对象spring会帮我们创建Bean 对象并维护Bean对象 的生命周期。在spring 框架上,还有springCloud,spring Boot 的技术框架,都是以Spring为基石的sp…...
【Java程序设计】【C00384】基于(JavaWeb)Springboot的民航网上订票系统(有论文)
【C00384】基于(JavaWeb)Springboot的民航网上订票系统(有论文) 项目简介项目获取开发环境项目技术运行截图 博主介绍:java高级开发,从事互联网行业六年,已经做了六年的毕业设计程序开发&#x…...
如何查看局域网内所有的ip和对应的mac地址
1、windows下查看 方法一、 按快捷键“winr”打开运行界面,输入“CMD”回车: 输入以下命令: for /L %i IN (1,1,254) DO ping -w 1 -n 1 192.168.0.%i 其中 192.168.0.%i 部分要使用要查询的网段,比如 192.168.1.%i 192.168.137.%i 172.16.2…...
应用层协议 - HTTP
文章目录 目录 文章目录 前言 1 . 应用层概要 2. WWW 2.1 互联网的蓬勃发展 2.2 WWW基本概念 2.3 URI 3 . HTTP 3.1 工作过程 3.2 HTTP协议格式 3.3 HTTP请求 3.3.1 URL基本格式 3.3.2 认识方法 get方法 post方法 其他方法 3.3.2 认识请求报头 3.3.3 认识请…...
mysql安装及操作
一、Mysql 1.1 MySQL数据库介绍 1.1.1 什么是数据库DB? DB的全称是database,即数据库的意思。数据库实际上就是一个文件集合,是一个存储数据的仓库,数据库是按照特定的格式把数据存储起来,用户可以对存储的数据进行…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
