压力测试是目前大型网站系统的设计和开发中不可或缺的环节,通常会和容量预估等工作结合在一起,穿插在系统开发的不同方案。压力测试可以帮助我们及时发现系统的性能短板和瓶颈问题,在这个基础在上再进行针对性的性能优化,也可以帮助我们预估系统的承载能力,使我们能根据其做出一些应对措施。

JMeter简介

JMeter是一个使用Java开发的Apache开源软件,用于软件的性能评估和压力测试。它最初是为测试Web应用程序而设计的,但此后又扩展到其他测试功能。

JMeter可用于静态和动态资源、Web动态应用程序的性能测试,例如:HTTP、 HTTPS、LDAP、TCP、FTP、SMTP、POP3、IMAP、Shell脚本、数据库、Java 对象,也可以用于对服务器、服务器组、网络或对象上的巨大负载,以测试在不同强度的压力测试下它们的强度和整体性能。

另外,JMeter还可以对应用程序做功能回归测试,通过创建带有断言的脚本来验证你的程序是否返回了你期望的结果。为了最大限度的灵活性,JMeter还支持使用正则表达式创建断言。

下载JMeter

访问JMeter的官网:https://jmeter.apache.org/download_jmeter.cgi,下载最新版本的JMeter,如下图:

运行JMeter

在运行JMeter之前,需要安装JDK8,详细安装步骤见图文详解在Windows系统中安装JDK。

解压压缩包以后,进入bin目录,双击运行jmeter.bat,首先启动一个CMD窗口,如下图:

然后又启动了JMeter的GUI,如下图:

其中,注意CMD窗口中的提示:

================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):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仅用于压力测试的创建和调试。执行压力测试使用CLI模式,就是非GUI。使用下面的命令来执行测试:

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

并且在批处理文件中修改当前环境变量:

HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"

JMeter默认是英文的,也可以修改为简体中文,通过点击Options->Choose Language进行修改,如下图:

创建第一个压力测试

为了演示写了一个网站,URL为http://127.0.0.1:8080/hello,当QPS大于100时HTTP状态码返回429(使用 Alibaba Sentinel实现 )。

1.添加线程组

右键测试计划,点击添加–>线程(用户)–>线程组,如下图:

设置线程数为10,**Ramp-Up时间(秒)**为10,循环次数为100,如下图:

线程数:一个用户占一个线程, 10个线程就是模拟10个用户。

Ramp-Up时间(秒): 设置线程需要多长时间全部启动。如果线程数为10 ,准备时长为10 ,那么需要1秒钟启动1个线程。也就是每秒钟启动1个线程。

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

2.添加元件

右键线程组,点击添加–>配置元件–>HTTP请求默认值,如下图:

设置协议为HTTP,服务器名称或IP为127.0.0.1,端口号为8080,如下图:

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

3.添加取样器

右键线程组,点击添加–>取样器–>HTTP请求,如下图:

设置请求类型为GET,路径为/hello,如下图:

4.添加响应断言

右键线程组,点击添加–>断言–>响应断言,如下图:

设置测试字段为响应代码,模式匹配规则为相等,测试模式添加200,如下图:

5.添加察看结果树

右键线程组,点击添加–>监听器–>察看结果树,如下图:

6.添加汇总报告

右键线程组,点击添加–>监听器–>汇总报告,如下图:

7.启动压力测试

先点击保存按钮,把测试计划保存起来。然后点击启动按钮,如下图:

测试计划就跑起来了。

8.查看报告

察看结果树,请求成功的,如下图:

察看结果树,请求失败的(QPS过高,被Alibaba Sentinel限流),如下图:

再看一下汇总报告,如下图:

9.执行测试计划

前面提到执行测试计划不能使用GUI,必须使用CLI模式,执行以下命令:

jmeter -n -t ../plan/万猫学社.jmx -l ../plan/result.txt -e -o ../plan/webreport

其中,…/plan/万猫学社.jmx为测试计划文件,…/plan/result.txt为测试结果文件,…/plan/webreport为web报告目录。

