当前位置: 首页 > news >正文

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测试计划脚本呈树形结构排列,元件的执行顺序是先执行根节点,再执行子节点。在同一层次中,各个元件的执行顺序逻辑:

  1. 配置元件
  2. 前置处理器
  3. 定时器
  4. 取样器
  5. 后置处理器
  6. 断言
  7. 监听器

        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开发者技能要求的不断提升。随着移动应用的普及和多样化&#xf…...

若依分离版 —引入echart连接Springboot后端

1. vue引入echart &#xff08;1&#xff09;首先安装ECharts库。可以通过npm npm install echarts --save &#xff08;2&#xff09;在vue页面中添加一个容器元素来显示图表 <el-card class"mt20"><div id"ha" ref"main"><…...

Halcon深度学习项目实战

Halcon在机器视觉中的价值主要体现在提供高效、可扩展、灵活的机器视觉解决方案&#xff0c;帮助用户解决各种复杂的机器视觉问题&#xff0c;提高生产效率和产品质量。 缩短产品上市时间 Halcon的灵活架构使其能够快速开发出任何类型的机器视觉应用。其全球通用的集成开发环…...

子类中的方法去调用父类中的方法有几种形式?原生django如何向响应头写入数据

1 子类中的方法去调用父类中的方法有几种形式 2 原生django如何向响应头写入数据 1 子类中的方法去调用父类中的方法有几种形式&#xff1f; class Animal:def eat(self):print(self.name, 在吃饭)class Dog(Animal):def __init__(self, name):self.name namedef test(self):#…...

数据安全治理框架构建

一、引言 在数字化时代&#xff0c;数据已成为企业和社会发展的重要驱动力。然而&#xff0c;随着数据量的激增和数据应用场景的扩展&#xff0c;数据安全风险也日益凸显。数据安全治理作为确保数据安全、合规使用的关键手段&#xff0c;受到了广泛的关注。本文旨在探讨数据安…...

深度学习十大算法之图神经网络(GNN)

一、图神经网络的基础 图的基本概念 图是数学中的一个基本概念&#xff0c;用于表示事物间复杂的关系。在图论中&#xff0c;图通常被定义为一组节点&#xff08;或称为顶点&#xff09;以及连接这些节点的边。每个边可以有方向&#xff0c;称为有向边&#xff0c;或者没有方向…...

【工具类】git log 常用别名,git log 干活,git log常用参数

git log 常用参数及 .gitconfig 配置 git log 常用参数及 .gitconfig 配置 干货&#xff0c;执行下边命令&#xff0c;添加别名git log 参数参考资料 干货&#xff0c;执行下边命令&#xff0c;添加别名 注意&#xff0c;需要将 knowledgebao 修改为自己的名字&#xff0c;…...

[linux] AttributeError: module ‘transformer_engine‘ has no attribute ‘pytorch‘

[BUG] AttributeError: module transformer_engine has no attribute pytorch Issue #696 NVIDIA/Megatron-LM GitHub 其中这个答案并没有解决我的问题&#xff1a; import flash_attn_2_cuda as flash_attn_cuda Traceback (most recent call last): File "<stdi…...

前端面试题---->JavaScript

const声明的对象属性和数组的值可以被修改吗&#xff1f;为什么 原因&#xff1a;当使用const声明一个对象或数组时&#xff0c;实际上是保证了对象或数组的引用不会被修改&#xff0c;但对象或数组本身的属性或元素是可以被修改的。这是因为const只能保证指向的内存地址不变&a…...

spring 的理解

spring 的理解 spring 是一个基础的框架&#xff0c;同时提高了一个Bean 的容器&#xff0c;用来装载Bean对象spring会帮我们创建Bean 对象并维护Bean对象 的生命周期。在spring 框架上&#xff0c;还有springCloud,spring Boot 的技术框架&#xff0c;都是以Spring为基石的sp…...

【Java程序设计】【C00384】基于(JavaWeb)Springboot的民航网上订票系统(有论文)

