[转帖]【压测】通过Jemeter进行压力测试(超详细)

通过,jemeter,进行,压力,测试,详细 · 浏览次数 : 0

小编点评

**背景一** 通过SpringCloudGateway整合Nacos进行负载均衡和动态路由选择。由于Nacos服务发现有一定的延迟性,所以在服务突然挂机的时候,QPS较大的情况下,还是会有部分的请求进入到这个服务。为了解决这个问题,改写了一点点nacos基于ribbon的负载选择,通过筛选最近响应时间较短的服务进行路由选择。 **二、关于JMeter** JMeter是一个基于Java的压力测试工具,用于对软件做压力测试,它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。 **三、准备工作** 因为JMeter是使用JAVA写的,所以使用JMeter之前,先安装JAVA环境。 解压下载的二进制包,进入bin目录,双击jmeter.bat启动程序。 启动之后会有两个窗口,一个cmd窗口,一个JMeter的 GUI。 **四、创建测试** 4.1、创建线程组 在“测试计划”上右键 【添加】–>【Threads(Users)】–>【线程组】 设置线程数和循环次数。 **四、创建元件** 4.2、配置元件配置我们需要进行测试的程序协议、地址和端口 注意:当所有的接口测试的访问域名和端口都一样时,可以使用该元件,一旦服务器地址变更,只需要修改请求默认值即可 **四、构造HTTP请求** 4.3、构造HTTP请求 在“线程组”右键 【添加-】->【samlper】–>【HTTP 请求】设置我们需要测试的API的请求路径和数据。我这里是用的json **四、添加HTTP请求头** 4.4、添加HTTP请求头 在我们刚刚创建的线程组上右键 【添加】–>【HTTP信息头管理器】。因为我要传输的数据为json,所以设置一个 Content-Type:application/json **四、添加断言** 4.5、添加断言 在在我们刚刚创建的线程组上右键 【添加】–>【断言】–>【响应断言】。根据响应的数据来判断请求是否正常。我在这里只判断的响应代码是否为200。还可以配置错误信息 **四、添加察看结果树** 4.6、添加察看结果树 在在我们刚刚创建的线程组上右键 【添加】–>【监听器】–>【察看结果树】。 直接添加,然后点击运行按钮就可以看到结果了。 **四、添加Summary Report** 4.7、添加Summary Report 在在我们刚刚创建的线程组上右键 【添加】–>【监听器】–>【Summary Report】。 直接添加,然后点击运行按钮就可以看到结果了。 **五、执行测试计划** 记得点保存,这时候会生成一个pem文件

正文

背景

通过SpringCloudGateway整合Nacos进行负载均衡和动态路由选择。由于Nacos的服务发现有一定的延迟性,所以在服务突然挂机的时候,QPS较大的情况下,还是会有部分的请求进入到这个服务。为了解决这个问题,改写了一点点nacos基于ribbon的负载选择,通过筛选最近响应时间较短的服务进行路由选择。网关是一个项目的命脉,所以便需要进行压测。
在这里插入图片描述

一、前言

压力测试是每一个Web应用程序上线之前都需要做的一个测试,他可以帮助我们发现系统中的瓶颈问题,减少发布到生产环境后出问题的几率;预估系统的承载能力,使我们能根据其做出一些应对措施。所以压力测试是一个非常重要的步骤,下面我带大家来使用一款压力测试工具JMeter。

二、关于JMeter

Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。

  • 官网:Apache JMeter - Download Apache JMeter
  • 这里我选用了 4.0 版本的二进制包:http://mirror.bit.edu.cn/apache//jmeter/binaries/apache-jmeter-4.0.zip

三、准备工作

  • 因为JMeter是使用JAVA写的,所以使用JMeter之前,先安装JAVA环境,本文就不讲安装JAVA环境了。主要就是安装JDK。

  • 解压下载的二进制包,进入bin目录,双击jmeter.bat启动程序。
    启动之后会有两个窗口,一个cmd窗口,一个JMeter的 GUI。前面不要忽略CMD窗口的提示信息:
    在这里插入图片描述

  • 启动后会看到JMeter界面,如下:
    在这里插入图片描述

  • 注意看CMD窗口的提示信息:

================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use NON GUI Mode:
   jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
   Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 上面的意思就是:不要使用GUI运行压力测试,GUI仅用于压力测试的创建和调试;执行压力测试请不要使用GUI。使用下面的命令来执行测试:
 jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
  • 1
  • 并且修改JMeter批处理文件的环境变量:HEAP=“-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m”;这里根据你们的配置灵活设置
  • 更改语言为中文
    官方默认为我们提供了简体中文。通过 【Options】->【Choose Language】变更为简体中文

四、创建测试

4.1、创建线程组

在“测试计划”上右键 【添加】–>【Threads(Users)】–>【线程组】
在这里插入图片描述

设置线程数和循环次数。我这里设置线程数为500,循环一次
在这里插入图片描述

4.2、配置元件

在这里插入图片描述

配置我们需要进行测试的程序协议、地址和端口
在这里插入图片描述

注意:当所有的接口测试的访问域名和端口都一样时,可以使用该元件,一旦服务器地址变更,只需要修改请求默认值即可

4.3、构造HTTP请求

在“线程组”右键 【添加-】->【samlper】–>【HTTP 请求】设置我们需要测试的API的请求路径和数据。我这里是用的json
在这里插入图片描述

4.4、添加HTTP请求头

在我们刚刚创建的线程组上右键 【添加】–>【配置元件】–>【HTTP信息头管理器】。
因为我要传输的数据为json,所以设置一个 Content-Type:application/json
在这里插入图片描述

