性能测试之Jmeter的入门使用

news/2024/7/24 11:32:13 标签: jmeter, 压力测试, java

性能测试之Jmeter的入门使用

  • Jmeter概述
  • 安装Jmeter
  • Jmeter的基本使用
    • 添加线程组
    • 添加Http请求
    • 添加察看结果树
    • 添加聚合报告
    • 添加断言
    • 添加断言结果
    • 执行测试
    • 自定义变量
    • CSV可变参数
  • 数据库压力测试
    • 添加数据库驱动程序
    • 添加JDBC取样器
    • 添加JDBC配置
    • 执行测试
  • 结果分析总结
  • JMeter Address Already in use异常

Jmeter概述

Jmeter官网:https://jmeter.apache.org/

Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。

它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。

JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

安装Jmeter

安装Jmeter需要安装JDK。

Jmeter下载地址:https://jmeter.apache.org/download_jmeter.cgi

Jmeter文档:https://jmeter.apache.org/usermanual/get-started.html
在这里插入图片描述
解压下载的Jmeter包,得到Jmeter目录

在这里插入图片描述

bin:核心可执行文件,包含配置	
	jmeter.bat: windows启动文件
	jmeter: mac/linux启动文件
	
	jmeter-server:mac/Liunx分布式压测使用的启动文件
	jmeter-server.bat:mac/Liunx分布式压测使用的启动文件
	
	jmeter.properties: 核心配置文件
		语言切换:  默认#language=en 改为 language=zh_CN		

extras:插件拓展的包

lib:核心的依赖包
	ext:核心包
	junit:单元测试包

启动Jmeter

执行jmeter.bat脚本以启动Jmeter

在这里插入图片描述

语言切换:

修改jmeter.properties文件:  默认#language=en改为 language=zh_CN	(永久有效)

菜单栏-> options -> choose language (临时有效)

在这里插入图片描述

Jmeter的基本使用

添加线程组

添加->threads->线程组(控制总体并发)
在这里插入图片描述

java">线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。

Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2 秒钟启动10 个线程,也就是每秒钟启动5 个线程。

循环次数:每个线程发送请求的次数。如果线程数为10,循环次数为100,那么每个线程发送100 次请求。总请求数为10*100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。

Delay Thread creation until needed:直到需要时延迟线程的创建。

调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)

持续时间(秒):测试持续时间,会覆盖结束时间

启动延迟(秒):测试延迟启动时间,会覆盖启动时间

启动时间:测试启动时间,启动延迟会覆盖它。当启动时间已过,手动只需测试时当前时间也会覆盖它。

结束时间:测试结束时间,持续时间会覆盖它。

在这里插入图片描述

添加Http请求

线程组->添加-> 取样器 -> HTTP请求 (一个线程组下面可以增加多个取样器)

在这里插入图片描述

名称:

采样器名称

注释:

对这个采样器的描述

web服务器:

默认协议:http

服务器名称或IP :请求的目标服务器名称或IP地址	

默认端口是80

路径:服务器URL

当发送POST请求时,使用Use multipart/from-data方法发送,默认不选中。

在这里插入图片描述

添加察看结果树

线程组->添加->监听器->察看结果树
在这里插入图片描述
在这里插入图片描述

添加聚合报告

线程组->添加->监听器->聚合报告
在这里插入图片描述
在这里插入图片描述

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: 每秒接收数据量

添加断言

增加断言: 线程组 -> 添加 -> 断言 -> 响应断言
在这里插入图片描述

pply to(应用范围)

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

测试的响应字段:

响应文本:即响应的数据

响应代码:http的响应状态码

响应信息:http响应代码对应的响应信息

Response Header: 响应头

URL样本:

文档(文本):

请求数据:

模式匹配规则:

包括:包含在里面就成功

匹配:响应内容完全匹配,不区分大小写

equals:完全匹配,区分大小写

字符串:

否:

或者:

测试模板:

相应字段的值

自定义失败消息:

匹配后响应信息

在这里插入图片描述

添加断言结果

线程组-> 添加 -> 监听器 -> 断言结果
在这里插入图片描述

断言内容:取样器名称

断言失败,查看结果树任务结果颜色标红,反之绿色。

每个取样器可以添加单独的结果树,然后同时加多个断言,最外层可以加个结果树进行汇总

在这里插入图片描述

执行测试

线程组配置
在这里插入图片描述
http请求配置

在这里插入图片描述
设置断言
在这里插入图片描述
工具栏启动执行
在这里插入图片描述
查看结果树
在这里插入图片描述
在这里插入图片描述

聚合报告
在这里插入图片描述
断言结果
在这里插入图片描述

在这里插入图片描述

自定义变量

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

线程组->添加 ->配置原件-> 用户定义的变量
在这里插入图片描述
在这里插入图片描述

引用方式${XXX},在接口中变量中使用
在这里插入图片描述

CSV可变参数

读取CSV或Txt文本文件里面的参数

线程组->添加 -> 配置原件-> CSV数据文件设置
在这里插入图片描述

Jmeter.csv文件内容如下:
在这里插入图片描述
value1、value2分别对应Jmeter.csv文件内容中的A、B两列的值
在这里插入图片描述
使用${}引用即可
在这里插入图片描述

数据库压力测试

添加数据库驱动程序

在这里插入图片描述

添加JDBC取样器

线程组 ->添加->取样器-> jdbc request
在这里插入图片描述
设置使用哪个JDBC连接配置
在这里插入图片描述
Query Type 查询类型

select Statement :查询

Update Statement:修改

Callable Statement: 存储过程

Prepared select Statement :预编译查询(?占位符)

Prepared Update Statement:预编译修改(?占位符)

