使用JMeter进行性能测试(压力测试)

一.前言

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

二.关于JMeter

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

官网:http://jmeter.apache.org/download_jmeter.cgi

这里我选用了 5.4.1 版本的二进制包:dlcdn.apache.org/…

更多内容介绍 https://baike.baidu.com/item/Jmeter/3104456

三.准备工作

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

JAVA环境变量配置:https://jingyan.baidu.com/article/fd8044fa2c22f15031137a2a.html

解压下载的二进制包,进入bin目录,使用 jmeter.bat启动程序。

启动之后会有两个窗口,一个cmd窗口,一个JMeter的 GUI。前面 不要忽略CMD窗口的提示信息:

使用JMeter进行性能测试(压力测试)

JMeter:

使用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
================================================================================

上面的意思就是:不要使用GUI运行压力测试,GUI仅用于压力测试的创建和调试;执行压力测试请不要使用GUI。使用下面的命令来执行测试(我认为简单的压力测试直接用GUI也是可以的):

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

并且修改JMeter批处理文件的环境变量: HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"

更改语言为中文

官方默认为我们提供了简体中文。通过 【Options】->【Choose Language】变更为简体中文

使用JMeter进行性能测试(压力测试)

四.创建测试

1.创建线程组

在”测试计划”上右键 【添加】–>【Threads(Users)】–>【线程组】。

使用JMeter进行性能测试(压力测试)

设置线程数和循环次数。我这里设置线程数为500,循环一次。

使用JMeter进行性能测试(压力测试)

2.配置元件

在我们刚刚创建的线程组上右键 【添加】–>【配置元件】–>【HTTP请求默认值】。

使用JMeter进行性能测试(压力测试)

配置我们需要进行测试的程序协议、地址和端口

使用JMeter进行性能测试(压力测试)

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

3.构造HTTP请求

这里可参考Jmeter读取CSV文件并做为http请求参数,并在请求前添加CSV数据文件设置

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

使用JMeter进行性能测试(压力测试)

4.添加HTTP请求头

在我们刚刚创建的线程组上右键 【添加】–>【配置元件】–>【HTTP信息头管理器】。

因为我要传输的数据为json,所以设置一个 Content-Type:application/json

使用JMeter进行性能测试(压力测试)

5.添加断言

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

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

使用JMeter进行性能测试(压力测试)

6.添加察看结果树

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

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

使用JMeter进行性能测试(压力测试)

7.添加Summary Report

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

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

使用JMeter进行性能测试(压力测试)

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

8.测试计划创建完成

记得点保存。

五.执行测试计划

前面我们说过,执行测试计划不能用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报告如下:

使用JMeter进行性能测试(压力测试)

六.写在最后

线程数量和循环次数将会影响最终的测试报告,请大家多多测试。

Original: https://www.cnblogs.com/ccfco/p/15420784.html
Author: 小筱痕
Title: 使用JMeter进行性能测试(压力测试)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/605076/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 使用EventSystem判断是否点击ui

    private PointerEventData _uiPointerEventData; private List _uiRaycastResultCache = new Lis…

    数据结构和算法 2023年6月7日
    086
  • [LC814]二叉树剪枝

    题目 题目地址 分析 这道题符合递归的性质,对于当前的节点node,当且仅当其左右孩子都为不包含1的子树,且node.val=1时,node所在的子树才符合”不包含1的…

    数据结构和算法 2023年6月8日
    068
  • Java实现栈

    package algorithm; import java.util.Arrays;import java.util.Iterator; /** @author Administ…

    数据结构和算法 2023年6月16日
    084
  • 笛卡尔树

    这里做点总结笛卡尔树有两条性质 二叉搜索树 小根堆 定理:编号权值互不相同的笛卡尔树构造是唯一的 二叉搜索树满足左儿子权值小于父节点,右儿子权值大于父节点 小根堆满足权值小于左右节…

    数据结构和算法 2023年6月7日
    095
  • 【题解】P3454 [POI2007]OSI-Axes of Symmetry (几何+马拉车/manacher)

    题面翻译 Johnny 是一位非常年轻的数学家,但他此刻正在为他妹妹的数学作业烦恼。 这个周末,他的妹妹需要完成一项作业,计算各种几何图形的对称轴数量。因为 Johnny 这个周末…

    数据结构和算法 2023年6月12日
    074
  • 特殊数表

    来自 command_block,为了适应 cnblogs 做了一些改动 . 以下是原文: 包括负数的二项式系数 (杨辉三角) ( \def\tinyS #1#2{\tiny\be…

    数据结构和算法 2023年6月7日
    083
  • 算法:旋转数组的最小数字

    问题 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次…

    数据结构和算法 2023年6月12日
    079
  • 搭建Redis集群

    为什么要有集群 上一篇随笔说了基本的主从概念以及搭建,一主可以有多从,如果同时访问的量过大(1000w)或者发生自然灾难,主服务肯定就会挂掉,数据服务就挂掉了 大公司都会有很多的服…

    数据结构和算法 2023年6月7日
    077
  • [笔记]浅谈分块

    [笔记]浅谈分块 0 前言 分块真的是一个很好的思想和数据结构。它是一种优雅的暴力。——LYM 1 分块入门 一般来说,分块解决的是在序列上的操作问题。在某种情况下,它可以运用一些…

    数据结构和算法 2023年6月8日
    0108
  • Chapter 2 Variables and Basic Types

    posted @2022-05-21 13:50 Dy2MoRaw 阅读(7 ) 评论() 编辑 Original: https://www.cnblogs.com/Dy2MoRa…

    数据结构和算法 2023年6月7日
    087
  • 背包问题(一) 01背包

    有一个背包容量为 (m) 的背包,(n) 个物品。每个物品的重量为 (w),价值为 (v) 。 要求在选取物品总重量不大于背包容量的情况下,使得选取物品总价值最大。 每种物品仅可使…

    数据结构和算法 2023年6月8日
    0121
  • 我的码风

    缺省源里是 #include<cstdio></cstdio>,用的时候缺啥补啥。不打万能头。 习惯用快读快写。 int re() { int s=0,f=…

    数据结构和算法 2023年6月12日
    091
  • AcWing 1097. 池塘计数(搜索)

    题目链接 题目描述 农夫约翰有一片 N∗M 的矩形土地。最近,由于降雨的原因,部分土地被水淹没了。现在用一个字符矩阵来表示他的土地。每个单元格内,如果包含雨水,则用”W…

    数据结构和算法 2023年6月16日
    088
  • 避免频繁请求登录的一种解决方案(无验证码方式)

    最近在重构之前自己的一个网站系统,在进行到登录认证这块想将输入验证码的方式去掉,改为动态的根据请求频率来限制,因为输入验证码的体验其实并不是很好。以下的解决方案只是我目前想到的一种…

    数据结构和算法 2023年6月8日
    073
  • 并查集(UnionFind)

    并查集和其他树形结构不一样,是由孩子指向父亲,它解决了一些连接问题,怎么才能确定两个点是否相连呢?并查集可以非常快的确定两个点是否连接。 如何确定连个点是否连接呢? 我们可以用一个…

    数据结构和算法 2023年6月8日
    0101
  • C. Tree Infection

    题目: 题目分析: 这道题是一个关于树的问题,我们已知一棵深度若干的健康的树,然后每秒能进行一次操作,操作分为两个内容,一个是spreading,是说一群兄弟节点中,只要有一个被感…

    数据结构和算法 2023年6月7日
    095
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球