4.5、添加断言

  • 在我们刚刚创建的线程组上右键 【添加】–>【断言】–>【响应断言】。

  • 根据响应的数据来判断请求是否正常。我在这里只判断的响应代码是否为200。还可以配置错误信息

在这里插入图片描述

4.6、添加察看结果树

  • 在我们刚刚创建的线程组上右键 【添加】–>【监听器】–>【察看结果树】。

  • 直接添加,然后点击运行按钮就可以看到结果了。

在这里插入图片描述

4.7、添加Summary Report

  • 在我们刚刚创建的线程组上右键 【添加】–>【监听器】–>【Summary Report】。

  • 直接添加,然后点击运行按钮就可以看到结果了。
    在这里插入图片描述

为了不引起不必要的争论,隐藏了TPS。此数据不具备任何价值,仅仅为文章演示。

4.8、测试计划创建完成

记得点保存,这时候会生成一个pem的文件

五、执行测试计划

前面我们说过,执行测试计划不能用GUI,需要用命令行来执行。
在这里插入图片描述

我这里执行的命令为:

jmeter -n -t testplan/RedisLock.jmx -l testplan/result/result.txt -e -o testplan/webreport
  • 1
  • testplan/RedisLock.jmx 为测试计划文件路径
  • testplan/result/result.txt 为测试结果文件路径
  • testplan/webreport 为web报告保存路径。
  • Web报告如下:

在这里插入图片描述

线程数量和循环次数将会影响最终的测试报告,如果服务器资源有限,注意采用阶梯测试。我下载的5.5版本的jemeter没有阶梯测试的插件,选择5.4.1的有,这里需要注意一下。

总结

对于压测,需要采取的策略是阶梯压测,然后让他持续一段时间,看看所测试的服务是否平滑且正常运行。

文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树首页概览121869 人正在系统学习中

与[转帖]【压测】通过Jemeter进行压力测试(超详细)相似的内容:

[转帖]【压测】通过Jemeter进行压力测试(超详细)

文章目录 背景一、前言二、关于JMeter三、准备工作四、创建测试4.1、创建线程组4.2、配置元件4.3、构造HTTP请求4.4、添加HTTP请求头4.5、添加断言4.6、添加察看结果树4.7、添加Summary Report4.8、测试计划创建完成 五、执行测试计划总结 背景 通过SpringC

[转帖]jmeter线程组与循环次数的区别

在压测的时候,有些接口需要携带登录信息,但是我们只想登录一次,然后其他接口进行多用户压测,此时你会怎么办?用仅一次控制器实现吗?下面我们来看看用仅一次控制器能不能实现 压测时jmeter中的线程数是模拟并发用户的,我们设置线程数5,然后登录请求添加一个仅一次控制器,我们通过察看结果树看到登录请求是执

[转帖]关于kafka压力测试(使用官方自带脚本测试)

文章目录 kafka官方自带压测脚本文件Producer生产者环境测试测试命令返回测试结果 Consumer消费者环境测试测试命令测试结果说明 提升kafka的吞吐量可通过以下的方式来提升kafka生产者的吞吐量buffer.memorycompression.typebatch.sizelinge

[转帖]MinIO系列7 - Minio性能压测

https://www.zhihu.com/people/keen-wang 前言 声明:此文为本人历史笔记的整理,文章实际撰写时间为2021年2月份,所以本中所使用的相关组件版本较老。此文是通过压力测试以理解MinIO在当前硬件条件下能提供的性能,以及相关的资源消耗情况。转载请注明出处,谢谢! 前

[转帖]Java使用火焰图查看系统瓶颈

场景 一般情况下,我们会对现有系统进行压测等方式,来了解系统最大的吞吐量等等,通过这种方式得知系统在生产环境下可扛住的压力,如果我们想了解在压测的链路过程中,是哪些地方执行时间过长,影响了系统的吞吐量,可以使用火焰图的方式来观察。 工具 生成火焰图需要两个工具: 1. async-profiler:

[转帖]HTTP压测工具wrk使用指南

https://www.cnblogs.com/liufarui/p/11063328.html 【前言】 笔者使用wrk,是为了测试nginx转发报文的时候set_proxy_header规则,然后发现wrk尤其的好用,所以在这里写下来,以后用的时候还能查一查。 【安装】 不讲概念了,直接讲安装。

[转帖]Redis压测工具(redis-benchmark)

目录 1、简介 2、参数 3、操作 1、简介 Redis 自带了一个叫 redis-benchmark 的工具来模拟 N 个客户端同时发出 M 个请求。(类似于 Apache ab 程序)。 Redis下载地址: https://redis.io/download 2、参数 redis-benchm

[转帖]sysbench压测postgresql(mysql同理)

准备创建表和数据:sysbench --db-driver=pgsql --time=1 --threads=1000 --report-interval=5 --pgsql-host=192.168.1.35 --pgsql-port=5001 --pgsql-user=testpgs --pgs

[转帖]kafka压测多维度分析实战

设置虚拟机不同的带宽来进行模拟压测 kafka数据压测 1、公司生产kafka集群硬盘:单台500G、共3台、日志保留7天。 1.1 版本:1.1.0 2、压测kafka。 2.1 使用kafka自带压测工具:bin/kafka-producer-perf-test.sh 命令参数解释: --num

[转帖]PostgreSQL 压测工具pgbench

1.命令 pgbench --help pgbench is a benchmarking tool for PostgreSQL. Usage: pgbench [OPTION]... [DBNAME] Initialization options: -i, --initialize invoke