回顾Jmeter压力测试(三)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 回顾Jmeter压力测试(三)

GUI实战部分



通过菜单了解Jmeter大致的内容之后,我们依靠实战来更深入的理解各种功能


线程组的基本使用:


准备部分:


  1. 准备一个springBoot项目,或者找一个可以访问的接口,当然最好不要访问一些外网IP,容易误认为攻击封IP
  2. 比如个人写了一个简单的DEMO:


@RestController
@RequestMapping("/jmeter")
public class JmeterTest {
    @RequestMapping("/runTest1")
    public Object testThread(){
        return "hello-world";
    }
}
复制代码


1 添加->threads->线程组(控制总体并发)

案例:如下图所示,添加一个20个线程,循环1次的线程组,在2秒内完成


网络异常,图片无法展示
|


  • 线程数:虚拟用户数。一个虚拟用户占用一个进程或线程
  • 准备时长(Ramp-Up Period(in seconds)):全部线程启动的时长,比如100个线程,20秒,则表示20秒内100个线程都要启动完成,每秒启动5个线程
  • 循环次数:每个线程发送的次数,假如值为5,100个线程,则会发送500次请求,可以勾选永远循环

2 线程组 -> 添加-> Sampler(采样器) -> Http请求


网络异常,图片无法展示
|


