性能测试工具——JMeter

目录

一、JMeter介绍

1、下载安装JMeter

2、打开JMeter

方式一:

方式二:

3、JMeter基础设置

4、JMeter基本使用流程

(1)启动JMeter

(2)在测试计划下添加线程组

(3)在 “线程组” 下添加 “HTTP” 取样器

(4)填写 “HTTP请求” 的相关请求数据

(5)在 “线程组” 下添加 “查看结果树” 监听器

(6)点击 “启动按钮”,查看接口测试结果

5、JMeter元件作用域和执行顺序

作用域:

执行顺序:

二、重点组件

1、线程组

2、HTTP取样器

3、查看结果树

4、HTTP Cookie 管理器

5、HTTP请求默认值

6、用户定义的变量

7、CSV数据文件设置

操作步骤

1、CSV数据文件设置

2、编写test.csv文件

3、修改登录接口及其他涉及到username和password获取的参数

4、修改线程组中线程数,使得每次取到的username和password都不一样​编辑

5、运行结果

8、JSON提取器

(1)添加JSON提取器

JSON操作符参考

(2)添加JSON配置

(3)使用刚才的配置

(4)测试

(5)分析

9、JSON断言

(1)添加断言

(2)添加JSON配置

10、同步定时器

11、事务控制器

三、安装插件

1、下载其他监听器

2、下载线程组插件

3、Stepping Thread Group

4、常见监听器

 (1)Active Threads Over Time

(2)聚合报告

(3)Response Times Over Time

(4)Transactions per Second(TPS)


一、JMeter介绍

        环境要求:使用JMeter要求Java 8或更高的版本。

        Apache JMeter是Apache组织基于Java开发的压力测试工具,用于对软件做性能测试

        JMeter工作原理:

1、下载安装JMeter

        官网地址:Apache JMeter - Download Apache JMeter

        下载好后的路径:

2、打开JMeter

方式一:

        下载好后打开bin目录下的 jmeter.bat 文件。双击

方式二:

        配置系统环境变量,找到你下载jmeter的文件路径,添加路径,把你复制的路径粘贴上去。

        配置好路径后,打开cmd控制平台,输入jmeter。

3、JMeter基础设置

        找到 jmeter.properties 文件

        把语言设置成中文,如图:

4、JMeter基本使用流程

(1)启动JMeter

(2)在测试计划下添加线程组

(3)在 “线程组” 下添加 “HTTP” 取样器

(4)填写 “HTTP请求” 的相关请求数据

(5)在 “线程组” 下添加 “查看结果树” 监听器

(6)点击 “启动按钮”,查看接口测试结果

5、JMeter元件作用域和执行顺序

        在JMeter中,元件的作用域和执行顺序是非常重要的概念。

作用域:

        JMeter元件的作用域主要由测试计划的树形结构中的元件父子关系来确定

执行顺序:

        取样器(sampler)元件内组件不依赖其他元件就可以执行,因此取样器不存在作用问题。

        元件作用域值对它的子节点有作用。

        其他作用域默认根据测试计划中树形结构来定。


二、重点组件

1、线程组

        控制JMeter将用于执行测试的线程数,也可以把一个线程理解为一个测试用户。

线程数:一个线程即一个测试用户,设置发送的请求次数

Ramp-up时间(秒):设置性能测试运行时间,单位为秒

循环次数:

        配置指定次数:控制脚本循环执行的次数

        配置循环永远:

                需要调度器配置使用

                运行时间:脚本执行时间

                延迟启动时间:脚本等待指定时间才能运行

2、HTTP取样器

添加必需的配置:

        协议主机名/IP

        端口:

                协议端口号

        请求方法:

        路径(目录+参数)

        内容编码(默认为ISO国际标准,但对中文支持不友好,可以使用utf-8)。

        参数:

                参数可以拼在路径里,也可以写在参数中

                POST参数要放到消息数据中{wd:test}

