JMeter性能测试

目录

前言

一、JMeter介绍

[1. 打开JMeter](#1. 打开JMeter)

[2. JMeter基本使用流程](#2. JMeter基本使用流程)

[1. 添加线程组](#1. 添加线程组)

[2. 添加HTTP请求](#2. 添加HTTP请求)

[3. 配置HTTP请求](#3. 配置HTTP请求)

[4. 添加结果树](#4. 添加结果树)

[5. 运行测试](#5. 运行测试)

[3. JMeter原件作用域](#3. JMeter原件作用域)

二、常用组件介绍

[1. 线程组](#1. 线程组)

[2. HTTP取样器](#2. HTTP取样器)

[3. 查看结果树](#3. 查看结果树)

[4. HTTP Cookie管理器](#4. HTTP Cookie管理器)

[5. HTTP请求默认值](#5. HTTP请求默认值)

[6. HTTP请求头管理器](#6. HTTP请求头管理器)

[7. 用户自定义变量](#7. 用户自定义变量)

[8. CSV数据文件设置](#8. CSV数据文件设置)

[9. JSON提取器](#9. JSON提取器)

[10. JSON断言](#10. JSON断言)

[11. 聚合报告](#11. 聚合报告)

[12. 同步定时器(集合点)](#12. 同步定时器(集合点))

[13. 事务控制器](#13. 事务控制器)

[14. 安装插件](#14. 安装插件)

[15. 梯度线程组](#15. 梯度线程组)

[16. Response Times Over Time](#16. Response Times Over Time)

[17. Transactions per Seconds](#17. Transactions per Seconds)

三、测试报告


前言

本文介绍了JMeter 5.5压力测试工具的基本使用方法。主要内容包括:JMeter的启动方式、基本测试流程(添加线程组、HTTP请求、结果树等)、常用组件功能(线程组参数设置、HTTP取样器、结果查看、Cookie管理等)以及高级功能(JSON提取器、断言、聚合报告、同步定时器等)。文章还详细说明了如何安装插件、使用梯度线程组进行性能测试,以及如何生成测试报告。通过图文并茂的方式,全面展示了JMeter在接口性能测试中的应用场景和操作方法,为使用者提供了实用的参考指南。


一、JMeter介绍

JMeter是一款经典的压力测试工具,用于对接口进行性能测试。

JMeter可以模拟客户端给服务器发送请求,收集服务器的响应并维护统计信息,用户可以根据统计信息,分析接口性能;

下面文章基于JMeter 5.5版本进行操作。

1. 打开JMeter

JMeter下载好后,无需安装,找到JMeter目录后,双击运行jmeter.bat文件即可;

也可以采用配置环境变量的方式:在环境变量中配置完成后,使用命令行,输入"jmeter"打开;

第一步:配置环境变量;

第二步:使用命令行打开;

2. JMeter基本使用流程

1. 添加线程组

右键TestPlan,按照图示找到线程组并添加;

2. 添加HTTP请求

右键线程组,按照图示找到HTTP请求并添加;

3. 配置HTTP请求

根据要访问接口,按照图示填写协议类型,IP地址,端口号,请求方法,接口路径,以及请求参数;

4. 添加结果树

右键线程组,按照图示添加结果树,接口的响应信息都在结果树中进行查看;

5. 运行测试

完成后,点击"启动"按钮,运行测试;

3. JMeter原件作用域

作用域:由执行计划的树形结构中元件的父子关系决定,原件的作用域为当前原件的子节点;

取样器(Sampler)中的原件不依赖其它原件就可以执行,不存在作用域问题;

二、常用组件介绍

1. 线程组

线程组控制用于测试的线程数,每个线程相当于一个用户;

**Action to be taken after a Sample error:**原件发生错误后的执行策略,通常选择Continue,表示发生错误后,继续执行;

Thread Properties:

  • Number of Threads(users):线程数量;
  • Ramp-up period(seconds):线程启动的指定时间,例如填写1就表示,所有线程在1s内启动;
  • Loop Count:表示线程要执行几个循环,例如配置2,就表示所有线程执行完一遍后,再执行一遍;
  • Infinte:勾选就表示所有线程一直执行;
  • Specify Thread lifetime:搭配Infinte使用,表示执行时间;例如配置2就表示所有线程一直执行,一共执行2s;

2. HTTP取样器

Protocol:协议号,通常写http或者https;

Server Name or IP:IP地址;

Port Number:端口号;

HTTP Request:请求方法,GET,POST等;

Path:接口的路径,可以不适用/开头;

Content encoding:内容的编码方式,通常使用 utf-8;

Parameters:请求参数,可以写在参数中,也可以拼在url中;如果是POST请求,要把参数写在BODY中;

3. 查看结果树

Sampler result:取样器结果,统计请求相关的信息;

Request:查看HTTP请求的正文和请求头;

Response data:查看HTTP响应和响应头;

清除结果信息:

4. HTTP Cookie管理器

HTTP Cookie管理器,可以像浏览器一样,可以保存和发送Cookie,如果响应中带有Set-Cookie字段,则自动保存Cookie,下次发送请求时会带上Cookie;

在JMeter中,每个线程都有自己的Cookie存储区,因此每个线程也都将拥有自己独立的会话;

设置Cookie管理器后,Cookie也不会直接显示在管理器中,而是可以通过查看结果树中的登录响应和下一次请求进行查看;

登录响应:

获取博客系统列表页请求:

5. HTTP请求默认值

用于配置HTTP请求中的默认值,通常一个项目中,HTTP请求中的协议,IP地址和端口号都是相同的,配置了HTTP请求默认值,就不需要再在HTTP请求中配置,所有的请求都会使用这份默认值;

6. HTTP请求头管理器

用于配置HTTP请求头,例如可以携带用户登录凭证;

配置用户登录凭证:

重新访问博客列表页,可以访问成功;

7. 用户自定义变量

配置用户自定义的变量,可以在HTTP请求中引入,方便在固定的场景中将变量参数化;

配置博客id:

获取博客详情:

成功获取到博客信息:

8. CSV数据文件设置

以登录接口为例,实际上登录不可能只有一个用户,为了模拟真实场景,我们可以设置多个用户进行登录;

配置多个用户:

Filename:保存多个用户账号信息的csv文件;

File encoding:文件编码方式;

Variable Name(comma-delimited):变量名,使用英文逗号分隔;

Ignore first line(only used if Variables Names is not empty):忽略首行,取决于csv文件有没有表头,如果有则设置true忽略,没有则设置false不忽略;

Delimiter(user '\t' for tab):分隔符,如果采用逗号分隔,则写逗号;

Allow quoted data:是否允许数据中带有引号;

Recycle on EOF:是否循环读取文件;

Stop thread on EOF:读取文件结束后,是否停止线程;通常循环读取文件就不停止线程,不循环读取,就停止线程;

Sharing Mode:通常设置所有线程;

csv中的账号信息:

设置线程数为2:

修改登录请求中的参数:

运行测试,查看结果,多个用户设置成功:

9. JSON提取器

接口响应成功后,用于提取响应信息中的字段,用于其它接口的参数配置;

例如登录接口,登录后用于提取登录凭证,携带该登录凭证再访问其它接口,而不是使用固定的登录凭证;

Names of created variables:变量名;

JSON Path expressions:JSON提取器提取路径表达式,表示提取的内容;

JSON Path可以借助结果树查看:

将测试正常的JSON Path写到JSON提取器中,就可以提取接口响应信息中的字段;

修改请求头管理器中固定的登录凭证为每次登录时获取的登录凭证:

注意需要将JSON提取器放在登录接口下方,因为JSON提取器仅用于获取登录接口的凭证,否则每次请求后都获取一段非登录凭证信息,后续的接口将访问失败;

运行测试:

10. JSON断言

请求成功后,接口返回HTTP响应码200,并不意味着成功返回数据了,因此也要使用断言判断返回的数据是否正确;

Assert JSON Path exists:要判断的JSON路径;

Additional assert value:勾选表示支持断言匹配,不勾选仅表示判断该字段是否存在;

Match as regular expression:勾选表示正则表达式匹配,不勾选表示精准匹配;

Expected Value:期望值,搭配上述两个选项使用,精准匹配是写值,正则表达式匹配时,写表达式;

Expect null:判断是否为空;

Invert assertion(will fail if above condition met):结果取反;

在博客详情页下使用JSON断言:

1)断言成功

2)断言失败

11. 聚合报告

描述性能测试过程中整体的数据变化;通过性能测试的指标,衡量接口的性能;

  • Label:HTTP请求;
  • Samples:发起HTTP请求的调用数;
  • Average:平均响应时间,单位为毫秒;
  • Median:请求调用响应时间的中位数,单位为毫秒;
  • 90%Line:90%请求调用的响应时间,单位为毫秒;
  • 95%Line:95%请求调用的响应时间,单位为毫秒;
  • 99%Line:99%请求调用的响应时间,单位为毫秒;
  • Min:请求调用的最小响应时间,单位为毫秒;
  • Max:请求调用的最大响应时间,单位为毫秒;
  • Error:调用失败的请求占比,调用失败指响应断言失败或者请求调用出错;
  • Throughout:吞吐量,TPS/QPS,每秒处理的事务数;
  • KB/sec:每次网络传输的流量大小,单位为KB,以网络传输的大小衡量网络的吞吐量;

配置线程组线程数量为10:

启动测试,查看聚合报告:

12. 同步定时器(集合点)

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

Number of Simulated Users to Group by:表示并发的数量,当准备好的线程数大于等于配置的数量,发送HTTP请求;

设置线程组的线程数为6,并勾选InfInte,持续时间设置为1s:

勾选InfInte的原因:当线程最终剩余的数量小于同步定时器设置的3时,就会一直等待,测试无法结束,因此设置无限循环保证一直都能有3个线程,测试可以正常结束;

13. 事务控制器

将多个接口添加到一个事务中,多个接口就能以一个事务的方式来运行;

事务控制器的主要作用是,测试多个接口作为一个事务运行时,花费的总时间,用于评估接近真实场景的接口性能;

多个接口作为一个事务的运行时间:

14. 安装插件

实际测试中,往往需要逐步增加线程数,来对接口进行性能测试;当前的线程组线程数是固定的,不能满足测试要求,因此需要安装其它插件来实现这个功能;

安装其它插件前需要安装插件管理器,链接如下:

Install :: JMeter-Plugins.orgx

下载完成后,将下载好的jar包,放到如下目录:

1)安装监听器插件

2)安装过程组插件

插件下载完成后,可以看到新增的元件:

15. 梯度线程组

梯度线程组用于梯度增加线程数,在实际测试中,更为常用。

  • This group will start 100 threads,100表示总线程数;
  • First,wait for 0 seconds,0表示开始后立即启动线程,不进行等待;
  • Then start 10 threads,10表示开始先启动10个线程;
  • Next, add 10 threads every 5 seconds,10表示梯度,5表示时间间隔,每隔5s时间内增加10个线程;
  • using ramp-up 2 seconds,5表示这10个线程要在2s时间内启动;
  • Then hold load for 60 seconds,表示所有线程启动后持续60s;
  • Finally, stop 5 threads every 1 seconds,表示最终没1s结束5个线程;

16. Response Times Over Time

Response Times Over Time用于监听整个事务运行期间的响应时间;测试人员可以根据响应时间了解不同时间点的响应性能,从而发现可能存在的性能问题或瓶颈;

17. Transactions per Seconds

Transactions per Seconds即TPS,用于分析吞吐量,表示每秒钟处理的事务数;

反映了系统处理业务的能力,TPS越高,系统处理业务的能力就越强;

三、测试报告

JMeter的测试报告是一个全面详细的文档,提供了全面详细的执行结果信息,帮助用户评估系统性能并优化;

生成性能测试报告的命令:

jmeter -n -t 脚本文件 -l 日志文件 -e -o 目录

-n:无图形化运行

-t:被运行的脚本

-l:将运行信息写入日志文件,后缀为.jtl

-e:生成测试报告

-o:指定报告输出目录

注意:日志文件和目录可以不存在,如果存在要保证内容为空;否则会报错;

测试示例:

生成的index.html就是测试报告;

测试报告:

相关推荐
爱学习的执念8 小时前
高频Jmeter软件测试面试题
jmeter
小小测试开发1 天前
JMeter插件用法全解析:扩展自动化测试能力的实用指南
jmeter
卓码软件测评1 天前
第三方软件测评机构:【Gatling与JMeter的架构对比:异步与非阻塞I/O模型如何实现更高并发】
测试工具·jmeter·架构·测试用例·负载均衡·压力测试
小小测试开发1 天前
JMeter XPath2 Extractor用法全解析:精准提取XML/HTML响应数据
xml·jmeter·html
安然无虞2 天前
JMeter性能测试工具·下
开发语言·测试工具·jmeter
程序员三藏2 天前
Jmeter自动化测试
自动化测试·软件测试·python·测试工具·jmeter·测试用例·接口测试
小小测试开发2 天前
JSR223后置处理程序用法详解:JMeter复杂响应处理的终极方案
jmeter
小小测试开发3 天前
JMeter XPath提取器用法详解:XML/HTML响应数据提取神器
xml·jmeter·html
weixin_440730505 天前
jmeter请求头和参数总结
jmeter