快速上手

请大家点击这里,观看视频讲解,结合下面的图文教程学习。


JMeter 这个软件工具 主要用于 服务端系统 的 性能测试。

比如 测试 web网站,API服务器 的性能,如下图所示

image


所以 学习JMeter 之前,必须掌握一些基础知识: HTTP协议、 API 的概念、 HTML、JSON 的基础知识

可以点击这里学习


这里说一下个人观点: JMeter 更适合 没有编程能力的人,或者相对简单的使用场景。

但是要真正做好性能测试,一定要学习好编程 ,这样才能做好 各种复杂的测试场景。

安装

安装JDK

JMeter是Java程序, 需要先安装JDK来运行它。

虽然JMeter声称支持JDK1.8以后的所有版本 ,但是我发现 JDK17 运行它,就会出现一些问题。

换成 JDK8 或者 JDK11 后, 问题消失。所以建议 安装这两个版本之一。

点击这里,阿里云盘下载 JDK11

Windows上JDK安装非常简单,不再赘述。

安装JMeter

点击这里 ,下载JMeter程序压缩包文件 apache-jmeter-5.4.1.zip

下载到一个合适的目录,比如 d:\tools 目录下面;

然后解压该文件,选择解压到当前目录,即出现一个名为 apache-jmeter-5.4.1 的目录

进入到该目录中,再进入到名为bin的目录。

如果是Windows系统:双击名为 jmeter.bat 的文件,即可打开JMeter管理界面程序。

如果是Mac系统,在命令行窗口中,进入到jmeter的bin目录 执行命令 sh jmeter.sh

安装练习被测系统

为了方便大家锻炼使用JMeter做性能测试,我们提供了一个练习用的被测系统 黑羽学院2.0

点击这里,查看安装使用说明

JMeter 界面简介

性能测试是:验证 在 各种性能负载场景下 ,系统的表现是否符合预期。

一个性能测试场景, JMeter称之为 test plan ,中文翻译为 测试计划


实际上,一个 JMeter的测试计划 对应 性能测试的一个场景,其实也就是一个 测试用例

应该先准备好 性能测试用例, 然后再用JMeter对应配置好一个测试计划来对应它。

每个测试计划都可以保存在一个单独的文件中。


JMeter的测试计划,具体里面的内容(怎么测),根据你设计好的测试用例,在这个下面添加相应子节点定义。


首先,必须定义用户访问的行为。 就是用户 先访问哪个网页,发出哪些HTTP请求,再访问哪个网页,发出哪些HTTP请求。


根据用例,往往需要模拟 多种 用户行为, 每种行为的用户有多少个。

JMeter 把一个用户的行为 用一个线程来执行。

JMeter 把同一种用户的行为和数量, 用线程组来定义,代表有一批用户,都是这样的行为。

JMeter 把每个节点称之为 element ,翻译为中文叫 元件 ,或者 元素


比如,现在我们要做的一个性能测试用例 需要模拟的行为 如下:

第1种行为(用户数量 5个):

先访问首页,再访问 单课页 ,再访问 新闻页


第2种行为(用户数量 10个):

先访问首页,再访问 专题页 ,再访问 新闻页


我们就要定义2个线程组,对应这两种行为的用户。

线程组中:

Ramp-Up 时间 意思是 所有用户上线的总时间,以秒为单位。

比如5,就表示总共耗时5秒,如果是 5个用户,那就意味着 每隔1.25秒上线一个: 5秒/(5-1) = 1.25


循环次数 意思是 每个用户 做线程组里面定义的动作行为 多少轮 。 缺省就做一轮。


接下来 这个线程组里面 的 行为定义,也就是这类用户 先访问哪个网页,发出哪些HTTP请求,再访问哪个网页,发出哪些HTTP请求, 这个行为怎么定义呢?


一个具体的请求,是通过 Sampler 取样器 来 定义的。

通常最常用的就是这个 HTTP请求取样器。

具体操作请看对应的视频讲解。


定义设置好以后,下面就是要运行看看。

运行前,通常我们要保存这个测试计划

先选择计划节点,再选择工具栏的 保存 按钮

GUI模式 运行

查看结果树

接下来就可以运行一下看看。

注意,运行JMeter 有2种运行模式: GUI 图形界面模式CLI 命令行模式

前者是开发调试用的,后者才是真正执行压力测试时用的

现在就是开发阶段,当然先使用 图形界面模式,等调试没有问题,再使用命令行模式


所以图形界面模式,我们要查看结果,就是加 Listener 监听器

