docs目录:
lib目录:
线程组:模拟用户
取样器:发送请求(类似于接口自动化中的request库)
逻辑控制器:控制语言执行顺序 (类似于python中逻辑控制语句)
前置处理器:在请求发送之前执行(类似于自动化中的setup部分)
后置处理器:在请求发送之后执行(类似于自动化中的teardown部分)
断言:对响应结果进行断言(类似于assert语句)
定时器:等待一定的时间
测试片段:封装一段代码,供脚本调用,不直接执行
配置元件:对参数进行赋值,(类似于自动化中的参数化)
监听器:查看脚本运行结果
1.JMeter参数化常用方式
1)用户定义的变量(全局参数,所有用户读取的变量值相同)
添加方式:测试计划-->线程组--> 配置元件-->用户定义的变量
参数设置:参数名:参数值 在http取样器中 引用 ${ 参数名}
2)用户参数 :针对每个用户取不同的值,但是不能针对同一个用户的不同循环取不同的值
添加方式:测试计划-->线程组--> 前置处理器-->用户参数
3)CSV Data Set Config(CSV数据文件):针对每个用户的每次循环取不同的值
定义CSV数据文件
4)函数( -counter):不需要提前准备数据,jmeter自动添加计数的方式来完成参数化,
TRUE 每个用户分别计数, FALSE 所有用户使用全局计数
2 JMeter中常用断言
断言: 对响应数据进行自动校验
1)响应断言: HTTP消息的任何格式的响应
添加方式 : 测试计划--> 线程组-->HTTP请求-->(右键添加)断言-->响应断言
2)JSON断言: 响应消息为JSON格式的响应
3)持续时间断言(Duration Assertion): 对请求的响应时间进行断言
响应时间: 发出请求到收到响应的全部时间
3 常用的关联方法(后置处理器实现)
关联: 当请求之间有依赖关系,一个请求的入参,需要使用到之前请求的响应数据时,需要使用关联
1)正则表达式提取器: 适用于如何格式的响应数据
正则表达式介绍:
. : 是通配符,可以代表任意字符 (除换行回车)
* :代表前面的字符出现0次或者多次
.* 匹配规则 : 找到左边界值后,往右杳找有边界,找到最后面的右边界,中间的所有数据都被记录下来
? : 代表非贪婪匹配,找到左边界后,往右查找匹配右边界,只要有匹配的右边界就停止继续查找;再次查找左边界和右边界
左边界 (.*?) 右边界 : 可以提取出想要获取的数据内容
添加方式 : 测试计划-->线程组-->HTTP请求-->(右键添加)后置处理器-->正则表达式提取器
2)XPath提取器: 适用于HTML格式的响应数据
3)JSON提取器: 适用于JSON格式的响应数据
跨线程组关联指的是多个请求之间有关联关系(即一个请求的参数需要使用前面请求的响应),但是两个请求不在一个线程组内,此时使用提取器无法完成关联,需要使用Jmeter属性来完成数据的传递。
1、添加线程组1,添加HTTP请求——传智播客
2、添加JSON提取器
3、添加Bean Shell取样器(填写setProperty函数——将提取器提取出来的值赋值给Jmeter属性)
4、添加线程组2,添加HTTP请求——百度
引用前面返回的城市信息(使用property函数——将Jmeter属性值读取出来)
5、添加查看结果树
Jmeter在客户端和服务器之间做代理。收到所有的请求和响应数据后,Jmeter再进行逆向解析的动作,将数据报文转化为脚本。
jmeter脚本录制:
1、在测试计划下,添加HTTP代理服务器
2、设置自己PC机的代理
3、点击启动,进入浏览器进入相关的操作,脚本会自动生成并存放在指定的线程组下。
过滤规则的配置:
管理cookie:自动将cookie信息添加到后续的所有请求中。
登录及后续的相关操作时,需要提前添加HTTP Cookie管理器
准备工作:
启动数据库
加载mysql的JDBC驱动
方法1:在测试计划下方的位置,点击浏览添加JDBC的jar包
方法2:将JDBC的jar拷贝到lib目录,并重启jmeter
配置JDBC连接池的参数
编写JDBC脚本步骤(搜索指定商品,在返回结果中检查是否包含指定商品的ID的详情URL):
1、添加JDBC Request请求
JDBC连接池名称:必须与“JDBC连接池”中的连接名一致
要执行的sql语句
Variable Name中:写明要保存的数据的参数名
2、添加HTTP请求 —— 搜索请求
参数为中文时,将参数写到下方参数位置,并勾选上“编码”
3、添加响应断言:
在响应断言中配置要检查的数据内容。
注意:应用JDBC Request查询出的结果时,需要加上索引(因为JDBC查询的结果保存为一个列
表)
控制jmeter脚本的执行顺序
如果(if)控制器:
第一种配置方法:
第二种配置方法:
勾选上Interpret Condition as Variable Expression,判断条件需用使用jexl3函数。
(使用这个函数来进行判定时,Jmeter自身的执行效果要高一些)
循环控制器与线程组中的循环次数的对比:
循环控制器只控制其子节点下的HTTP请求,线程组对所有的请求都有效
假如线程组循环次数为2,循环控制器次数为3,则循环控制器下的请求执行次数为:2*3
与用户定义的变量或者正则表达式提取器配合使用,循环读取用户定义的变量或者正则表达式结果
中的所有数据。
配置参数:
常数吞吐量定时器:
设置Jmeter以指定的吞吐量速度往服务器发送HTTP请求。
注意:常数吞吐量定时器只是帮忙达到性能测试的负载(压力)要求,本身不代表性能有bug/无bug
对于bug的分析需要通过响应时间来判断
jmeter分布式:
应用场景:
当性能测试时需要模拟的负载(用户/请求)太高,一台测试机无法模拟,需要使用多台测试机一
起来模拟以达到要求的负载量,这就叫分布式
原理:
分布式测试时通常由1台控制机和N台代理机
控制机:给代理发送任务,接收代理机返回的数据统计,做汇总展示
代理机:往服务器发送HTTP请求,并接收服务器的响应,并对响应进行处理。
分布式相关注意事项:
测试机上所有的防火墙关闭
所有的控制机、代理机、被测系统都在同一个子网中
所有的控制机和代理机上安装的Jmeter和JDK的版本必须完全一样。
要关闭Jmeter中的RMI SSL开关
分布式配置与运行:
配置
代理机(Jmeter.property)
server_port :代理机启动的端口,不冲突即可
server.rmi.ssl.disable=true
控制机
remote_hosts: 代理机的IP:port,如果有多个代理机用 ',' 分隔
server.rmi.ssl.disable=true
运行:
代理机
进入bin目录下,执行jmeter_server.bat
控制机:
进入bin目录下,执行jmeter.bat
启动时,点击“运行”——“远程启动所有”控制代理机的运行
jmeter报告:
聚合报告:
重点关心的性能指标:
响应时间
观察当前的最大最小值的波动范围
如果波动范围不大,以平均响应时间作为最终的性能响应时间结果
如果波动范围很大,以90%(经验)的响应时间作为最终性能响应时间结果
错误率
吞吐量
HMTL报告:
通过命令行的方式来运行,输出HTML的测试报告
Jmeter -n -t 测试脚本 -l result.jtl -e -o HTML报告路径
参数:
步骤:
1、在bin目下执行上述命令
2、等待脚本执行完成后,进行report文件夹下,打开index.html,可以看到性能测试的详细数据
统计
插件安装:
(1)安装插件管理器
在Jmeter官网上下载插件管理器Plugins-manager-1.3.jar
将JAR包放入到lib\ext目录下
重启Jmeter,可以在选项下看到Plugins Manager选项
(2)安装指定的插件(需要安装的插件有:3 Basic Graphs、PerfMon、Concurrency、5
Additional)
打开Plugins Manager插件管理器
选择Available Plugins,当前可用的插件
选择需要下载的插件(等待右方文本内容展示出来)
下载右下角的下载按钮,自动的完成下载,Jmeter会自动重启
需要下载的插件:
TPS:运行过程中的TPS统计
Bytes Through Over Time:运行过程中的传输速率
基于jmeter客户端监控服务器 硬件资源:
1、下载安装包ServerAgent-2.2.3.zip
2、解压缩安装包
3、启动安装包中的执行文件:服务器windows启动startAgent.bat
4、Jmeter中添加插件,在监听器——perForm插件,并配置
并发数计算:
(1)普通的计算方式:TPS = 总的请求数 / 总的时间
问题:对于同一天的时间内,不同的时间段,请求速率会有波动,这样计算会被平均掉,无法测试负载
高的情况
(2)二八原则:
核心:80%的请求数会集中在20%的时间内完成
TPS = 总的请求数 *80% / 总的时间 * 20
注意:二八原则的计算方法会比平均的计算方式更准确
(3)按照每天的具体业务数据进行计算(稳定性测试TPS)
当获取每天的具体业务统计数据时,就可以统计出业务请求集中的时间段作为有效业务时间;并统计有效业务时间内的总请求数
TPS = 有效业务时间的总请求数 * 80% / 有效业务时间 * 20%
(4)模拟用户峰值业务操作的并发量:(压力测试TPS)
获取每天的交易峰值的时间段,及这个时间段内的所有请求的数量
TPS = 峰值时间内的请求数/峰值时间段 * 系数
系数可以是:2、3、6、10,由项目组自己觉得要达成的性能指标