一个线程组下面可以增加几个Sampler


  • 名称:采样器名称
  • 注释:对这个采样器的描述
  • web服务器:
  • 默认协议是http
  • 默认端口是80
  • 服务器名称或IP :请求的目标服务器名称或IP地址
  • 路径:服务器URL
  • Use multipart/from-data for HTTP POST :当发送POST请求时,使用`Use multipart/from-data方法发送,默认不选中。

吐槽:感觉中间的选框太小了

3 请求-查看测试结果


网络异常,图片无法展示
|


如之前介绍菜单所说,还需要增加一个监听器,收集请求的最终结果。

操作如下:线程组->添加->监听器->察看结果树

如上图所示,最终的测试结果都是正确,两秒内开启20个线程并发访问,压力还是比较小的。


断言的基本使用


上面的案例是一个最简单的线程组的使用,有点类似postMan请求接口。下面了解一下断言是如何使用的。

  1. 增加断言: 线程组 -> 添加 -> 断言 -> 响应断言


网络异常,图片无法展示
|


下面增加一个相应的断言,响应断言里面的选择内容如下:


测试字段:根据测试字段匹配结果,

中间:apply to(应用范围): Main sample only: 仅当前父取样器 进行断言,一般一个请求,如果发一个请求会触发多个,否则就使用sub sample(比较少用)

匹配规则:一些逻辑的匹配规则,比如包含,匹配,相等

这一块的组合形式比较丰富,下面简单举几个例子:

  • 响应文本:即响应的数据,比如json等文本
  • 响应代码:http的响应状态码,比如200,302,404这些
  • 响应信息:http响应代码对应的响应信息,例如:OK, Found
  • Response Header: 响应头

模式匹配规则:

  • 包括:包含在里面就成功
  • 匹配:响应内容完全匹配,不区分大小写
  • equals:完全匹配,区分大小写

断言结果监听器: 线程组-> 添加 -> 监听器 -> 断言结果

里面的内容是sampler采样器的名称 断言失败,查看结果树任务结果颜色标红(通过结果数里面双击不通过的记录,可以看到错误信息)

2、响应断言案例:

给出一个请求的信息内容:


Thread Name:20线程2秒内容完成 1-1
Sample Start:2021-01-09 19:57:43 CST
Load time:1
Connect Time:0
Latency:1
Size in bytes:173
Sent bytes:134
Headers size in bytes:162
Body size in bytes:11
Sample Count:1
Error Count:0
Data type ("text"|"bin"|""):text
Response code:200
Response message:
复制代码


下面创建一个响应断言:

我们指定响应文本为:Hello-world,测试字段为响应文本,在下方输入hello-world用于增加断言的信息。


网络异常,图片无法展示
|


在查看結果树里面就可以看到对应的信息内容了


网络异常,图片无法展示
|


大小断言:可以断言响应请求里面的size大小,单位为Byte

断言的功能相对比较简单,这里仅仅列出了一些简单案例


聚合报告分析


操作方式:新增聚合报告:线程组->添加->监听器->聚合报告(Aggregate Report)


网络异常,图片无法展示
|


介绍一下英文版的内容对应列的含义


  • lable: sampler的名称
  • Samples: 一共发出去多少请求,例如10个用户,循环10次,则是 100
  • Average: 平均响应时间
  • Median: 中位数,也就是 50% 用户的响应时间
  • 90% Line : 90% 用户的响应不会超过该时间 (90% of the samples took no more than this time. The remaining samples at least as long as this)
  • 95% Line : 95% 用户的响应不会超过该时间
  • 99% Line : 99% 用户的响应不会超过该时间
  • min : 最小响应时间
  • max : 最大响应时间
  • Error%:错误的请求的数量/请求的总数
  • Throughput: 吞吐量——默认情况下表示每秒完成的请求数(Request per Second) 可类比为qps KB/Sec: 每秒接收数据量

新增聚合报告之后,就可以在聚合报告里面看到对应的结果,注意聚合报告的内容都是累加的


用户自定义变量


如果想要设置一些常用的变量配置放到当前的线程组里面,可以使用如下的方式

作用:

很多变量在全局中都有使用,或者测试数据更改,可以在一处定义,四处使用(比如服务器地址)

操作方法:


网络异常,图片无法展示
|


线程组->add -> Config Element(配置原件)-> User Definde Variable(用户定义的变量)

如上图配置完成之后,引用方式如下:${XXX},在接口中变量中使用,如下所示:


网络异常,图片无法展示
|


CSV可变参数


网络异常,图片无法展示
|


1、线程组->add -> Config Element(配置原件)-> CSV data set config (CSV数据文件设置)

我们在电脑的任意位置配置txt文件,配置方式如下:

新建一个txt文件,同时注意使用utf-8的编码进行保存。

2、在读取的配置文件里面,同时使用多个自定义参数


username,password,gender
zhangsan,test001,1
lisi,test002,2
wanglaowu,test003,2
laoliu,test004,1
复制代码


网络异常,图片无法展示
|


接着我们可以唉csv可变参数里面按照要求进行配置:


  • 文件名:csv文件的名字
  • 文件编码:当前文件的编码格式
  • 变量名称:对应标头,用逗号分隔
  • 忽略首行:蛀牙要设置变量名称的时候才会生效
  • 分隔符:默认分隔符为逗号
  • 是否带有引号:(未验证)
  • 遇到文件结束符之后再次循环:意味着是否需要重复的读取文件的内容
  • 遇到文件结束符终止线程:只读一遍文件
  • 线程共享模式:默认应用当前所有线程组


JDBC request压测Mysql



简单应用入门:


在正式进行使用之前,需要随意建立一个数据库或表。


CREATE TABLE `admin`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `account` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `password` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `power` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 52 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
复制代码


使用Jdbc进行压力测试,需要依赖jar包实现,不同的版本jar包压测的结果可能会有出入

  1. Thread Group -> add -> sampler -> jdbc request

这时候进行请求是肯定无效的,我们只是建立的一个采样器:


  1. jar包添加  mysql-connector-java-5.1.30.jar

我们需要在配置元件里面,对于个人的JDBC进行配置


网络异常,图片无法展示
|


  1. JDBC connection Configuration 配置


网络异常,图片无法展示
|


Max number of connections:最大连接数

Time-between-eviction-runs-millis:指定空闲连接检查、废弃连接清理、空闲连接池大小调整之间的操作时间间隔

variable name for created pool:创建池的变量名

Auto commit:是否自动提交

Transaction Isolation:事务隔离级别(注意Mysql默认级别为读已提交)

Preinit Pool:预初始化池

Test while idle:空闲线程测试

Soft Min Evictable Idle Time:软最小可收回空闲时间

Validation Query:验证查询

最下面的部分为JDBC连接,最后一项是连接的参数配置。

DataBase URL : 数据库连接地址 jdbc:mysql://127.0.0.1:3306/blog JDBC Driver Class : 数据库驱动,选择对应的mysql username:数据库用户名 password:数据库密码


  1. mysql-connector-java.xxx.jar拷贝到jmeter的classpath目录:(核心步骤)


网络异常,图片无法展示
|


  1. 注意一下配置一定要准确,否则请求会抛出错误,请求失败也不要慌,多看看返回的提示信息,个人在实验的过程中也不是一次成功的:


网络异常,图片无法展示
|


  1. 发起测试请求:


网络异常,图片无法展示
|


下面的数据为随便录入的一些数据,可以参考自己的测试结果


网络异常,图片无法展示
|


查询参数:


GUI在查询参数这一部分不是十分好,下面说下如果需要使用?这一类形式替换要如何处理

如果使用占位符,在jmeter的GUI界面,需要使用括号进行替换,(1)代表取第一个参数。


网络异常,图片无法展示
|


网络异常,图片无法展示
|


下面为填入的内容介绍:

**Variable name:**这里写入数据库连接池的名字(和JDBC Connection Configuration名字保持一致 ) **Query:**里面填入查询数据库数据的SQL语句(填写的SQL语句末尾不要加“;”) **parameter valus:**数据的参数值 **parameter types:**数据的参数类型 **cariable names:**保存SQL语句返回结果的变量名 **result cariable name:**创建一个对象变量,保存所有返回结果 **query timeout:**查询超时时间 **handle result set:**定义如何处理由callable statements语句返回的结果


分布式压测


官网教程: jmeter.apache.org/usermanual/…

  • 普通压测:单台机可以对目标机器产生的压力比较小,受限因素包括CPU,网络,IO等
  • 分布式压测:利用多台机器向目标机器产生压力,模拟几万用户并发访问


由于分布式的压测一般对于服务器的配置要求较高,个人一个弱鸡服务器就不献丑了,这里推荐一篇分布式压测文章推荐:

简书文章:www.jianshu.com/p/5c04792c3…

官方文档:jmeter.apache.org/usermanual/…

Jmeter分布式压测原理(了解)


1、总控机器的节点master,其他产生压力的机器叫“肉鸡” server

2、master会把压测脚本发送到 server上面

3、执行的时候,server上只需要把jmeter-server打开就可以了,不用启动jmeter

4、结束后,server会把压测数据回传给master,然后master汇总输出报告

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
SQL JavaScript 前端开发
VUE3(三十二)vue使用xlsx解析excel文件
工作中发现了一个比较有意思的前端插件xlsx,可以解析excel文件。 之前上传excel文件一般前端只负责文件上传,文件上传成功之后在后端进行解析,后端解析excel的时候使用的是phpexcel,也还是挺方便的
1267 0
|
3月前
|
前端开发 Java jenkins
Jmeter压力测试工具全面教程和使用技巧。
JMeter是一个能够模拟高并发请求以检查应用程序各方面性能的工具,包括但不限于前端页面、后端服务及数据库系统。熟练使用JMeter不仅能够帮助发现性能瓶颈,还能在软件开发早期就预测系统在面对真实用户压力时的表现,确保软件质量和用户体验。在上述介绍的基础上,建议读者结合官方文档和社区最佳实践,持续深入学习和应用。
883 10
|
Oracle 关系型数据库 MySQL
CentOS7安装MariaDB成功的实践
CentOS7安装MariaDB成功的实践
343 0
|
机器学习/深度学习 图计算 计算机视觉
【YOLOv8改进 - 注意力机制】 CascadedGroupAttention:级联组注意力,增强视觉Transformer中多头自注意力机制的效率和有效性
YOLO目标检测专栏探讨了Transformer在视觉任务中的效能与计算成本问题,提出EfficientViT,一种兼顾速度和准确性的模型。EfficientViT通过创新的Cascaded Group Attention(CGA)模块减少冗余,提高多样性,节省计算资源。在保持高精度的同时,与MobileNetV3-Large相比,EfficientViT在速度上有显著提升。论文和代码已公开。CGA通过特征分割和级联头部增加注意力多样性和模型容量,降低了计算负担。核心代码展示了CGA模块的实现。
|
Java 程序员
驼峰命名法在编程中的应用
驼峰命名法在编程中的应用
|
Dubbo Java 测试技术
性能基础之浅谈常见接口性能压测
【4月更文挑战第26天】性能基础之浅谈常见接口性能压测
508 1
性能基础之浅谈常见接口性能压测
|
存储 JSON 安全
网络原理 - HTTP / HTTPS(2)——http请求
网络原理 - HTTP / HTTPS(2)——http请求
449 2
|
测试技术
性能测试包括哪些方面?
性能测试是评估电力系统响应时间、吞吐量和资源利用率的关键步骤,确保系统在不同负载下表现良好。它包括响应时间、吞吐量、资源利用率和稳定性测试,通过负载、压力、基准和故障恢复测试来检验系统性能。性能测试对于系统正常运行、问题发现及优化升级至关重要。
性能测试包括哪些方面?
|
Java Apache 索引
POI操作大全(动态合并单元格,为单元格生成一个自定义的数据显示格式,自定义公式计算结果生成,读取excel,word文件在生成图片,word指定位置生成图片)
POI操作大全(动态合并单元格,为单元格生成一个自定义的数据显示格式,自定义公式计算结果生成,读取excel,word文件在生成图片,word指定位置生成图片)
1974 0
|
SQL Java 数据库连接
Springboot框架整合Spring Data JPA操作数据
Spring Data JPA是Spring基于ORM和JPA规范封装的框架,简化了数据库操作,提供增删改查等接口,并可通过方法名自动生成查询。集成到Spring Boot需添加相关依赖并配置数据库连接和JPA设置。基础用法包括定义实体类和Repository接口,通过Repository接口可直接进行数据操作。此外,JPA支持关键字查询,如通过`findByAuthor`自动转换为SQL的`WHERE author=?`查询。
434 0