性能测试内容
思维导图原件链接:https://pan.baidu.com/s/1COceW_mNAFYv69g95H5O0A
提取码:ibem
Jmeter
下载安装
- ①安装JDK
- ②安装Jmeter,网址:http://jmeter.apache.org/
解压后配置环境变量
①系统变量
变量名:JMETER_HOME
变量值:D:\apache-jmeter-5.4.1(解压后的文件路径)
②Path
%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar
%JMETER_HOME%\lib\jorphan.jar
%JMETER_HOME%\lib\logkit-2.0.jar
启动
功能概述
- bin文件
- docs文件
- printable_docs\usermanual文件
- lib文件
- 汉化配置
- 响应乱码的处理
基本使用流程
需求:使用jmeter访问百度首页接口,并查看请求的响应信息
方法:添加线程组,线程组添加HTTP请求取样器和察看结果树监听器
-
在测试计划下添加线程组
-
在线程组下添加HTTP请求取样器
-
填写HTTP请求的相关请求数据
-
在线程组下添加察看结果树监听器
-
点击启动并查看结果
元件组
基本元件
- 线程组:模拟用户的
- 配置元件:进行测试环境和测试数据的初始化。类似于自动化脚本中的setup
- 前置处理器:对要发送请求进行预处理。类似于自动化脚本中的参数化
- 取样器:往服务器发送请求。类似于自动化脚本中的发送请求的代码
- 后置处理器:对收到的服务器的响应进行数据提取。类似于自动化脚本中获取响应中特定字段的语句
- 断言:将收到的响应结果与预期结果做对比。类似于自动化脚本中的断言
- 监听器:查看测试脚本运行的结果和日志。类似于自动化脚本中的测试报告
- 定时器:等待一段时间。类似于自动化脚本中的sleep
- 测试片段:封装基本功能,不单独执行,需要通过脚本调用才能执行。类似于自动化脚本中封装的函数。
元件作用域
核心:根据测试计划中的树形结构的父子节点来确定的
- 取样器:元件不和其他元件相互作用,因此不存在作用域的问题;
- 逻辑控制器:元件只对其子节点中的取样器和逻辑控制器作用;
- 其他六大元件:除取样器和逻辑控制器元件外,如果是某个取样器的子节点,则该元件对其父子节点起作用;
- 如果其父节点不是取样器,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等);
元件执行顺序
- 配置元件(config elements)
- 前置处理程序(Per-processors)
- 定时器(timers)
- 取样器(Sampler)
- 后置处理程序(Post-processors)
- 断言(Assertions)
- 监听器(Listeners)
提示:
1.前置处理器、后置处理器、断言等元件功能对取样器起作用(如果在它们的作用域内没有任何取样器,则不会被执行)
2.如果在同一作用域范围内有多个同一类型(比如两个HTTP请求或者一个HTTP请求一个FTP请求)的元件,则这些元件按照它们在测试计划中的上下顺序依次执行
线程组
线程组的特点
- 设定线程数(模拟多人操作)
- 取样器(请求) 和逻辑控制器必须依赖线程组才能使用(先加线程组再加请求,因为请求是用户发送的,线程组是用户)
- 线程组可以添加多个,多个线程组可以并行或串行(很多用户一起运行)
- 线程组下可以添加其他元件下组件
线程组的分类 - 线程组
普通的、常用的线程组,可以看做一个虚拟用户组,线程组中的每一个线程都可以理解为一个虚拟用户 - setUp线程组
一种特殊类型的线程组,可用于执行预测试操作(所有线程组最先运行) - tearDown线程组
一种特殊类型的线程组,可用于执行测试后工作(最后执行,清理一些残留的数据、恢复环境和数据等)
参数化
线程组的参数
-
线程数
-
Ramp-Up时间(秒)
-
循环次数
1秒内循环10次
等3秒再持续执行10秒
注意:
实际发送的HTTP请求数为线程组*循环次数
HTTP请求参数
- 协议不填写时默认为http
察看结果树的参数
用户定义的变量
- 线程组下添加用户定义的变量
- 添加变量
- 添加HTTP请求和察看结果树
- 使用变量,格式:${变量名}
- 运行并查看结果
变量添加方法二:再测试计划中添加,两者的区别是一个是局部变量 一个是全局变量
用户参数
- 在线程组中添加用户参数
- 添加变量和用户
- 添加HTTP请求和察看结果树
- HTTP请求中引用参数
- 运行结果并查看结果树
CSV Data Set Config
csv数据文件
- 在线程组中添加CSV Data Set Config
- CSV数据文件配置
- 参数的引用
- 运行结果
函数
- 生成函数
- 使用并查看结果
断言
响应断言
- 在HTTP请求中添加响应断言
- 配置响应断言
- 运行结果
- 配置文件详情
Json断言
-
在HTTP请求中添加json断言
-
配置json文件
-
查看结果
断言持续时间 -
添加断言持续时间
-
配置断言持续时间
-
运行并查看结果
关联
获取某网站的title值作为请求参数
-
在HTTP请求中添加正则表达式提取器
-
配置
-
将提取出来的title放到访问百度地址的参数中
-
查看结果
xpath提取器
-
在HTTP请求中添加XPath提取器
-
XPath文件配置
-
运行结果
Json提取器
-
在HTTP下添加Json提取器
-
配置Json提取器的文件
-
运行并查看结果
直连数据库
-
在测试计划中添加MySql驱动jar包,或者直接将jar包放在lib文件里
-
在线程组下添加JDBC配置文件
-
配置文件
-
在线程组中添加JDBC Request
-
在线程组下添加JDBC Request并且配置,sql语句选择的属性值多个时变量名也用,隔开
-
HTTP断言中就可以引用变量来进行判断
逻辑控制器
控制取样器的执行顺序
IF控制器
-
添加自定义变量
-
在线程组下添加if控制器
-
定义if控制器
-
运行并查看结果
循环控制器
-
在线程组下添加循环控制器
![在这里插入图片描述](https://img-blog.csdnimg.cn/56c1e70e7f504d6cbbd5a8aa7facc1ac.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1BldHJlbF8=,size_16,color_FFFFFF,t_70 -
配置循环控制器
-
运行并查看结果
ForEach控制器
一般和用户自定义变量或正则表达式一起使用
-
与用户定义的变量配合使用
-
与正则表达式配合使用
定时器
同步定时器(Synchronizing Timer【集合点】)
当需要进行大量用户并发测试时,为了让用户能真正的同时执行,添加同步定时器,用于阻塞线程,直到线程数达到预先配置的数值,才开始执行取样器的操作。
-
在HTTP请求下添加同步定时器
-
配置并查看结果
-
超时时间(①必须配置,否则当模拟用户数无法被并发整除时,会有部分用户挂起无法执行。②配置时间不能太短,必须比并发数加载时间长,否则无法达到并发数的要求数据就会被释放掉)
常数吞吐定时器
-
在HTTP请求下添加常数吞吐定时器
-
配置并运行
分布式
当测试机无法模拟用户需要的业务负载量时,需要使用多台测试机配合测试
测试原理
1、分布式测试时分为一台控制机和多台代理机
2、控制机负责发布测试任务给代理机
3、代理机接收任务并向服务器发送请求,并接收服务器返回的响应,然后将测试结果返回给控制机
4、由控制机对测试结果数据进行汇总统计
注意事项
1、所有的测试机防火墙都已经关闭
2、所有的测试机及服务器在同一个网络内
3、所有的测试机的Jmeter版本和IDK版本完全相同
4、关闭Jmeter里的RMI SSL开关
分布式测试步骤
-
代理机配置
①server_port:不重复。如果使用多台机器做代理机,可不用配置
②关闭RMl SSL -
控制机配置
①remote_server:所有代理机的IP+port,有多台代理机时用逗号分隔
②关闭RMlI SSL -
运行
代理机:jmeter-server.bat运行
控制机:①jmeter.bat运行 ②控制代理机执行脚本;运行—>远程启动所有 -
具体流程