Jmeter快速入门
1、 Jmeter概述
-
Jmeter是什么?
Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试。所谓的压力测试,就是同一时间段内对服务器发送大量的请求,一般用于测试高并发情况下软件的运行状况如何。
-
Jmeter有什么用?
可以用于对服务器、网络或对象模拟巨大的负载,通过创建带有断言的脚本来验证程序是否能否返回期望的结果。
JMeter 最初被设计用于 Web 应用测试,但后来扩展到了其他测试领域,可用于测试静态和动态资源,如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库和 FTP 服务器等等。JMeter 可对服务器、网络或对象模拟巨大的负载,在不同压力类别下测试它们的强度和分析整体性能。另外,JMeter 能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证程序是否返回了期望结果。为了最大限度的灵活性,JMeter 允许使用正则表达式创建断言。
-
Jmeter的优缺点:
- 优点:
- 开源免费
- 跨平台
- 支持多协议
- 灵活轻巧
- 缺点:
- 不支持IP欺骗
- 无法验证JS程序,也无法验证页面UI,所以要须要和Selenium配合来完成Web2.0应用的测试
- 优点:
2、Jmeter安装
-
Step1:安装Java环境,即安装JDK
Jmeter是由Java编写的,所以必须要有Java环境才能使用
JDK(Java Development Kit,Java开发工具包):包含了JRE(JVM+Java系统类库)和 JAVA开发工具
具体安装请自行搜索,这里不在赘述
-
Step2:下载Jmeter
-
Step3:解压Jmeter,解压后不要急着启动Jmeter,解压前还需要去它的配置文件中进行配置
1)配置编码
Jmeter默认是使用
ISO-8859-1
编码规则,不配置启动Jmeter会出现乱码。但是自Jmeter5.4.1开始,Jmeter就已经默认支持UTF-8
了2)关闭SSL
JMeter 软件打开后默认会使用 SSL,如果电脑中没有安装 SSL,则 JMeter 在第一次打开后会报错。在文件
jmeter.properties
中使用如下代码关闭 SSL。关闭之后,以后打开 JMeter 就不会报错了3)汉化Jmeter
4)开启Cookie
如果需要模拟含 Cookie 的 HTTP 请求,则需要在文件
jmeter.properties
中添加如下代码 -
Step4:启动
备注:使用方式一是直接就启动了Jmeter的图形化界面;使用方式二会开启一个CMD窗口,然后启动图形化界面,注意开启的CMD窗口不能关闭,否则Jmeter图形化界面也会跟着关闭
3、基本使用
在使用前,需要先熟悉以下这些基本概念
取样器
- 取样器:用于发送请求
结果树
- 结果树:会将请求结果以树的形式展示出来
线程组
- 线程组:简单来说就是一个线程集合,线程组的出现是为了更方便地管理线程。一个线程组可以包含另一个线程组
- setUp线程组:最优先执行的线程组(相较于普通线程组而言)
- tearDown线程组:最后执行的线程组(相较于普通线程组而言)
HTTP请求默认值
- HTTP请求默认值:如果多个HTTP请求存在大量相同的配置,可以通过HTTP请求默认值简化HTTP请求相关的配置
HTTP信息头管理器
- HTTP信息头管理器:当我们发送的请求,需要传递JSON数据,则需要设置传递数据的格式
Content-Type
application/json;chartset=utf-8
参数化
-
参数化:动态的获取、设置或生成数据,是一种由程序驱动代替人工驱动的数据设计方案,提交脚本的编写效率以及编写质量。
作用和HTTP默认值,类似,都是为了简化书写,通过参数化,我们可以较少配置
以下四种方式实现参数化:
- 用户定义的变量
- CSV数据文件设置
- 用户参数
- 函数
-
用户定义变量
现在我们的取样器中的请求路径,就可以直接使用
${myPath}
替代/api/index/
,相当于配置了一个全局变量 -
CSV数据文件设置(常用)
先准备一个CSV数据文件,注意该文件一定要是UTF-8编码格式,否则会出现乱码现象(详情配置见P17)
示例:
发送一个保存数据的请求
csv.txt:
1,张三,18 2,李四,19
配置CSV数据文件设置:(变量名要和上cvs.txt文件中数据保持一致)
消息体数据中直接通过
${}
引用,就可以发送多条请求保存数据的请求了,每次请求都只保存一条记录注意:
-
用户参数
使用
${}
引用用户参数 -
函数
将这个复制到HTTP请求名上,这样每一个线程都有一个独立的计数器了
此外还有随机函数
Random
,生成${_Random(1,3,)}
,生成数的区间是[1,3]
;还有
Time
,生成${_time(,)}
,生成当前的时间戳,如果想要显示具体的事件,可以通过下面这种方式进行设置
参考文章: