jmeter
的基础讲解
一
.
性能测试
1.1.
性能测试是什么
1.2.
性能测试工具
二
. Jmeter
简介
2.1.
我们为什么使用
Jmeter
2.2. Jmeter
的作用
三:
jmeter
的下载安装配置启动
基于协议模拟用户发出请求,对服务器形成一定负载,来测试服务器的性能指标是否满足要求,性能指标关注
点:时间性能、空间性能
性能测试定义:指通过测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
1.2.
性能测试工具
![](https://i-blog.csdnimg.cn/blog_migrate/23a117e259bc54fede8d5d83235082b8.png)
二
. Jmeter
简介
2.1.
我们为什么使用
Jmeter
开源,免费,基于
Java
编写,可集成到其他系统可拓展各个功能插件
支持接口测试,压力(负载和压力)测试等多种功能,支持录制回放,
入门简单相较于自己编写框架活其他开源工具,有较为完善的
UI
界面,便于接口调试
多平台支持,可在
Linux
,
Windows
,
Mac
上运行,支持多协议
2.2. Jmeter的作用
接口测试
postman/jmeter/soapui
性能测试
jmeter/loadrunner
数据库测试
jmeter/loadrunner
三:
jmeter
的下载安装配置启动
3.1
:
jmeter
的下载
Windows
下
Jmeter
下载安装登录
http://jmeter.apache.org/download_jmeter.cgi
,根据自己平台,下
载对应文件
![](https://i-blog.csdnimg.cn/blog_migrate/83ee78c71f3c222756a9f3c39f368169.png)
或者使用我下载好的直接使用(D:\install\jmeter\apache-jmeter-4.0)
3.2
:
JAVA
环境环境变量的配置
安装
JDK
,配置环境变量(具体步骤不做介绍)(
D:\install\java\jdk1.8.0_131
)
![](https://i-blog.csdnimg.cn/blog_migrate/c96ca60066fe1e41c8bb391bc6790c9e.png)
3.3
:启动
方式
1
:在命令行中输入
jmeter
方式
2
:
bin
目录下执行
jmeter.bat(window)
或者
jmeter.sh(linux)
四
:Jmeter
的目录结构
![](https://i-blog.csdnimg.cn/blog_migrate/f0ddb38f211d696523206f179988cafe.png)
/bin
目录(常用文件介绍)
examples
:目录下包含
Jmeter
使用实例
ApacheJMeter.jar
:
JMeter
源码包
jmeter.bat
:
windows
下启动文件
jmeter.sh
:
Linux
下启动文件
jmeter.log
:
Jmeter
运行日志文件
jmeter.properties
:
Jmeter
配置文件
jmeter-server.bat
:
windows
下启动负载生成器服务文件
jmeter-server
:
Linux
下启动负载生成器文件
/docs
目录
——Jmeter
帮助文档
/extras
目录
——
提供了对
Ant
的支持文件,可也用于持续集成
/lib
目录
——
存放
Jmeter
依赖的
jar
包,同时安装插件也放于此目录
/licenses
目录
——
软件许可文件,不用管
/printable_docs
目录
——Jmeter
用户手册
五:为什么做性能测试
想想一下双
11
购物
想想一下现在
12306
抢票
六:简单的模拟性能测试
练习:模拟多用户访问百度网址
6.1
:线程组
作用
:
模拟虚拟用户
进程: 一个正在执行的程序对应一个进程
线程: 一个进程有多个执行线程
线程组: 按照线程性质对线程分组
三者关系: 一个进程有多个线程组,一个线程组有多个线程
操作:在测试计划
>>
添加
>>Threads>>
线程组
![](https://i-blog.csdnimg.cn/blog_migrate/1864b4cc60251f3dc48828327adb7179.png)
6.1.1.
线程组主要包含三个参数:线程数、准备时长
(Ramp-Up Period(in seconds))
、循环次数。
6.1.2.
线程数:虚拟用户数。一个虚拟用户占用一个线程。设置多少虚拟用户数在这里也就是设置多少个
线程数。
6.1.3.
准备时长(秒):设置的虚拟用户数需要多长时间全部启动。如果线程数为
20
,准备时长为
10
,那么需要
10
秒钟启动
20
个线程。也就是每秒钟启动
2
个线程。
6.1.4.
循环次数:每个线程发送请求的次数。如果线程数为
20
,循环次数为
100
,那么每个线程发送
100
次请求。总请求数为
20*100=2000
。如果勾选了
“
永远
”
,那么所有线程会一直发送请求,一到选择停止
运行脚本。
6.1.5.
调度器:设置线程组启动的开始时间和结束时间
(
配置调度器时,需要勾选循环次数为永远
)
6.1.6.
持续时间(秒):测试持续时间
6.1.7.
启动延迟(秒):测试延迟启动时间
6.2
:
sampler(
采样器
)
作用
:
向服务器发送请求
,
记录响应信息
,
记录响应时间的最小单元
(http,https,ftp,jdbc
等
)
操作:在线程组
>>
添加
>>sampler>>http
请求
(
常用
)
![](https://i-blog.csdnimg.cn/blog_migrate/1e2a839777271d1370fb17beefc86322.png)
一个
HTTP
请求有着许多的配置参数,下面将详细介绍:
名称:本属性用于标识一个取样器,建议使用一个有意义的名称。
注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。
服务器名称或
IP
:
HTTP
请求发送的目标服务器名称或
IP
地址。
端口号:目标服务器的端口号。
方法:发送
HTTP
请求的方法,可用方法包括
GET
、
POST
、
HEAD
、
PUT
、
OPTIONS
、
TRACE
、
DELETE
等。
Content encoding
:内容的编码方式,默认值为
iso8859
路径:目标
URL
路径
(
不包括服务器地址和端口
)
注意事项:
1
:参数传递中
Parameters
和
Body Data
不能同时使用,必须要保证其中至少一个为空,否则提示错误
2
:在传递的参数中,接口参数名和参数值两边不能有空格,否则会报错
6.3
:监听器
作用
:
监听器可以动态的监控
JMeter
测试执行的过程
,
实时查看测试结果
操作:在线程组
>>
添加
>>
监听器
>>
聚合报告
/
查看结果树
![](https://i-blog.csdnimg.cn/blog_migrate/511da36b93c6257cfa0373e89059e3fa.png)
通过察看结果树,我们可以看到每个请求的结果,其中红色的是出错的请求,绿色的为通过
Thread Name
:线程组名称
Sample Start:
启动开始时间
Load time
:加载时长
Latency
:等待时长
Size in bytes
:发送的数据总大小
Headers size in bytes
:发送数据的其余部分大小
Sample Count
:发送统计
Error Count
:交互错误统计
Response code
:返回码
Response message
:返回信息
Response headers
:返回的头部信息
lable
:对应每一个
http
请求,显示的是
http
请求的
Name
,如百度
http
请求
name
为
baidu
#Samples
:表示这一次的测试中一共发出了多少请求,如上图所示,
sougou
和
baidu
的
http
请求
每个都发出
30
个请求
Average
:平均响应时间,指的是所有的请求的平均响应时间,如上图的
30
个请求的总的响应时间
除以
30
得出的平均响应时间,默认的情况下是单个请求的平均响应时间,但当使用了
“
事务控制器
”
时,则以事物为单位显示平均响应时间
Median
:中位数,也就是
50%
用户的响应时间
90%Line
:
90%
用户的响应时间
Min
:最小响应时间
Max
:最大的响应时间
Error%
:本次测试中出现错误的请求的数量
/
请求的总数,如上图所示,本次的测试中,
sougou
的
http
请求
66.6%
的请求出错,而
baidu
的请求则没有出错的请求
Throughput
:吞吐量,默认情况下表示每秒完成的请求数,如上图所示,每秒完成的请求数分别
为
6.6
个每秒,
6.2
个每秒
Recived KB/Sec
:每秒从服务器端接收到的数据量,以
kb
为计算的单位
七:
jmeter
中插件的讲解
7.1
:
jmeter
组件描述
1
.测试计划是使用
JMeter
进行测试的起点,它是其它
JMeter
测试元件的容器。
2
.线程组:代表一定数量的并发用户,它可以用来模拟并发用户发送请求。
3
、取样器(
Sampler
):模拟各种请求。所有实际的测试任务都由取样器承担,存在很多种请求。
如:
HTTP
、
ftp
请求等等。
4
、监听器:负责收集测试结果,同时也被告知了结果显示的方式。功能是对取样器的请求结果显
示、统计一些数据(吞吐量、
KB/S……
)等。
6
、断言:用于来判断请求响应的结果是否如用户所期望,是否正确,非常实用
7
、定时器:负责定义请求(线程)之间的延迟间隔,模拟对服务器的连续请求。
5
、逻辑控制器:允许自定义
JMeter
发送请求的行为逻辑,它与
Sampler
结合使用可以模拟复杂的
请求序列。
8.
配置元件维护
Sampler
需要的配置信息,并根据实际的需要会修改请求的内容。
9.
前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的
设置,后置处理器则常常用来处理响应的数据。
7.2
:断言
作用:断言
(Assertions)
可以用来判断响应的数据是否符合预期
7.2.1
:响应断言
操作:在线程组
>>
添加
>>
断言
>>
响应断言
![](https://i-blog.csdnimg.cn/blog_migrate/a0d2dca50be7defedd945b84f10c8def.png)
7.2.2:json断言
操作:在线程组>>添加>>断言>>json断言
7.2.3:Xpath断言
定义
:Xpath
即为
XML
路径语言,它是一种用来确定
XML
文档中某部分位置的语言。
xpath
基于
XML
的树状结
构,提供在数据结构树中寻找节点的能力
操作:在线程组
>>
添加
>>
断言
>>xpath
断言
![](https://i-blog.csdnimg.cn/blog_migrate/9999f34a3e28a0358ba3399f9669aa4e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6293a1d6c9a619f0c902ce25cfb704da.png)
区别:响应断言(适用任何的返回类型)
,json
断言(只适用于
json
的返回类型)
,Xpath Assertion
断言
针对返回信息为
Xpath
的数据类型进行断言
7.3
:定时器
定时器
(Timer)
负责定义请求之间的延迟间隔
操作:在线程组
>>
添加
>>
定时器
>>
固定定时器
![](https://i-blog.csdnimg.cn/blog_migrate/41561cfd64db50ad0d9792202c27c6a4.png)
7.4:逻辑控制器
7.4.1
:事务控制器
操作:在线程组
>>
添加
>>
逻辑控制器>>事务控制器‘
’
![](https://i-blog.csdnimg.cn/blog_migrate/6c3e459b6fe2f48e24d53ddb0c33b867.png)
7.4.2
:循环控制器
操作:在线程组
>>
添加
>>
逻辑控制器
>>
循环控制器
![](https://i-blog.csdnimg.cn/blog_migrate/b15f23fad2ade0d03ad92176299c7efd.png)
7.5
:后置处理器
7.5.1.
:
http
请求默认值
(
常用
)
http
请求默认值
,
会在发送
http
请求的时候,自带这些参数,复用的作用
操作:线程组
>>
配置原件
>>http
请求默认值
![](https://i-blog.csdnimg.cn/blog_migrate/b524c2deaf29386902a8335edeae6631.png)
疑问:
http
请求默认值之后
1
:什么时候添加
? --------
大部分请求参数是相同的
2
:如果添加
http
请求默认值之后,在别的接口中还填写的
http
请求默认值中不同的数据,那么还以谁为准
了?
----
填写了以自己为准,不填写以
http
默认值为准
7.5.2
:正则表达式
常见的正则表达式如下
(
在线正则表达式
)
![](https://i-blog.csdnimg.cn/blog_migrate/e716438e113b5d5d5ab38e379f12ec0f.png)
操作须知
1
)确定取值的范围
2
)确定取值的左右边界,最好是能够唯一确定的值的边界
3
)如果要查看我们的值是否正确,可以使用
Debug Sampler
引用
${
变量名
}
案例:我们以手机号码归属地返回的归属地传递第二个接口查询所属地的天气情况
返回值为:
{"resultcode":"200","reason":"Return Successd!","result":{"province":"
北
京
","city":"
北京
","areacode":"010","zip":"100000","company":"
移
动
","card":""},"error_code":0}
操作:线程组>>添加>>后置处理器>>正则表达式提取器
7.5.3
:
JSON Extractor
操作:线程组
>>
添加
>>
后置处理器
>>JSON Extractor
通过
json
表达式提取数据
![](https://i-blog.csdnimg.cn/blog_migrate/35944de19195d1eb162387b2c92db80a.png)
集合点
![](https://i-blog.csdnimg.cn/blog_migrate/895e1bbc07d82645d10c18a4c9f80503.png)