3、查看结果树

        取样器结果:统计请求相关的信息

1、Thread Name:线程组名称

2、Sample time:发送请求时间

3、Load time:响应时间

4、Response code:接口响应状态码

        请求HTTP请求的请求头和请求体的详细信息

        响应HTTP响应的响应头和响应体的详细信息

4、HTTP Cookie 管理器

        添加了HTTP Cookie管理器后,会自动存储并发生Cookie。

        上面选项默认标准即可。

        HTTP Cookie管理器像Web浏览器应用存储和发送Cookie。如果HTTP请求并且响应包含Cookie,则Cookie管理器会自动存储该Cookie,并将其用于将来对该特定网站的所有请求。每个JMeter线程都有自己的“Cookie存储区”。因此,正在测试使用Cookie存储会话信息的网站,每个JMeter线程都将拥有自己的会话。此类Cookie不会显示在Cookie管理器显示屏上,可以使用“查看结果树监听器”查看。

        缓存配置可选择 standard(标准)或 compatibility(兼容的),当然也可以手工添加一些Cookie。

5、HTTP请求默认值

        添加完后,输入默认请求的URL

        这时候,把其他请求上的URL路径删掉,再次启动该请求,也不会保存,设置默认的URL,则会访问默认的URL。

        博客中涉及到的接口协议、IP、端口号全都一样,可以单独抽取出来存放在默认值中,其他接口就可以省略不写协议、IP、端口号。

6、用户定义的变量

        添加方式:线程组—>配置元件—>用户定义的变量

        有时候我们想要在固定的场景里使用参数化,改动后不希望影响到其他的脚本。这时候就可以自定义变量。

        使用方式在HTTP请求的取样器中引入定义的变量。${参数名}

        适用场景:变量需要在多个脚本中使用,方便统一管理和修改。

7、CSV数据文件设置

        以登录接口为例,当我们执行登录接口的性能测试时,手动配置了用户名和密码固定的username,然后实际使用中不可能只有一个用户登录,为了模拟更真实的登录环境,我们需要提供更多的用户username和password来实现登录操作。

        添加方式:线程组—>配置元件—>CSV数据文件设置

操作步骤

1、CSV数据文件设置

文件名填写CSV文件的路径。建议使用绝对路径

文件编码UTF-8

变量名称从CSV数据文件中读取的数据需要保存到变量名有多个变量时用逗号分隔

是否忽略首行是否从CSV数据文件第一行开始读取

分隔符要求与CSV数据文件中多列的分隔符一致

遇到文件结束符再次循环若选择为True,当数据不够的时候会从头去。若选择False,则需要勾选下面的配置,遇到文件结束符停止线程,这里如果不勾选,请求将会报错

2、编写test.csv文件

        如图:

3、修改登录接口及其他涉及到username和password获取的参数

        修改完该配置后,登录接口发起请求时将从CSV文件中获取配置好的username和password参数,获取顺序为从上往下依次获取获取。

4、修改线程组中线程数,使得每次取到的username和password都不一样
5、运行结果

8、JSON提取器

        接口响应成功后,通过提取返回值对应字段,可以用于其他接口的参数配置。

(1)添加JSON提取器

        针对某一个HTTP请求接口添加JSON提取器。

        以博客列表页为例子:

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

        参考文档:https://github.com/json-path/JsonPath

(2)添加JSON配置

        我们在查看结果树里面,换成JSON Path Tester,可以测试我们的JSON表达式是否正确,如图:

        添加表达式,如图:

(3)使用刚才的配置

        在博客列表页的HTTP信息管理头中,选中从用户登录里拿到的token

(4)测试

        这是再发起登录页和列表页中的请求,发现两者的token相同。

