1、jmeter执行优先级
配置元件
前置处理器
取样器
后置处理器
监听器
2、jmeter多种监听器的作用
监听器就是jmeter对性能测试结果进行监控后,展示结果的数据
不同监听器原件的,是从不同的角度展示结果数据
3、jmeter取样器的作用
根据不同的协议,使用不同的取样器编写脚本
4、逻辑控制
对脚本的执行进行逻辑控制
5、前置处理器作用,后置处理器作用
6、请求体为JSON时,需要注意什么
请求头 Content-Type:application/json
7、脚本编写注意事项
(1)协议为http时可不写,如果是HTTPS必须写
(2)服务器名称或ip不能带有/
(3)路径不能带域名或ip或端口,路径开头用/,不能带有空格
(4)内容编码 utf8
(5)请求体为JSON,且为post请求,使用消息体数据,要添加请求头,Content-Type:application/json
(6) form-data application/x-www-form-urlencoded,且为get请求,使用参数传参
8、自动重定向与跟随重定向
自动重定向:不会显示中间重定向的过程,无法从过程中提取信息
跟随重定向:自动显示重定向过程,可以从过程中提取信息,用于后面的接口
9、keepalive
保持连接,长连接
10、请求体、响应体乱码,如何控制
请求体:内容编码控制、消息头application/json;charset=utf8、参数勾选编码urlencoded
响应体:GUI的编码、修改配置文件
11、接口之间通过什么产生关联
例如:下一个接口的参数需要上一个接口的响应信息的值,
(1)用户自定义变量,配置元件
全局变量,作用域整个测试计划
每次启动运行测试计划,会获取一次值,在之后运行过程中不值不会再改变
(2)用户参数,前置处理器
局部变量,作用于当前线程组或当前取样器
在启动时获取一次值,之后运行过程中值会动态改变
12、常用函数
(1)${__counter(,)} 计数器
每次+1计数
(2)${__dateTimeConvert(,,,)} 时间格式转换
- 将04082022转化成08/04/2022,原时间格式是转化前的格式,目标时间格式是转化后的时间格式
- 将时间戳转化成目标时间格式
(3)${__digest(,,,,)} **加密** 简单加密
- MD5加密
(4)${__intSum(,,)} 整数相加函数
- 类型必须是整数类型,否则会报错
(5)${__P(,)} **获取属性函数**
- 获取jmeter.propreties文件里面的值,例如获取设置的语言属性的值
(6)${__property(,,)} **获取属性函数** 同上
(7)${__setProperty(,,)} 设置**属性函数**
- 设置jmeter属性
(8)${__Random(,,)}
- 随机一个整数,必须是整数类型,否则报错
(9) ${__RandomString(,,)}
- 用规定的几个字,组成对应长度的随机字符串
(10)${__threadNum} 获取线程号函数
(11)${__time(,)} 获取**当前时间戳函数**
- YMD = yyyyMMdd
- HMS = HHmmss
- YMDHMS = yyyyMMdd-HHmmss
- 想获取什么时间格式就写入参数,不写默认返回时间戳,此时间戳精确到毫秒
(12)${__timeShift(,,,,)} 数据格式化
- 不写参数默认输出时间戳
- 推迟时间
- PT20.345S parses as 20.345 seconds
- PT15M parses as 15 minutes
- PT10H parses as 10 hours
- P2D parses as 2 days
- -P6H3M parses as -6 hours and -3 minutes
(13)${__V(,)} **拼接**函数 ,究极大坑,函数助手会自动加逗号,在使用时去掉
- 可拼接参数,创建测试数据,例如user_1,user_2,user_3...
13、jmeter属性怎么理解
jmeter工具属性:可能被改变
静态属性:写入在properties文件的属性信息,都是静态属性
动态属性:运行过程中动态的定义属性
系统属性:os、jdk系统属性信息不可改变
属性属于全局变量,都能使用
参数和变量只能局限使用
动态属性的生命周期?
运行过程中产生,jmeter关闭会自动释放
14、jmeter线程组中取样器执行的顺序
无逻辑控制器的时,所有取样器都是从上往下执行,无论多少并发
结果:取样器的执行顺序与查看结果树种显示的顺序不一致
15、jmeter怎么提前响应信息中的数据
(1)JSON提取器
场景:确认响应信息的格式味JSON时可使用
写法:
- $.根路径.二级路径 绝对路径写法
- $..末梢节点名称 相对路径写法
注意事项:由于JSON中的key-value是无序的,所以在取多个时,可能顺序每次都会发生变化
(2)正则表达式提取
万能公式:左边界(.*?)右边界
16、CSV参数化
(1)假设4组数据,设置此线程循环4次
(2) 设置http默认值
(3)设置用户自定义变量,全局key
(4) 测试数据格式
- money和year都是参数名,以英文逗号隔开,编码格式需要是utf8
(5)取样器设置
(6)CSV文件设置
- 文件名相对路径最后;内容编码是utf8;首行忽略;
(7)查看结果树
- 线程依次取值
注意事项
(1)多个变量名使用英文逗号
(2)遇到文件结束符再次循环? 作用是控制变量取值
true:运行次数超过文件行数,继续运行,重新从文件第一行数据取值
false:运行次数超过文件行数,继续运行,后面都取不到值
(3)遇到文件结束符停止线程 作用是管理线程组的运行
true:运行到文件结束就停止线程
false:运行到文件结束继续运行
(4)存在多用户并发,多个线程数,循环多次
依次取值
+ 第1th,第一次取值,取第1行,
+ 第2th,第一次取值,取第2行
+ 第3th,第一次取值,取第3行
8、逻辑控制器-循环控制器
作用当前线程组,循环执行5次
9、逻辑控制器-for each
产生的变量名:var_1 var_2 var_3 var_4 var_5
使用时 ${f}
10、逻辑控制器-if条件控制器
为http请求添加逻辑控制器
(1)默认勾选,必须使用函数计算后的值为true才执行,否则为false不执行
jexl3 groovy
(2)不勾选,不使用函数计算,直接作为js语言的表达式计算,为真就执行为假就不执行
11、接口测试脚本不能直接用于性能测试的原因?
(1)接口测试脚本、自动化脚本都会添加断言来判断接口响应是否正确,会消耗本机的时间和性能资源,性能测试脚本是不需要加断言的
(2)Beanshell元件,尽量不要使用,假设写java代码处理 建议使用JSR223取样器
(3)正式性能测试时,是使用CLI无图形界面模式,GUI图形界面是用来编辑调试脚本
12、逻辑控制器-事务控制器
事务:jmeter默认一个取样器为一个事务
TPS:每秒处理的事务数
注意事项:
(1)合并多个取样器,需要勾选“Generate parent sample”
(2)性能测试需要先进行单接口性能测试,规划单接口性能测试指标,再进行多接口的性能测试,规划多接口性能指标,然后使用事务控制器,合并多接口,规划性能指标,再合并所有事务规划性能指标
(3)流程:假设让你规划某个事务的性能指标,,需要先梳理出,这个业务所有的接口,然后对这个业务所有的接口进行性能测试,得到性能指标,然后,再使用事务控制器,合并取样器,最终才得到 业务的性能指标。
(4)正式性能测试时要禁用所有的监听器
13、聚合报告
查看聚合报告的前提:
(1)没有网络瓶颈
如何判断网络瓶颈:带宽为标准时,假设100M带宽, 100Mb=100*1024kb/8=12800KB/s
聚合报告最后2列,发送和接收,xxkb/s 接近12800就是接近网络瓶颈
企业服务器,一般电商类的产品,几M带宽
(2)并发用户数不变
例如负载测试,并发用户数会随时间变化,就不能查看聚合报告
聚合报告细节
(1)每一行:都是一个事务
(2)每一列
样本数:在执行过程中,所有并发用户数,在规定时间内的总请求数量
吞吐量:每秒服务器处理多少个事务
5个线程*执行10秒*pl=样本数量483 pl每秒9.66个请求
平均值、--最大值:都是响应时间,单位ms
例如90%:90%的请求响应时间低于113ms
14、逻辑控制器-仅一次控制器
定义:一个线程组用户只运行一次,无视设置的循环次数、运行时间条件
15、逻辑控制器-吞吐量控制器
百分比控制吞吐量,使用多个吞吐量控制器使它们的和为100
总的吞吐量
16、逻辑控制器-随机控制器
假设控制了3个取样器,会随机挑选其中1个取样器执行
17、随机顺序控制器
假设控制了3个取样器,执行顺序会随机执行
18、soap协议脚本
soap协议=http协议+XML
测试网站地址:WeatherWS Web 服务
(1)配置请求头
(2)取样器 ip地址 路径 消息体数据(XML传参)
(3)查看结果
19、jmeter使用jdbc协议连接数据库
jdbc:java调用数据库;调用数据库需要使用jar包+数据库信息;jmeter是java开发可以直接执行java代码
’配置jdbc的jar包:
(1)例如数据库版本5.7,在maven仓库搜索mysql,https://mvnrepository.com/
(2)将下载好的jar包放jmeter的lib文件夹
jdbc版本是向下兼容
脚本步骤:
(1)线程组添加配置元件JDBC Connection Configuration
连接池变量名必填
databaseURL格式: jdbc:mysql://serverip:port/dbname
jdbc driver class: 不同的数据库,这个驱动class不一样
mysql: com.mysql.jdbc.Driver **只适用于mysql5版本**,选择
mysql8是手写:com.mysql.cj.jdbc.Driver
用户名和密码:数据库用户名和密码
(2)创建取样器JDBC Request
填写JDBC Connection Configuration的连接池变量名才能使用
默认是不支持写多个SQL语句
query type: select statement (查)、 update statement(增改)、 prepared select statement 、 prepared update statement
带有 prepared开头,是脚本中,可以带有参数
parameter values:参数值
parameter types:参数的类型,一般是varchar
variable names:执行之后返回的结果的参数名
result variable name:执行之后返回的结果组成一个数组,不容易取值操作