JMeter 快速上手
请大家点击这里,观看视频讲解,结合下面的图文教程学习。
JMeter 这个软件工具 主要用于 服务端系统
的 性能测试。
比如 测试 web网站,API服务器 的性能,如下图所示
所以 学习JMeter 之前,必须掌握一些基础知识: HTTP协议、 API 的概念、 HTML、JSON 的基础知识
可以点击这里学习
这里说一下个人观点: JMeter 更适合 没有编程能力的人
,或者相对简单的使用场景。
但是要真正做好
性能测试,一定要学习好编程 ,这样才能做好 各种复杂的测试场景。
安装
安装JDK
JMeter是Java程序, 需要先安装JDK来运行它。
虽然JMeter声称支持JDK1.8以后的所有版本 ,但是我发现 JDK17 运行它,就会出现一些问题。
换成 JDK8 或者 JDK11 后, 问题消失。所以建议 安装这两个版本之一。
Windows上JDK安装非常简单,不再赘述。
安装JMeter
点击这里 ,打开下载页面。
可以看到有一个 Binaries 下面的 JMeter程序压缩包文件 下载列表。
点击 apache-jmeter-5.x.x.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 配置页,
排除模式下 添加 你要 过滤掉 不抓取的 的类型资源 ,使用的是正则表达式
比如
就是排除 访问 所有上述扩展名的 HTTP请求。
就是排除 所有 访问
detectportal.firefox.com
的请求。 -
点击代理服务器的启动按钮
-
设置浏览器代理为 本机(localhost) 的 8888端口,进行对应的界面操作
应该发现抓到了相应的请求。
-
右键点击
录制线程组
点击验证
,查看一下是否能正确模拟 -
继续其它场景的录制和拖动
-
结束录制,修改浏览器设置,取消代理
模拟间隔时间
场景1中两组请求中间没有间隔,不符合实际情况。
怎么让它们有间隔呢?
可以使用 JMeter的 定时器 Timer
定时器 执行优先级高于 取样器, 会先暂停, 可以放在下一个消息的前面
也可以使用 取样器 里面的 测试活动 flow control action
取样器
命令行模式 运行
真正实施性能测试应该在命令行模式下运行,命令格式如下:
注意JMeter的路径替换为你的安装路径
假设 我们有如下的性能测试用例
请大家用JMeter 实现这样的性能测试
dashboard 产生图表
就会产生report1目录,里面的index.html 打开就是报告
注意 -o
后面的目录 一定要不存在,或者内容为空,否则会报错。
其中 APDEX (Application Performance Index)
里面的 T (Toleration threshold)
和 F (Frustration threshold)
可以通过 JMeter 工具 bin 目录下面的 user.properties
配置文件里面 这两个选项来设置