手把手教你 - JMeter压力测试

前言

压力测试是每一个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 链接地址摆好了, 大家点击进去官网下载。

当然, 如果你不想去官网下载, 我在下面也准备了一份安装包供你下载安装使用。基于版本 - JMeter5.6.3

官网下载界面:
在这里插入图片描述
我在这里准备了一份安装包, 他是 .tgz 格式的; 需要自行解压缩, 你可选择7-zip 或 WinRAR 等第三方软件进行解压缩; 这里我使用 Windows 命令行方式解压缩。

安装包下载链接(百度云盘): apache-jmeter-5.6.3.tgz
链接: https://pan.baidu.com/s/1lxhnBbaKHJmRggTjWPjb5Q?pwd=xy74 提取码: xy74

用Windows命令行解压缩即可。操作步骤如下:

  • (1)进入存放压缩包文件夹,搜索栏输入cmd 打开命令行(回车)
  • (2)然后录入tar -xvzf + 需要解压的文件所在的路径(回车)
  • (3)解压完成后在系统用户目录下可以找到解压的文件

在这里插入图片描述
在这里插入图片描述
进入bin目录,使用jmeter.bat启动程序。
在这里插入图片描述
注: jmeter需要jdk环境。对应的jdk版本不可太低,一般jmeter3.0的对应jdk1.7,jmeter4.0对应jdk1.8以上;环境变量相关配置此处不赘述了。

启动之后会有两个窗口,一个cmd窗口,一个JMeter的 GUI。

cmd窗口(没有安装java环境)
在这里插入图片描述

cmd窗口(已正确安装并配置Java环境)
在这里插入图片描述
JMeter的 GUI 窗口(注意看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
================================================================================

翻译:不要使用GUI运行压力测试,GUI仅用于压力测试的创建和调试;执行压力测试请不要使用GUI。

使用如下命令执行测试(这里你可暂且跳过, 下面会讲到具体使用):

 jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]

启动后会看到JMeter界面
在这里插入图片描述
更改语言为中文: 官方为我们提供了简体中文。通过 【Options】->【Choose Language】变更为简体中文
在这里插入图片描述
当然, 如果你想在压测完成之后执行测试计划, 那么你还需要为JMeter配置环境变量; 这里我就不再阐述了, 同学们自己摸索配置哈! 其实不配置是不影响你使用Jmeter压测的。

创建测试

创建线程组

“测试计划”上右键 【添加】–>【Threads(Users)】–>【线程组】
在这里插入图片描述
设置线程数和循环次数。我这里设置线程数为500,循环一次。

重要的事情说三遍:
结合实际进行设定, 阶梯式压测, 一次压太多怕你机器冒烟
结合实际进行设定, 阶梯式压测, 一次压太多怕你机器冒烟
结合实际进行设定, 阶梯式压测, 一次压太多怕你机器冒烟

在这里插入图片描述

配置元件

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

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

构造HTTP请求

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

添加HTTP请求头

  • 线程组上右键 【添加】–>【配置元件】–>【HTTP信息头管理器】

  • 因为我要传输的数据为json,所以设置一个 Content-Type:application/json, 你可根据实际设置
    在这里插入图片描述

添加断言

  • 线程组上右键 【添加】–>【断言】–>【响应断言】

  • 根据响应的数据来判断请求是否正常。我在这里只判断的响应代码是否为200。当然你还可以配置错误信息
    在这里插入图片描述

添加察看结果树

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

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

添加Summary Report

  • 线程组上右键 【添加】–>【监听器】–>【Summary Report】

  • 直接添加,然后点击运行按钮就可以看到结果了
    在这里插入图片描述
    为了不引起不必要的争论,隐藏了TPS。此数据不具备任何价值,仅仅为文章演示。

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

执行测试计划

前面我们说过,执行测试计划不能用GUI,需要用命令行来执行

在这里插入图片描述

我这里执行的命令:

jmeter -n -t testplan/RedisLock.jmx -l testplan/result/result.txt -e -o testplan/webreport
  • testplan/RedisLock.jmx 为测试计划文件路径

  • testplan/result/result.txt 为测试结果文件路径

  • testplan/webreport 为web报告保存路径。

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

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/774104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文案转化率低?快看看这两个坑你踩没踩

对于很多中小企业来说,无论是来拓市场还是获客,软文营销都会成为他们的主要营销方式,比较软文营销的成本较低,同时门槛也不高。但是也有品牌发现,自己和团队辛苦构思了几周写出的文案,但是效果不是很好。今…

数学分析复习:一元函数的极限

文章目录 函数极限定义和性质函数极限的另一种定义Cauchy收敛准则 本篇文章适合个人复习翻阅,不建议新手入门使用 函数极限 定义和性质 定义:函数极限 设函数 f ( x ) f(x) f(x) 若 ∀ ε > 0 , ∃ δ > 0 , ∀ x ∈ O o ( x 0 , δ ) , s . t …

QT5.14.2 码上热浪,用Qt5狂暴轰入多媒体狂潮

在这个视觉化、移动化的时代,多媒体应用无疑成为了现代计算机程序的香饽饽。无论是摄像头录像、视频播放器,还是音频可视化、GIF动画浏览,都让用户体验达到了前所未有的层次。而要想在这片热土上百战百胜,我们的祭旗就是Qt5这一跨…