(5)分析

        目录结构如下:

        JSON提取器和登录页、列表页同级,所以会从这两个请求中获取 data 信息,把 data 的内容放进 token 中。

        从上往下扫描,登录页扫描到data了,就提取出来,列表页就能拿到登录页返回的token了。

        那如果登录页和列表页顺序反过来呢?

        

        此时再发起请求,发现报错了,如图:发现列表页并没有拿到token

        所以顺序不能变,JSON提取器是从上往下提取的。

        我们把JSON提取器放进登录页中,目录结果如下:

        

        也不能拿到token,发现请求的是从上往下执行的

        把登录页放第一位就好了。

9、JSON断言

        接口发送请求成功,响应码为200并不能完全代表接口请求成功,我们更多需要关注接口响应数据是否符合预期。这时就可以使用JSON断言了。

(1)添加断言

        针对某个接口添加断言,如图:给登录接口进行断言

        

(2)添加JSON配置

        正则表达式查询网站:正则表达式 – 语法 | 菜鸟教程 (runoob.com)

注意

1、若不选Additionally assert value,表示添加断言值,则可用来判断字段是否存在。

2、选择Additionally assert value,则必须添加 Expected Value 期望的断言值。

3、若不选 Match as regular expression 正则匹配,则 Expected Value 必须填写完整,少一个字符都会导致断言失败。

4、若选择 Match as regular expression 正则匹配,则 Expected Value 可以仅写上部分关键词,即可断言成功。

10、同步定时器

        为了达到并发的效果,需要添加同步定时器。

        没添加同步定时器前,有多个请求,只要这个请求准备好了,就发送。

        添加同步定时器后,设置一个集合点,有多个请求,这几个请求要满足这个集合点的数量,一起发送请求。

        同步定时器可以理解为过红绿灯,红灯的时候人都在等绿灯,绿灯后全部人都可以一起过马路了。

        JMeter 同步定时器的作用主要在于模拟多用户并发访问的场景,确保多个线程能够同时执行某个操作,以达到真正的并发效果。

        当多个线程同时启动时,它们可能会在不同的时间间隔内执行,这样就无法达到真正的并发效果。同步定时器的作用就是将这些线程的执行时间同步,使它们在同一时间点执行。它可以在多个线程之间制造一定的延迟,直到同时到达指定时间点,再同时执行后续的操作。

        此外,同步定时器可以理解为集合点,当线程数量达到指定值后,再一起释放,可以瞬间产生很大的压力。这样,可以更好地模拟真实的用户并发访问场景,提高测试的准确性和可靠性。

        在性能测试过程中,为了真实模拟多个用户同时进行操作,用来度量服务器的处理能力,可以使用同步定时器来设置集合点。不过,虽然通过加入集合点可以约束请求同时发送,但不能确保请求同时到达服务器,所以只能说是较真实模拟并发。

        现在模拟5个请求同时并发执行。

        执行顺序如图:

        这里同步定时器设置模拟用户数量最好是和线程组里的线程数量相同,或者线程数量是模拟用户数量的整数倍(但线程循环要设为永远,指定时间循环),这样才不会导致有剩余的请求发送不出去(因为要等到达集合点的数量,才能把这些请求一起发送出去)。

11、事务控制器

        JMeter 事务控制器的作用主要用于测试执行嵌套测试元素所花费的总时间。这相当于模拟用户进行一系列操作的测试。

        在进行页面性能测试或API性能测试时,事务控制器是一个非常重要的工具。它可以帮助测试人员更准确地评估系统性能,尤其是在涉及多个接口或操作的复杂场景中。例如,在订单提交的过程中,可能需要调用多个接口,并且某些接口可能依赖于前一个接口的结果。在这种情况下,使用事务控制器可以将这些接口统一视为一个事务进行性能测试,从而得到更接近真实场景的性能测试结果。

        若不添加事务控制器,则一个接口即一个事务。

        添加了事务控制器后,可以将多个接口统一放到一个事务控制器下座位一个事务。

        如图,把登录页和用户信息放到同一个事务中:

        发起请求,查看聚合报告

        发现原来的请求依然在,还多了个登录事务。

