顾名思义:压力测试,就是 被测试的系统,在一定的访问压力下,
看程序运行是否稳定/服务器运行是否稳定(资源占用情况)
比如: 2000个用户同时到一个购物网站购物,这些用户打开页面的速度是否会变慢,或者网站是否会奔溃
http://jmeter.apache.org/download_jmeter.cgi
历史版本选择,下图,进入后选择binaries目录,本文使用5.1.1版本
但不知为何,打不开;
下载后,解压,执行bin目录下的jmeter.bat
,切换语言
(1)添加线程组
测试计划上右键->添加->线程(用户)->线程组
主要参数(线程属性):
线程数
: 启用线程数(模拟用户数,如200)
Ramp-Up时间(秒)
: 设置线程需要多长时间全部启动。如果线程数为200 ,准备时长为10 ,
那么需要1秒钟启动20个线程。也就是每秒钟启动20个线程。
循环次数
: 每个线程发送请求的次数(如10,总请求数=200*10),如果勾选了“永远”,
那么所有线程会一直发送请求,直到选择停止运行脚本
(2)添加HTTP请求
线程组右键->添加->取样器->http请求
参数配置参考下图: 参数写法 ${xx}
POST方式 (主要配置-> 协议:http , 服务名称或ip ,端口号 , 方法:post , 路径: 请求地址 , 内容编码: utf8 )
post方式,参数需要放到消息体数据
页,字符串两边要加引号,不然报错当做参数解析了,json格式用{}
,列表用[]
,可以把${xx}替换死数据先测试一波
GET方式 (配置同post)
方法
切换为GET就行, 但是参数设置要在参数
页, 而且此工具,如果消息体数据
有内容,参数
是无法切换的,需要先删除,或者从头新建一个线程组,低版本会提示清除参数,此版本不提示,按钮不能点击; 如果是文本参数,需要勾选编码
,避免出现参数乱码
(3)添加CSV数据文件
http请求->添加->配置元件->CSV数据文件设置
用于从文件读取批量参数(也可以配置从数据库读取),文本参数也可以json格式字符串,服务器名称或ip,端口,路径等都可以从文本配置读取,此处详细列一种,其他自行百度学习配置
https://blog.csdn.net/liangyoufei/article/details/83690753
文本参数内容(可以使用excel生成,导出为csv或txt):
文件名
: 数据文件,CSV,文本等均可
变量名称
: 对应文本参数行数据的字段,逗号隔开
忽略首行
: 如果数据文本内容是头行数据(第一行是参数名称),设置为true ,
参数可以设置成json字符串, 变量名称
可以留空,消息体数据
可以写 ${参数名称}
(4)添加http信息头管理器
http请求->添加->配置元件->http信息头管理器
用于给请求,天加请求头参数,如 content-type : application/json , CSRF-TOKEN : xxxx (csrf攻击验证字符串)
(5)添加http Cookie管理器
同(4) ,如 SESSIONID : xxx
配置的cookie内容可以在浏览器F12查看 :
(6)添加查看结果树
http请求->添加->监听器->察看结果树
可以看到请求发送,以及取样器结果,请求,相应数据
, 如果参数乱码,可能是参数csv或txt文件使用的文本编码不对,用notepad++或其他工具转换格式为utf-8即可
(7)添加聚合报告
http请求->添加->监听器->聚合报告
可以看到,样本
即50个线程每个发送10个请求合计500个请求,平均响应时间596毫秒, 请求无异常, 吞吐量
每秒60.2个请求
其他高级玩法,待学习后补充…
补充数据库配置
: post请求参数数据量过大,采用文本内容不方便生产, 因此使用数据库数据,如下
线程组->添加配置元件->JDBC Connection Configuration :
线程组->取样器->JDBC Request :
将数据库返回结果列表用于请求参数 :
线程组->逻辑控制器->循环控制器
循环控制器->配置元件->计数器 :
为所有输入参数建立计数器;
创建函数助手对话框(一个输入参数一个框)
例如 : gbHeaderId_${N} , N为计数器记录的数据库数据行号,
行数据被转化成gbHeader_1 , gbHeader_2 … ( gbHeader_# 表示最大记录 )
将生成的函数字符串粘贴到HTTP请求参数 消息体数据:
(http请求建立在循环控制器下,其下有查看结果树,聚合报告,其他不用线程组可以占时关闭)
运行测试即可;
PS
:
一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。
单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。
系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间
QPS(TPS):每秒钟request/事务 数量
并发数: 系统同时处理的request/事务数
响应时间: 一般取平均响应时间
(很多人经常会把并发数和TPS理解混淆)
理解了上面三个要素的意义之后,就能推算出它们之间的关系:
QPS(TPS)= 并发数/平均响应时间