了解微信小程序开发流程

前言:本文只适合初学者了解大致开发流程,好让后续学习胸有成竹,有条不紊 1、开发准备 ① 在微信公众平台 (qq.com)完成微信小程序账号注册 ②下载安装微信小程序开发者工具 2、创建项目 新建 新建时需要的appid,在微信公众平…

Python学习:函数

函数定义 在Python中,函数(Function)是一组用于完成特定任务或计算的语句块。定义函数可以让我们将一段代码重用多次,提高代码的可读性和可维护性。以下是定义函数的基本语法和结构: def function_name(parameters):&…

运动规划_碰撞检测算法之分离轴定理

运动规划:碰撞检测算法之分离轴定理 附赠自动驾驶全套学习资料和量产经验:链接 如上文所述,基于包围形的方法是一种粗略的碰撞检测方法,基于外接圆形的方法运算速度很快,但精度很差;基于轴对齐包围矩形(AA…

0.96寸OLED屏调试 ----(二)

所需设备: 1、USB 转 SPI I2C 适配器;内附链接 2、0.96寸OLED显示模块; 备注:专业版、升级版都适用; 读写控制 SSD1306通过 D/C# 和 R/W# 两位来确定:读/写数据,写命令和读状态四种通信行为。…

从凑零钱问题理解动态规划

给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。 你可以认为每种硬币的数量是无限的。 示例…

【论文笔记】RobotGPT: Robot Manipulation Learning From ChatGPT

【论文笔记】RobotGPT: Robot Manipulation Learning From ChatGPT 文章目录 【论文笔记】RobotGPT: Robot Manipulation Learning From ChatGPTAbstractI. INTRODUCTIONII. RELATED WORK1. LLMs for Robotics2. Robot Learning III. METHODOLOGY1. ChatGPT Prompts for Robot …

【MySQL】9. 内置函数

函数 1. 日期函数 获得年月日: mysql> select current_date(); ---------------- | current_date() | ---------------- | 2024-03-23 | ---------------- 1 row in set (0.00 sec)获得时分秒: mysql> select current_time(); ------------…

vue3+Pinia的使用 - 封装

目录: persist.ts 可存储到本地 import { PersistedStateOptions } from "pinia-plugin-persistedstate";/*** description pinia 持久化参数配置* param {String} key 存储到持久化的 name* param {Array} paths 需要持久化的 state name* return per…

测试缺陷定位的基本方法

前后端bug特征 后端: 业务逻辑问题:如任务状态未扭转成功,创建任务失败等数据类问题:如新增的任务在页面没有展示出来等性能类问题:提交任务一直显示创建中、批量操作等待耗时长超时等 前端: 页面显示类…

基于人类反馈的强化学习:最核心的5个步骤

基于人类反馈的强化学习( Reinforcement Learning with Human Feedback)工作原理 强化学习正在彻底改变技术和商业世界中复杂问题的处理方式。这是一种强大的工具。通过该工具,机器能够从环境中学习并根据奖惩做出明智的决策。 但是&#x…

约克中央空调YES-will系列,舒适冷暖与高品质家居的优选

漫漫寒冬,室内一片寒意,开启空调多久才能享受到暖意?如果冬季气温较低,空调能否保持正常的制热运行? 炎炎夏季,即便在室内也同样是“暴汗”不断,身上黏糊糊,什么样的家用中央空调才能快速制冷,让全家人感受到舒适,同时又能避免传统空调直吹带来的一系列问题? 遇上梅雨季节…

面试题 之 webpack

1.说说你对webpack理解?解决什么问题? Webpack 是实现前端项目的模块化,用于现代 JavaScript 应用程序的静态模块打包工具,被webpack 直接引用的资源打包进 bunde.js的资源,当webpack 处理应用程序时,它会在内部构建一…

SpringBoot-注解:@Async 使用

不同类中使用Async 线程配置初始化类-ThreadPoolConfig package com.zzdy.recharge.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableA…

迁移android studio 模拟器位置

android studio 初始位置是安装在c盘,若是要迁移需 1创建一个目标位置如我的F:/avd 2在系统环境变量里面设置新的地址 变量名:ANDROID_SDK_HOME 变量值:F:/avd 3最重要的是文件复制,将C盘里面avd的上层目录.android的目录整体…

【哈希专题】【蓝桥杯备考训练】:星空之夜、模拟散列表、字符串哈希、四平方和、扫雷【已更新完成】

目录 1、星空之夜(usaco training 5.1) 2、模拟散列表(模板) 3、字符串哈希(模板) 4、四平方和(第七届蓝桥杯省赛C A组/B组 & JAVA B组/C组) 5、扫雷(Google Ki…

2024室内设计和建筑必须知道的十大3D渲染趋势!

2023年对建筑圈是非常不平凡的一年,高清视频渲染、元宇宙全覆盖、AI模型大爆发.....不断发展的 3D 数字技术世界正迅速重塑建筑设计行业。 2024年,室内设计和建筑设计领域在3D渲染方面又将迎来怎样的变革?以下十大3D渲染趋势,你不…

python dict 序列化

python dict 序列化 在Python中,可以使用json模块来序列化(转换为JSON格式的字符串)和反序列化(将JSON格式的字符串转换回字典)一个字典。 序列化: import json # 假设有一个字典 data { name: J…