最常见的就是 ViewResultTree查看结果树 ,里面会显示HTTP请求具体的细节的信息。


结果树 的 Sample result 页 参数的意义:

Thread Name:线程组 1-1
Sample Start:2021-10-07 20:27:00 CST
Load time:4
Connect Time:0
Latency:3
Size in bytes:22591
Sent bytes:357
Headers size in bytes:287
Body size in bytes:22304
Sample Count:1
Error Count:0
Data type ("text"|"bin"|""):text
Response code:200
Response message:OK

其中

Connect Time : 
  jmeter 和 被测系统 建立 TCP 连接的时间,包括3路握手时间,
  如果连接复用, 值为0

lantency:
  从发出请求前 到 接收完第一个响应的时间

loadtime(以前叫Elapsed time):
  从发出请求前 到 接收完所有响应的时间
  如果是长消息, 往往时长 >= lantency,因为有多个响应

Size in bytes :        整个消息消息大小 = Headers size in bytes + Body size in bytes
Headers size in bytes : 响应消息头大小
Body size in bytes :   响应消息体大小

HTTP请求默认值

测试过程中,被测系统换了, 就要换配置的地址, 要手动修改 请求参数,请求取样器多了, 就非常麻烦了。


可以使用HTTP请求默认值 解决这个问题。

具体操作参考讲解视频。

录制网站流量

JMeter提供了录制浏览器的请求的方法,使用的是代理抓包的机制。

  • 确保 HTTP请求默认值 里面的服务器IP 和录制的网址一致

    否则录制时,每个HTTP请求里面都会带上IP,还得手工修改删除,不利于统一使用HTTP请求默认值 里面的服务器IP。

  • 在整个测试计划下面添加 HTTP代理服务器

    英文叫 HTTP(S) Test Script Recorder

  • 线程组 里面 添加 逻辑控制器 -> 录制控制器

  • 设置HTTP代理服务器

    • 分组 选项 选择: 将每个组放到新的事物控制器中

    • 如果你需要录制时过滤掉一些请求

      点击Request Filtering 配置页,

      排除模式下 添加 你要 过滤掉 不抓取的 的类型资源 ,使用的是正则表达式

      比如

      (?i).*\.(bmp|css|js|gif|ico|jpe?g|png|swf|eot|otf|ttf|mp4|woff|woff2)
      

      就是排除 访问 所有上述扩展名的 HTTP请求。


      detectportal\.firefox\.com.*
      

      就是排除 所有 访问 detectportal.firefox.com 的请求。

    • 点击代理服务器的启动按钮

  • 设置浏览器代理为 本机(localhost) 的 8888端口,进行对应的界面操作

    应该发现抓到了相应的请求。

  • 右键点击 录制线程组 点击 验证 ,查看一下是否能正确模拟

  • 继续其它场景的录制和拖动

  • 结束录制,修改浏览器设置,取消代理

模拟间隔时间

场景1中两组请求中间没有间隔,不符合实际情况。

怎么让它们有间隔呢?


可以使用 JMeter的 定时器 Timer

定时器 执行优先级高于 取样器, 会先暂停, 可以放在下一个消息的前面


也可以使用 取样器 里面的 测试活动 flow control action 取样器

命令行模式 运行

真正实施性能测试应该在命令行模式下运行,命令格式如下:

d:\tools\apache-jmeter-5.4.1\bin\jmeter -n -t loadtest-case1.jmx  -l log.jtl

注意JMeter的路径替换为你的安装路径


假设 我们有如下的性能测试用例


只有一种用户行为:

无需登录,先访问首页,再访问  单课页 ,再访问 新闻页
访问页面间隔 10 秒

用户数量 1200 个,在10分钟依次上线

请大家用JMeter 实现这样的性能测试

dashboard 产生图表

d:\tools\apache-jmeter-5.4.1\bin\jmeter -g log.jtl -o report1

就会产生report1目录,里面的index.html 打开就是报告

注意 -o 后面的目录 一定要不存在,或者内容为空,否则会报错。


其中 APDEX (Application Performance Index) 里面的 T (Toleration threshold)F (Frustration threshold) 可以通过 JMeter 工具 bin 目录下面的 user.properties 配置文件里面 这两个选项来设置

jmeter.reportgenerator.apdex_satisfied_threshold
jmeter.reportgenerator.apdex_tolerated_threshold

您需要高效学习,找工作? 点击咨询 报名实战班

点击查看学员就业情况

下一页