执行过程如下图:

最后生成的网页报告如下图:

使用CSV参数化

为了演示对之前的网站进行增强,URL为http://127.0.0.1:8080/hello/{name},其中**{name}是一个参数,所以URL可以是http://127.0.0.1:8080/hello/Lucy**,也可以是http://127.0.0.1:8080/hello/Lily,同样当QPS大于100时HTTP状态码返回429(也是使用 Alibaba Sentinel实现 )。

1.创建CSV文件

创建一个文本文件,内容为:

1,Alice
2,Eva
3,Jane
4,Lily
5,Lucy

分别为5行,每行分别是id和名称,用英文逗号分隔。然后,对之前的测试计划进行修改。

2.创建CSV Data Set Config

右键线程组,点击添加–>配置元件–>CSV Data Set Config,如下图:

文件名称填入刚刚创建的文件,文件编码选择UTF-8,变量名称输入id,name,分别表示与文本文件中每一行的idname两个变量,如下图:

3.修改HTTP请求

修改之前的HTTP请求中的路径/hello/${name},如下图:

4.查看报告

启动测试计划,可以在察看结果树中看到URL的路径已经被替换了,如下图:

使用HTTP请求参数化

为了演示对之前的网站新增一个接口,URL为http://127.0.0.1:8080/getName,该接口会随机返回上述文本文件中某个名字,返回格式为JSON,例如:

{"id":1, "name":"Alice"}

对之前的测试计划再进行修改:

1.添加HTTP请求

右键线程组,点击添加–>取样器–>HTTP请求,添加一个新的HTTP请求,名称设置为HTTP请求-getName路径设置为/getName。为了区分把之前添加的HTTP请求的名称修改为HTTP请求-hello,如下图:

2.添加JSON提取器

右键HTTP请求-getName,点击添加–>后置处理器–>JSON提取器,如下图:

  • Names of created variables是创建变量的名字,要和HTTP请求-hello的路径/hello/${name}保持一致,所以设置为name
  • JSON Path expressions是需要提取的key,参照getName接口返回的JSON字符串,设置为$.name
  • Match No.是在JSON中同样的key取第几个,这里设置为1。
  • Default Values是没有找到key时的默认值,这里设置为OneMore。

最终配置如下图:

4.查看报告

启动测试计划,可以在察看结果树中看到一次getName返回的name是Lily,如下图:

接下来,调用hello接口时传入的参数就为Lily,所以返回的就是Hello, Lily,如下图:

总结

JMeter的功能很强大,还有很多值得大家继续挖掘的。不过,你如果掌握了本文所讲述的功能,基本上可以应付一般的Web压测了。

文章持续更新,微信搜索「 万猫学社 」第一时间阅读。
关注后回复「 电子书 」,免费获取12本Java必读技术书籍。