Commit :事务提交

Rollback:事务回滚

Auto Commit(false):自动提交事务

在这里插入图片描述
parameter values 参数值

parameter types  参数类型

variable names  sql执行结果变量名

result variable names 所有结果当做一个对象存储

query timeouts  查询超时时间 

Limit ResultSet:分页,返回数量

 handle results  处理结果集

在这里插入图片描述

添加JDBC配置

在这里插入图片描述

Max Number of connections : 最大连接数

MAX wait :最大等待时间

Auto Commit: 是否自动提交事务

DataBase URL : 数据库连接地址 jdbc:mysql://127.0.0.1:3306/demo

JDBC Driver Class : 数据库驱动,选择对应的mysql

username:数据库用户名

password:数据库密码

在这里插入图片描述

执行测试

简单测试
在这里插入图片描述
在这里插入图片描述
预编译查询
在这里插入图片描述
查看结果树
在这里插入图片描述
添加Debug取样器,查看详细信息
在这里插入图片描述在这里插入图片描述

结果分析总结

java">需要确定是否允许错误的发生或者错误率允许在多大的范围内

Throughput吞吐量每秒请求的数大于并发数,则可以慢慢的往上面增加。若压测的机器性能很好的情况下,出现吞吐量小于并发数,说明并发数不能再增加了,可以慢慢的往下减,找到最佳的并发数

压测结束,登陆相应的web服务器查看CPU等性能指标,进行数据的分析

最大的tps,不断的增加并发数,加到tps达到一定值开始出现下降,那么那个值就是最大的tps

最大的并发数:最大的并发数和最大的tps 是不同的概率,一般不断增加并发数,达到一个值后,服务器出现请求超时,则可认为该值为最大的并发数

压测过程出现性能瓶颈,若压力机任务管理器查看到的cpu、网络都正常,未达到90%以上,则可以说明服务器有问题,压力机没有问题。

影响性能考虑点包括:数据库、应用程序、中间件(tomact、Nginx)、应用属于CPU密集型还是IO密集型、网络和操作系统等方面

JMeter Address Already in use异常

原因

windows本身提供的端口访问机制问题。Windows提供给TCP/IP 链接的端口为1024-5000,并且要四分钟来循环回收。因此,在短时间内跑大量的请求时会将端口占满。

解决方案

参考:https://docs.microsoft.com/zh-CN/troubleshoot/windows-client/networking/connect-tcp-greater-than-5000-error-wsaenobufs-10055

使用CMD命令,执行regedit命令打开注册表
在这里插入图片描述

2.在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

右击parameters,添加一个新的DWORD,名字为MaxUserPort

双击MaxUserPort,输入数值数据为65534,基数选择十进制


同理,添加 TCPTimedWaitDelay:30 等待回收时间,单位秒

退出注册表编辑器,然后重启计算机

http://www.niftyadmin.cn/n/876540.html

相关文章

JWT的详细使用

JWT的详细使用一、JWTJWT概述优缺点令牌结构头部(Header)载荷(playload)签证(signature)Base64URL算法二、JJWT签发与验证token引入依赖创建token解析token设置过期时间自定义claims三、拦截器校验Token创建…

消息中间件之ActiveMQ的入门使用

消息中间件之ActiveMQ的入门使用一、JMS入门消息中间件常见消息中间件JMS简介JMS消息传递类型二、ActiveMQ下载与安装三、ActiveMQ入门1.引入依赖2.点对点模式消息生产者消息消费者执行测试3.发布/订阅模式消息生产者消息消费者执行测试四、Spring整合ActiveMQ1.spring-mq.xml配…

Spring Cloud之Eureka服务治理

Spring Cloud之Eureka服务治理一、Eureka概述服务端与客户端的关系注册中心的作用二、Eureka Server搭建单机环境搭建高可用环境搭建三、Eureka服务注册引入依赖配置application.yml启动类添加注解提供服务启动参数配置执行测试四、服务消费引入依赖配置启动类执行测试五、Eure…

注解 自用解析

* 注解:说明程序的 由计算机辨别 * 注释:代码说明* 定义:注解(Annotation),也叫元数据。一种代码级别的说明。是一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局…

Spring Cloud之Ribbon客户端负载均衡

Spring Cloud之Ribbon客户端负载均衡一、RibbonRibbon概述二、RestTemplateGet请求POST请求PUT请求DELETE请求三、创建Eureka-Server引入依赖配置配置启动类四、创建服务提供方引入依赖配置配置启动类暴露服务接口五、创建Ribbon消费者引入依赖配置Ribbon参数配置启动类消费服务…

反射 自用解析

(含从配置文件加载类) * 框架:半成品软件。可以在框架的基础上进行软件开发,简化编码,基础原理用到反射 * 反射:将类的各个组成部分封装为其他对象,这就是反射机制* 好处:1. 可以在程序运行过程中&#xf…

Redis之缓存穿透、击穿、雪崩问题与缓存删除、淘汰策略

Redis之缓存穿透、击穿、雪崩问题与缓存删除、淘汰策略一、缓存问题与解决缓存穿透缓存击穿缓存雪崩三者区别缓存预热二、缓存淘汰机制删除策略内存淘汰机制一、缓存问题与解决 缓存穿透 缓存穿透是指查询缓存和DB中都不存在的数据。 通过id查询,id一般大于0&…

SQL小白格式记录---MySQL

每一种数据库操作的方式存在不一样的地方,称为“方言”。 1.SQL通用语法1. SQL 语句可以单行或多行书写,以分号结尾。2. 可使用空格和缩进来增强语句的可读性。3. MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。4. 3 种注释* 单…