三、安装插件

        地址:Install :: JMeter-Plugins.org

        下载完成后把该文件放进lib/ext中,如图:然后再重启JMeter

        经过上述操作后,就能发现我们JMeter右上角多了一个蝴蝶logo,如图:

        点击蝴蝶logo,进行下述操作。

        添加以下插件:

1、下载其他监听器

        点击Apply Changes and Restart JMeter等待下载,下载完成后重启JMeter。

2、下载线程组插件

        点击Apply Changes and Restart JMeter等待下载,下载完成后重启JMeter。

        下载完成后可以看到多了许多配置,如图:

3、Stepping Thread Group

This group will start启动多少个线程,同线程组的线程数

First,wait for等待多少秒才开始压测,一般默认为0

Then start一开始有多少个线程数,一般默认为0

Next,add下一次增加多少个线程数

threads every当前运行多长时间后再次启动线程,即每一次线程启动完成之后的持续时间

using ramp-up启动线程的时间;若设置为1秒,表示每次启动线程都持续1秒

thenhold loadfor线程全部启动完之后持续运行多长时间

finally,stop/threadsevery多长时间释放多少个线程;若设置为5个和1秒,表示持续负载结束之后每1秒钟释放5个线程

        添加梯度线程组后,把这三个监听器加进去,然后测试上面添加的请求,如图:

        

        启动这个梯度线程组。下面介绍这几个监听器

4、常见监听器

 (1)Active Threads Over Time

        表示运行的线程数,可以看到,随着时间的变化,线程数随之变多,每隔3秒,增加5个,直到线程数到20停止增长,到后面每隔1秒释放5个线程,和上面我们设置的阶梯线程组一样

(2)聚合报告

        从聚合报告可以看到性能测试过程中整体的数据变化。如图:

指标说明
Samples发起的HTTP请求调用数
Average平均响应时间,单位为毫秒
Median请求调用响应时间的中间值,也就是50%请求调用的响应时间,单位为毫秒
90%Line90%请求调用的响应时间,单位为毫秒
95%Line95%请求调用的响应时间,单位为毫秒
99%Line99%请求调用的响应时间,单位为毫秒
Min请求调用的最小响应时间,单位为毫秒
Max请求调用的最大响应时间,单位为毫秒
Error%调用失败的请求占比。调用失败一般指响应断言失败或者请求调用出错
ThroughputTPS/QPS,每秒处理的事务数
KB/sec每秒网络传输的流量大小,单位为KB。这个指标是以网络传输的大小来衡量网络吞吐量

(3)Response Times Over Time

        Response Times Over Time 主要用于监听整个事务运行期间的响应时间。在测试过程中,它可以帮助测试人员观察并分析响应时间的实时平均值以及整体响应时间的走向。通过这一监听器,测试人员能够更直观地了解系统在不同时间点的响应性能,从而发现可能存在的性能问题或瓶颈。

        Response Time Over Time的图形展示中,横坐标通常代表运行时间,而纵坐标则代表响应时间(单位是毫秒)。测试人员可以根据图形中的趋势线来判断响应时间的稳定性以及是否存在大的波动。例如:如果响应时间在某个时间点突然增加,这可能意味着系统在该时间点遇到了性能问题。

(4)Transactions per Second(TPS)

       JMeter中的Transactions per Second(TPS)监听器是一个用于分析系统吞吐量的重要工具。TPS,即每秒处理的事务数,表示一个客户机向服务器发送请求后,服务器做出反应的过程。这个指标反映了系统在同一时间内处理业务的最大能力。TPS值越高,说明系统的处理能力越强。

        在使用TPS监听器时,横坐标通常代表运行时间,而纵坐标则代表TPS值。通过监听器展示的图表,可以清晰地看到TPS值随时间的变化情况。在图表中,红色通常表示通过的TPS,而绿色可能表示失败的TPS。这有助于我们快速识别系性能的变化和瓶颈。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Linux权限修改及管理员权限获取

