Jmeter性能测试

发布于:2025-09-07 ⋅ 阅读:(31) ⋅ 点赞:(0)

性能测试指标

并发数:   web服务器在一段时间处理浏览器请求而建立的http请求数或线程数;

吞吐量:   单位时间内处理的并发数;

响应时间:  对web系统而言,客户端请求发出到服务器,处理请求返回返回到客户端,页面渲染出来的时间.

事务:事务代表一个完整的功能及流程,一个接口,或者多个接口都可以是事务,具体看测试时咋定义设置的.

TPS:每秒处理的事务数,用于衡量系统在一定时间内能够处理的事务数,

QPS:每秒查询数,若一个事务中只有一个接口且是查询接口,则QPS=TPS

Jmeter

Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,基于Java多线程框架,模拟多用户

并发请求,并收集分析被测服务的 性能数据.对软件进行性能测试.

下载

官网Apache JMeter - Download Apache JMeter

环境配置

下载后打开Jmeter文件夹,  将文件bin路径复制,添加到环境变量的PATH中.  打开cmd,输入Jmeter

文本设置成中文

[你的JMeter安装目录]/bin/jmeter.properties

#language=en -> language=zh_CN

配置页面的颜色:  点击选项 中的 外观

原理

一个 JMeter 测试计划就是在定义:有多少个用户(线程组),在什么环境下(配置元件),按照什么逻辑(逻辑控制器),执行哪些操作(采样器),并对结果做何处理(监听器)。

基本使用流程

1.右击测试计划,点击添加线程组;

2.在线程组下添加 HTTP 取样器

3.配置HTTP请求信息

4.添加查看结果树的监听器

5.点击启动,查看测试结果

组件
线程组

线程数:模拟用户数量,一个线程相当于一个用户;

Ramp-Up时间: 所有线程的启动时间,和线程数决定并发增长的速率;

循环次数: 线程启动后执行测试脚本的次数,与线程数共同决定了总迭代次数,  勾选永远的话需要搭配调度器使用,勾选调度器,设置持续时间(线程执行测试脚本的时间),启动延迟(延迟多长时间启动线程);如果没有配置循环次数则系统默认勾选永远.

调度器模式下的时间线: 启动延迟 - Ramp-Up(线程启动) - 持续时间 -测试结束 

HTTP取样器

构造http请求

查看结果树

查看请求,响应的信息

取样器结果:统计请求相关的信息
Thread Name:线程组名称
Sample time:发送请求时间
load time:响应时间
Response code :接口响应状态码
请求:HTTP请求的请求头和请求体的详细信息
响应数据:HTTP响应的响应头和响应体的详细信息
HTTP Cookie管理器

跟Web浏览器的一样可以存储发送Cookie .如果http请求,响应中有Cookie,则HTTP Cookie管理器会自动该Cookie,用于将来对该特点网站的所以请求.每个Jmeter线程都有自己的Cookie存储区,都有自己的会话.可以通过查看结果树监听器查看.

缓存配置可以选择standard也可以选择compatibility(兼容的) ,也可以手动添加一些Cookie.

添加了Cookie管理器后,会自动存储和发送Cookie.

HTTP默认请求值

协议,ip,端口号等信息所有请求都一样,所以就单独配置,HTTP取样器就不用配置了

HTTP信息头管理器

给HTTP请求头配置默认的数据

作用域:

JMeter元件遵循层级关系,信息头管理器会对其所在层级及以下的所有子元件生效;

放在线程组级别:对该线程组下的所有HTTP请求生效;

放在某个HTTP请求采样器级别:只对该特定请求生效;

放在测试计划级别:对整个测试计划中的所有HTTP请求生效;

如果存在多个信息头管理器,JMeter会合并它们的内容。如果定义了相同的头(如两个Content-Type),则离采样器更近的那个会覆盖上层的.

常见请求头:

  1. 指定内容类型(Content-Type):极其重要的一个头。它告诉服务器请求体的格式是什么。如:

    • 如果 Content-Type 设置错误,服务器将无法正确解析你提交的数据,导致请求失败。

    • Content-Type: application/json -> 请求体是JSON格式。

    • Content-Type: application/x-www-form-urlencoded -> 请求体是表单格式(key1=value1&key2=value2)。

    • Content-Type: multipart/form-data -> 用于文件上传。

  2. 处理会话(Session)和Cookie:虽然Cookie通常由 HTTP Cookie 管理器 自动处理,但有时也需要手动设置某些头。如:Cookie: JSESSIONID=ABCDEF123456789;

  3. 控制缓存行为:可以模拟浏览器缓存行为,例如 Cache-Control: no-cache 告诉服务器不要返回缓存的资源。

JSON提取器

接口响应成功后,对接口返回值的对应字段进行提取保存,用于其他接口的参数配置

针对某个http请求接口添加JSON提取器

  1. 博客首页的响应数据: 要获取第二条数据的blogId

