元件组件
元件**:多个类似功能组件的容器(类似于类**)
组件**:容器中实现独立的某个功能(类似于方法**)
作用域的原则:
取样器:核心,没有作用域
逻辑控制器:只对其子节点中的取样器和逻辑控制器起作用
其他元件:
·如果是某个取样器的子节点,则该元件只对其父节点起作用
·如果其父节点不是取样器,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)
元件执行顺序:
同一作用域下不同元件:
配置元件–前置处理程序–定时器–取样器–后置处理程序–断言–监听器
同一作用域下相同元件:
从上到下的顺序依次执行
Jmeter三个重要组件:
线程组的介绍: 特点:
模拟用户,支持多用户操作
多个线程组可以串行执行,也可以并行执行
线程组的分类:
setup线程组:前置处理,初始化
普通线程组:编写脚本
teardown线程组:后置处理,环境恢复等
线程组的属性:
参数介绍:
案例分析: 使用1个线程组,添加HTTP请求(百度)
配置线程数为2,循环次数为3时,运行观察结果
配置线程数为3,循环次数为2时,运行观察结果,对比是否有不同
相同点:从请求数量来说,是完全相同的
不同点:场景不同
线程数:代表用户数,即性能测试时的负载量(线程数为2比线程数为3对应的负载量小)
循环次数:代表时间,即性能测试时的运行时间(循环次数3比循环次数2对应的时间长)
HTTP请求:
参数介绍:
作用:向服务器发送http及https请求
参数:
查看结果树:
案例1: 查看结果树中的HTTP请求中,有多个子的HTTP请求
原因分析: 第一个HTTP请求中,URL错误,导致服务器产生了重定向,提供了新的URL路径
JMeter会自动发送第二个HTTP请求(使用第一个HTTP请求中返回的URL路径)
点击最外层HTTP请求时,显示的内容与最后一个HTTP请求的请求和响应数据一致
案例2:HTTP响应数据中存在乱码,需要修改取样器结果的编码格式
Jmeter参数化:
本质:使用参数的方式来替代脚本中的固定的测试数据
实现方式:
定义变量(最基础)
文件定义的方式(所有测试数据都是固定的情况下)
数据库的方式(灵活,业务测试常用)
函数的方式(灵活,业务测试常用)
用户定义的变量:
(1)什么时候使用用户定义的变量?
定义全局变量
(2)使用"用户定义的变量"进行参数化的步骤?
1.添加线程组
2.添加用户定义的变量。格式:变量名–变量值
3.添加HTTP请求,引用定义的变量名。格式:${变量名}
4.添加查看结果树
参数:
用户定义的变量引用格式${变量名}
用户参数:
(1)什么时候使用用户参数?
针对同一组参数,当不同的用户来访问时,可以获取到不同的值
(2)使用"用户参数"进行参数化的步骤?
1.添加线程组,设置线程数为n(表示模拟的用户数)
2.添加用户参数
·第一列添加多个变量名
·后续每一列为一组用户的数据
3.添加HTTP请求,引用定义的变量名。格式:${变量名}
4.添加查看结果树
CSV数据文件设置:
将数据保存在.csv文件中,在发送的时候读取文件中对应的数据保证每次post的数据不同
创建.csv文件添加数据
例
和线程组中线程数相关联
(1)什么时候使用csv数据文件设置?
当不同的用户,或者同一个用户多次循环时,都可以获取到不同的值
(2)使用"csv数据文件设置"讲行参数化的步骤?
1.创建定义csv数据文件
2.添加线程组
3.添加csv数据文件设置
4.添加HTTP请求,引用定义的变量名。格式:${变量名}
5.添加查看结果树
函数:
(1)什么时候使用_counter函数?
自动生成不重复的数据,让每个用户每次循环都能取到不同的数据,且不需要提前定义
(2)使用"counter函数"进行参数化的步骤?
1.添加线程组,设置虚拟用户数和循环次数
2.生成_counter函数
3.添加HTTP请求,使用_counter函数。格式:${_counter(FALSE,) }
4.添加查看结果树
Jmeter断言:
定义:检查实际的返回结果是否与预期结果保持一致
自动校验机制:自动判断响应状态码(2xx:成功,4xx/5xx:失败)
常用
响应断言:对任意格式的响应数据进行断言
json断言:对json格式的响应数据进行断言
持续时间断言:对响应时间进行断言
响应断言:
(1)什么时候可以使用响应断言?
任意HTTP请求的响应结果,都可以使用响应断言
(2)使用"响应断言"的操作步骤?
1.添加线程组
2.添加HTTP请求
3.添加响应断言
测试字段:要检查的项(实际结果)
模式匹配规则:比较方式
测试模式:预期结果
4.添加查看结果树
参数:
JSON断言:
(1)什么时候可以使用JSON断言?
对HTTP请求的响应结果为JSON格式时,可以使用JSON断言
(2)使用"JSON断言”的操作步骤?
1.添加线程组
2.添加HTTP请求
3.添加JSON断言
填写Assert JSON Path exists(实际结果-json路径)·勾选Additionally assert value
填写Expected value(期望结果)
JSON path语法$.errcode -> $..errcode
4.添加查看结果树
参数:
断言持续时间:
(1)什么时候可以使用断言持续时间?
测试HTTP请求的响应时间是否满足要求时,可以使用断言持续时间
(2)使用"断言持续时间”的操作步骤?
1.添加线程组
2.添加HTTP请求
3.添加断言持续时间
填写持续时间(允许的最大响应时间,单位: ms)
4.添加查看结果树
大小断言:
用于判断返回内容的大小;作用对象:返回信息,响应报文; Size to Assert:断言字节范围,字节大小单位为:字节。
Jmeter关联——提取器:
定义:请求之间有依赖关系,一个请求的响应数据作为另一个的请求参数来传递 JMeter关联:
正则表达式提取器:提取任意格式的响应数据
Xpath提取器:提取HTML格式的响应数据
JSON提取器: 提取JSON格式的响应数据
正则表达式提取器: 正则表达式介绍:
正则表达式:就是一个公式,或者说一套规则,使用这套规则可以从任意字符串中提取出想要的数据内容
公式格式:左边界(匹配符号)右边界:可以提取出想要获取的数据内容
.:是通配符,可以代表任意字符(除换行回车)
*: 代表前面的字符出现0次或者多次
.*匹配规则:找到左边界值后,往右查找有边界,找到最后面的右边界,中间的所有数据都被记录下来
?: 代表非贪婪匹配,找到左边界后,往右查找匹配右边界,只要有匹配的右边界就停止继续查找;再次查找左边界和右边界
公式格式:左边界(.*?)右边界
<title>(.*?)</title>
<title>百度一下,你就知道</title><title>百度一下,你就知道</title>
通过一个正则表达式可以提取出多组数据,每组数据设置对应的左边界和右边界即可 每一组数据都可以有一个或者多个值
(1)什么时候可以使用正则表达式提取器?
任意格式的响应数据,都可以使用正则表达式提取器进行提取
(2)使用"正则表达式提取器"的操作步骤?
1.添加线程组
2.添加HTTP请求
3.添加正则表达式提取器
引用名称:存放提取出的值的参数名称,如填写title.
正则表达式:左边界(.*?)右边界
模板:用$$引用起来,表示解析出第几个()的值
匹配数字:1表示第1个值,-1表示所有取值
4.添加HTTP请求-百度
引用正则表达式中的引用名称。如:用$ {title}引用它
5.添加查看结果树
xpath提取器:
//a : 找出所有的a标签
//a[@id='kw']: 在HTML页面中,找出a标签(有一个属性为id,且id的值为kw)
//b[@name='kw']: 在HTML页面中,找出b标签(有一个属性为name,且name的值为kw)
json提取器:
JSON提取器——${变量名}
参数:
监控元件——聚合报告
lable:sampler的名称
Samples(样本):一共发出去多少请求,例如10个用户,循环10次,则是 100
Average(平均值):平均响应时间
Median(中位数):中位数,也就是 50% 用户的响应时间
90% Line(90%百分位):90% 用户的响应不会超过该时间
95% Line(95%百分位):95% 用户的响应不会超过该时间
99% Line(99%百分位):99% 用户的响应不会超过该时间
min(最小值):最小响应时间
max(最大值):最大响应时间
Error%(异常占比):错误的请求的数量/请求的总数
Throughput(吞吐量):吞吐量——默认情况下表示每秒完成的请求数(Request per Second) 可类比为qps
Received KB/Sec:每秒接收数据量
Sent KB/Sec:每秒发送数据量
补充:
正常情况下,响应时间的结果取平均值
当响应时间最大值特别高(超出平均水平特别多),导致平均值不能代表正常/大部分水平时,可 以使用百分比时间
公共参数提取
定时器组件
固定定时器——模拟用户点击思考时间
案例:
(1)系统登录错误3次后,锁定1分钟,等待1分钟后重新输入正确的用户名密码登录成功
步骤:
添加线程组
添加HTTP请求1 - 错误1次
添加HTTP请求2 - 错误2次
添加HTTP请求3 - 错误3次
添加HTTP请求4 - 正确用户名密码
在HTTP请求4下,添加固定定时器
添加查看结果树
固定定时器,必须添加在需要等待的HTTP请求的子节点下
统一随机定时器——在规定时间内随机执行
同步定时器(集合点)
同步定时器:阻塞线程(累积一定的请求),当在规定的时间内达到一定的线程数量,这些线程会在同一个时间点一起释放,瞬间产生很大的压力。
使用同步定时器的操作步骤
1.添加线程组,设置线程数为n
2.添加HTTP请求
3.添加同步定时器
•设置并发线程数:同时发送请求的虚拟用户数
•设置超时时间:
Ø建议设置:不设置的话,若没有达到设置的线程数会一直死等
Ø不能设置太小:等待时间后还没达到设置的线程数,会释放已到达的线程
4.添加查看结果树
5.添加监听器-聚合报告
常数吞吐量定时器:
负载测试(按需求,单位时间发送指定数量的接口请求-吞吐量)
案例:
(1)一个用户以 20QPS (20 次/s) 的频率访问百度首页,持续一段时间,统计运行情况
(2)2个用户针对(服务器的QPS要求:20QPS (20 次/s))的频率访问百度首页,持续一段时间,统计运行情况