在网上看到的&#xff0c;自己当作字典记录下来 修改文件权限&#xff1a;chmod 使用 chmod 可以修改文件权限。 两种方式&#xff1a;字母法与数字法 一&#xff0c;字母法修改文件权限 例如&#xff1a;文件名为 test.x 给文件 test.x 添加所有用户都能执行的权限&#x…

CSS简明通俗教程

CSS简明通俗教程 1. CSS简介 CSS&#xff08;Cascading Style Sheets&#xff0c;层叠样式表&#xff09;是一种样式表语言。CSS用于描述HTML或XML&#xff08;包括SVG或XHTML等XML方言&#xff09;文档的呈现方式&#xff0c;它有自己的语法规则和逻辑&#xff0c;用于控制网…

年薪40W!转AI产品经理后,我明白了有人带的意义在哪!

如果你正想转岗/入行产品经理&#xff0c;我的故事或许能给你一些启示&#x1f447; 初识产品 目标有了&#xff0c;问题也有了 和很多人一样&#xff0c;毕业的时候比较迷茫&#xff0c;不知道自己喜欢什么行业、岗位… 就按照专业找了一个对口且擅长的算法工作&#xff0…

学习C#,视频、书籍、在线文档哪种是你喜欢的方式,80%的人竟然选择这个方式!

大家好&#xff0c;我是编程乐趣。 每一个人学习编程&#xff0c;选择的方式、习惯的方式可能都不一样&#xff0c;有些人喜欢买书、有些人喜欢看官方文档、有些人喜欢看视频。 哪一种方式&#xff0c;我个人认为都没问题&#xff0c;只要能获取知识就行。 下面一起看看Stac…

一带一路区块链样题解析(上)

一带一路区块链赛项样题解析 模块一 任务一:按要求完成 FISCO BCOS 区块链系统部署 (1)编写配置文档 1.根据题目设置各项要求,使用build_chain.sh离线搭建匹配的区块链,并通过命令配置各群组节点的MySQL数据库;(1分) cat >> ipconf <<EOF 127.0.0.1:3 …

基于C#+SQL Server2008实现(CS界面)学生宿舍管理系统

1 概述 本次课程设计是数据库课程设计&#xff0c;我选的是学生宿舍管理系统&#xff0c;功能块主要是宿舍管理、学生管理、出入登记和来访登记&#xff0c;目的在于将学生宿舍的管理实现信息化&#xff0c;监控学生宿舍的情况防止意外发生。 课程设计任务的需求分析 2.1设计…

中航资本:交易港股通,为什么刚买入就显示亏损?

经过港股通生意港股&#xff0c;刚买入就闪现亏本是因为买入港股时会有一个汇率差。 港股通生意选用的是港币报价、人民币结算的方式&#xff0c;港股通的参看本钱价是以港币核算的&#xff0c;触及买入时将港币换成人民币&#xff0c;卖出时将人民币换成港币的进程&#xff0…

Java语言程序设计基础篇_编程练习题18.36 (思瑞平斯基三角形)

目录 题目&#xff1a;18.36 (思瑞平斯基三角形) 代码示例 代码逻辑 1. 应用程序入口 2. GUI设置 3. 事件处理 4. 绘制逻辑 5. 递归绘制 输出结果 题目&#xff1a;18.36 (思瑞平斯基三角形) 编写一个程序&#xff0c;让用户输入一个阶数&#xff0c;然后显示填充的…

送书!一大波LLM大模型学习教程书籍

最近整理了日前市面上一大波大模型的书&#xff0c;已经打包成pdf了&#xff0c;大家有需要的&#xff0c;可以自行添加获取&#xff0c;纯福利&#xff0c;无套路&#xff0c;添加后说明是哪本书&#xff0c;会直接给大家&#xff01; &#x1f449;CSDN大礼包&#x1f381;&a…

国产SSL证书品牌怎么选择?