图文详解压力测试工具JMeter的安装与使用相关推荐

  1. [原创]Tsung压力测试工具简介及安装

    [原创]Tsung压力测试工具简介及安装 一 Tsung压力测试工具简介 一个开源的多协议分布式负载测试工具,使用erlang语言开发的.它能用来压力测试HTTP, WebDAV, SOAP, Pos ...

  2. httpd二之主配置文件详解、测试工具、压力测试ab

    本文主要讲述httpd的主配置文件中可以配置的选项以及参数,以2.2系列的为主,在http2.4以后会添加一些新的功能和模块,配置文件可能也会有一些差别,关于2.4的配置文件将在后续推出,敬请期待! ...

  3. 压力测试工具Jmeter的简单使用

    目录 介绍 下载地址 安装 简单配置 永久设置中文界面 设置字体大小和图标 插件安装 插件使用 填坑-修改了相关配置,字体依然很小,无语 实战-简单的压力测试过程 创建线程组 配置元件 取样器-构造H ...

  4. 【Jmeter】压力测试工具 Jmeter 使用

    运行 下载后运行: 启动后可以看到一个java编写的图形界面. 一个简单的压测实例 现有一个http请求接口http://127.0.0.1:5000/example_analysis/,要使用Jme ...

  5. Visual Studio 2022安装教程(千字图文详解),手把手带你安装运行VS2022以及背景图设置

    VS2022最新最全安装教程 很高兴你打开了这篇博客,接下来我们一起安装并且使用VS2022吧 文章目录 VS2022最新最全安装教程 一.官网下载 二.安装启动 三.项目测试 1.创建新项目 2.选 ...

  6. CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-7主节点CM安装子节点Agent配置...

    主节点安装cloudera manager 准备工作:下载CM和mysql连接驱动包: CM各版本下载地址:http://archive.cloudera.com/cm5/cm/5/ 从里面选择:ht ...

  7. 图文详解 Windows 2003服务器集群安装(1)

    群集安装 安装概述 在安装过程中,安装某些节点时将关闭其它节点.这个步骤有助于保证附加到共享总线的磁盘上的数据不会丢失或遭到破坏.当多个节点同时尝试写入一个未受到群集软件保护的磁盘时,可以出现数据丢失 ...

  8. 图文详解 Windows 2003服务器集群安装(5)(完)

    设置共享磁盘 警告:为了避免破坏群集磁盘,在其它节点上启动操作系统前,确认至少在一个节点上安装.配置和运行了Windows Server 2003.在完成群集服务配置之前,所开启的节点数不要超过一个, ...

  9. linux stress 工具,Linux压力测试工具stress的参数详解

    为了测试根据服务器的负载情况,给大家推荐下stress这个压力测试工具,具体安装方式就不说了,本文主要介绍下stress的命令参数,大家可以在环境上验证测试下. 参数说明: -? 显示帮助信息 -v ...

最新文章

  1. fastdfs 开启 token 防盗链,以及验证失败原因
  2. IOS应用之二--sqlite的创建数据库,表,插入查看数据
  3. eltable刷新整个表格方法_Word表格函数计算怎么做?都在这篇!
  4. 疲劳驾驶数据集_人工检查,11 个类、97942 个标签,Roboflow 开源自动驾驶数据集可以使用啦...
  5. ADO.NET连接字符串
  6. 又到 6 月底,想来和你聊一聊毕业季,愿你前程似锦!
  7. MySQL中的UNIX_TIMESTAMP函数使用总结
  8. 静态内部类 java 1614958017
  9. jdbc和mysql编程_MySql数据库与JDBC编程三
  10. H3C AP当无线路由器静态IP上网配置
  11. Swift高仿iOS网易云音乐Moya+RxSwift+Kingfisher+MVC+MVVM
  12. 一步一步搭建11gR2 rac+dg之配置单实例的DG(八)
  13. js页面刷新事件 ,Javascript刷新页面的几种方法
  14. 手机电源管理芯片一般在哪
  15. Prometheus+Grafana环境搭建(windows版)
  16. c++逆天改命进阶--AVLTree
  17. 第一章---计算机系统概论
  18. 为了保证页面输出安全,我们经常需要对一些特殊的字符进行转义,请写一个函数 escapeHtml,将<, >, , “进行转义
  19. 我的世界java版无效会话_我的世界局域网联机显示无效的会话和搜不到主机
  20. 复星联合超越保2020,升级了,但更便宜!

热门文章

  1. “2020年,我30岁了”
  2. 计算机专业职业生涯平衡单,用生涯决策平衡单法做职业决策
  3. 苹果概念手机_苹果游戏概念手机:两个屏幕+侧滑盖颠覆性设计,不仅仅只有这些...
  4. mysql 如何设置延迟启动_技术分享 | MySQL 网络延时参数设置建议
  5. 为什么会出现运营商劫持
  6. html2canvas截图的使用
  7. S交换机堆叠方案配置指南
  8. S5PV210 Linux内核移植 - 天嵌E8
  9. 路由与交换系列之企业级ipv6和AAA通讯实验(下)
  10. mongodb 查看连接数和最大连接数