【C00384】基于&#xff08;JavaWeb&#xff09;Springboot的民航网上订票系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#x…...

如何查看局域网内所有的ip和对应的mac地址

1、windows下查看 方法一、 按快捷键“winr”打开运行界面&#xff0c;输入“CMD”回车: 输入以下命令&#xff1a; for /L %i IN (1,1,254) DO ping -w 1 -n 1 192.168.0.%i 其中 192.168.0.%i 部分要使用要查询的网段&#xff0c;比如 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&#xff1f; DB的全称是database&#xff0c;即数据库的意思。数据库实际上就是一个文件集合&#xff0c;是一个存储数据的仓库&#xff0c;数据库是按照特定的格式把数据存储起来&#xff0c;用户可以对存储的数据进行…...

【计算机操作系统】深入探究CPU,PCB和进程工作原理

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…...

Pillow教程04:学习ImageDraw+Font字体+alpha composite方法,给图片添加文字水印

---------------Pillow教程集合--------------- Python项目18&#xff1a;使用Pillow模块&#xff0c;随机生成4位数的图片验证码 Python教程93&#xff1a;初识Pillow模块&#xff08;创建Image对象查看属性图片的保存与缩放&#xff09; Pillow教程02&#xff1a;图片的裁…...

fastjson2 反序列化包含多层泛型结构的实体类

前言 由于使用到httpUtill来调用接口 工具类的返回是字符串 其中接口的实现返回值是个多层泛型结构的实体类 例如Result<Page<UserDto>> 当使用 JSON.parseObject("res",new TypeReference<Result<Page<UserDto>>>{})发现在page中存在…...

P6学习:解析P6 WBS-工作分解结构的原则

前言 WBS&#xff0c;及Work Breakdown Structure&#xff0c;中文工作分解结构&#xff0c;是总结工作阶段的项目的层次结构分解。 WBS 就像项目的大纲——它将项目分解为特定的可交付成果或阶段。 然后将活动添加到这些层中以创建项目计划的时间表。 WBS 使用流程会有所不…...

C++ empalce_back 和 push_back的区别

在C中&#xff0c;push_back和emplace_back都是向容器&#xff08;如std::vector、std::list等&#xff09;尾部添加元素的成员函数。它们的主要区别在于元素的构造方式和参数传递方式。 push_back函数接受一个已经构造好的元素&#xff0c;并将其复制或移动到容器的尾部。这意…...

java1.8常考面试题

在Java 1.8版本中&#xff0c;引入了很多重要的新特性&#xff0c;这些特性常常成为面试的焦点。下面是一些在面试中常见的关于Java 1.8的问题及其解答&#xff0c;帮助你准备面试&#xff1a; 1. Java 1.8的主要新特性有哪些&#xff1f; Lambda表达式&#xff08;Lambda Ex…...

Java 中的业务是指什么?

在 Java 编程中&#xff0c;业务&#xff08;Business&#xff09;是指软件系统中负责实现特定功能或处理特定任务的一组逻辑和功能。业务通常是指与业务需求直接相关的功能和处理过程&#xff0c;包括数据处理、业务逻辑、交易处理、业务规则等。在软件开发中&#xff0c;业务…...

【MySQL】聊聊自增id用完怎么办?

在实际的开发中&#xff0c;一般都会将数据存储到数据库中&#xff0c;在设计表的时候&#xff0c;其实id如果达到最大值的话&#xff0c;会出现什么问题。其实主要分两种情况&#xff0c;一种是设置了主键id&#xff0c;另一种没有设置主键id。 表定义自增值id create table…...

新能源汽车充电桩主板各模块成本占比解析

汽车充电桩主板是汽车充电桩的重要组件&#xff0c;主要由微处理器模块、通信模块、控制模块、安全保护模块、传感器模块等多个模块构成。深入探究各模块在总成本中的比重&#xff0c;我们可以更好地优化成本结构、提高生产效率&#xff0c;并为未来的技术创新和市场需求变化做…...

【面试经典150 | 动态规划】三角形最小路径和

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;动态规划 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结构等内容进行…...