有人在歪曲大型央国企“信创化”与数字化转型建设思路&#xff0c;为了自身的利益开始造谣一些虚假传播信息国外SSL证书不安全问题&#xff0c;然而国外的SSL证书每个上网用户都在使用&#xff0c;然而发布虚假广告的一些人实际上是换了个马甲贴个名字就叫国产SSL证书了&#x…

等保测评误区与应对:企业常见问题解析

标题&#xff1a;等保测评误区与应对&#xff1a;企业常见问题解析 信息安全等级保护&#xff08;等保&#xff09;测评是企业信息安全建设的重要组成部分&#xff0c;但在实际操作中&#xff0c;企业常会陷入一些误区。本文将解析企业等保测评中常见的误区&#xff0c;并提出…

【Python报错已解决】IndexError: list index out of range

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

Flutter 之 ftcon24usa 大会,创始人分享 Flutter 十年发展史,一闪而过的鸿蒙身影

之前一直关注 Fluttercon 的相关活动&#xff0c;正如 Flutter 3.24 发布时所说&#xff0c;继 Fluttercon 欧洲之后&#xff0c;近日 Fluttercon 2024 USA 在纽约如期举行&#xff0c;大会带来了一些有趣消息和 Flutter 发展历程&#xff0c;本次也是通过 X 和 OpenWebF 创始人…

免费ppt模板哪里找?职场必备这些利器

一眨眼&#xff0c;9月份的尾声渐近&#xff0c;无论是学生还是职场人士&#xff0c;都开始准备着新一轮的演讲和报告。在这个忙碌的时期&#xff0c;一份精美的PPT模板能够大幅提升你的工作效率&#xff0c;让你的演示更加引人入胜。 不用担心高昂的版权费用&#xff0c;市场…

什么是反射,反射用途,spring哪些地方用到了反射,我们项目中哪些地方用到了反射

3分钟搞懂Java反射 一、反射是什么 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的工具&#xff0c;它允许程序在运行时获取和操作类、接口、构造器、方法和字段等。反射是Java语言的一个重要特性&#xff0c;它为开发人员提供了许多灵活性&#xf…

单片机项目合集列表与专栏说明——Excel合集列表目录查阅(持续更新)

阿齐Archie《单片机项目合集》专栏项目 为方便查找本专栏的项目&#xff0c;特整理Excel合集列表供查阅&#xff08;可搜索或按系列查找&#xff09; 持续更新链接如下&#xff1a; 阿齐单片机项目合集 (kdocs.cn)https://www.kdocs.cn/l/cmrxCxJN05YN 打开链接如下Exce表所…

使用API有效率地管理Dynadot域名,注册域名服务器(NS)信息

前言 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…

视频去水印 —— 释放创意,让学习与创作更自由!

&#x1f31f; 视频去水印 —— 释放创意&#xff0c;让学习与创作更自由&#xff01; 在这个短视频盛行的时代&#xff0c;抖音、快手、小红书等平台成为了创意与灵感的聚集地。你是否曾遇到过想要学习或进行二次创作&#xff0c;却被视频中的水印所困扰&#xff1f;现在&…

fo-dicom开发之DICOM数据解析:常见数据类型及处理方法详解

前言 前面的文章&#xff0c;我们介绍了fo-dicom是一个怎样的开源库&#xff1a;fo-dicom&#xff0c;第一个基于.NET Standard 2.0 开发的DICOM开源库&#xff0c;以及 学会使用fo-dicom前&#xff0c;了解其非常重要的基本概念&#xff0c;本次我们将了解&#xff0c;当进行…

力扣最热一百题——最小覆盖子串

目录 题目链接&#xff1a;76. 最小覆盖子串 - 力扣&#xff08;LeetCode&#xff09; 题目描述 示例 提示&#xff1a; 解法一&#xff1a;滑动窗口 1. 初始化 2. 构建 mapT 3. 滑动窗口 4. checkT 方法 5. 返回结果 Java写法&#xff1a; 运行时间 C写法&#x…