[
 {
 "postTime": "2024-04-18 05:20:16",
 "title": "ddddd",
 "blogId": 13,
 "userId": 3,
 "content": "# 在这⾥写下⼀篇博客\r\nd },
 {
 "postTime": "2022-10-22 02:38:21",
 "title": "同学,请问你今天学习了吗",
 "blogId": 12,
 "userId": 3, 
 "content": "今天是2022年10⽉22⽇17:42分,为了能够早⽇将最新版本的测试课件呈现
给同学们,我已经开始奋..."
 }
]

2.添加JSON配置

 从JSON提取数据,构造JSON Path的语法

参考文档:

3.给HTTP请求配置JSON提取的参数: 用${ 参数名} 

用户定义的变量

自己定义一些变量,可以在多个脚本中引用.在这里进行统一管理修改.

在HTTP请求里配置自定义变量 用${ 变量名}

JSON断言

当发送http请求过多,每个http请求返回的响应结果是否符合预期,我们不能全部打开查看结果树进行检查,效率太低. 可以配置JSON断言,让系统进行判断响应结果是否正确.

1. 若不选Additionally assert value,不能添加期望断言值,则可用来判断字段是否存在
2. 选择Additionally assert value,则必须添加Expected Value期望的断言值
3. 若不选Match as regular expression正则匹配,则Expected Value必须填写完整,  否则期望值与提取的JSON值 进行对比,少⼀个字符都会导致断言失败
4. 若选择Match as regular expression正则匹配,则Expected Value可以仅写上部分关键词即可断
言成功
CSV 数据文件设置
当我们执行登录接口的性能测试时,手动配置了用户名和密码为固定的username和 password,然而实际使用中不可能只有⼀个用户登陆,为了模拟更真实的登录环境,我们需要提供更多的用户username和password来实现登录操作.

1.添加CSV Data Set Config

2.编辑Excel表,里面添加需要的数据,保存在测试脚本同一个文件夹里(方便找到)

3.配置请求接口的参数: ${参数名}

4.配置CSV

5.查看结果树

同步定时器

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

当多个线程同时启动,不一定是同时发送请求,执行任务,因为有的线程启动得快有的启动得慢, 这样无法达到真正的并发效果,定时器的作用可以理解为一个集合点,当指定数量线程都准备好后,再一起释放,瞬间对 服务器产生很大的压力,模拟秒杀,抢购这种场景. 虽然请求同时发送,但不能确保请求同时到达服务器,所以只是尽量真实的模拟并发场景.

1.模拟用户组数量必须要小于总线程数,总线程数最好是模拟数的整数倍;

2.如果剩下的总线程数达不到模拟组的数量,则等待超时时间过了,就将剩下的全部释放;

3.如果总线程数小于模拟线程数,也可以设置循环次数为永远,用调度器配置循环时间,这样已经被释放的线程不会休眠,会继续充当模拟线程被集中释放.

事务控制器

如果不添加事务控制器,那一个接口为一个事务,添加了的话,可以将多个请求看做一个事务.

在进行页面性能测试或API性能测试时,如提交订单的过程中,将调用的多个接口视为同一个事务进行性能测试,能得到更接近真实场景的性能测试结果.

将多个 HTTP请求放在一个事务管理器下,作为一个事务管理.
安装插件

在实际压测过程中,线程数通常是逐步增加,而不是一上来就配置让程序到达极限的线程数. 为了模拟这个线程数逐步增加的过程,需要安装新的插件来实现.

Install :: JMeter-Plugins.org A custom set of plugins for Apache JMeter, not affiliated with Apache Software Foundation, graphs, load shapers, new functions.https://jmeter-plugins.org/install/Install/

点击下载,并将文件移到lib/ext文件目录下,重启Jmeter

点击插件管理的小蝴蝶

安装监听器插件,线程组插件

搜索这两个安装

安装好后,点击Stepping Thread Group可以实现梯度压测

自定义数据

This group will start:启动多少个线程,同线程组中的线程数
First, wait for:等待多少秒才开始压测,⼀般默认为0
Then start:⼀开始有多少个线程数,⼀般默认为0
Next,add:下⼀次增加多少个线程数
threads every:当前运行多长时间后再次启动线程,即每⼀次线程启动完成之后的的持续时间;
using ramp-up:启动线程的时间;若设置为5秒,表示每次启动线程都持续5秒
thenhold loadfor:线程全部启动完之后持续运行多长时间
finally,stop/threadsevery:多长时间释放多少个线程;若设置为5个和1秒,表示持续负载结束之后
每1秒钟释放5个线程
生成报告

查看结果树只是测试人员调试的时候查看的,让开发人员看性能测试的结果还是要更全面详细的性能报告.

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

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

-n:  无图形化运行

-t:  被运行的脚本

脚本文件 :测试脚本的名字,点击 文件-打开 可以查看

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

日志文件: 指定日志文件名

-e :生成测试报告

-o :指定报告输出目录

目录: 指定报告目录. 日志文件和目录可以不存在,如果存在要保证里面为空,不然会出错.

输入命令:

双击index.html文件查看性能报告


网站公告

今日签到

点亮在社区的每一天
去签到