一、性能测试
-
性能测试是什么?
- 广义:基于协议模拟用户发送请求,对服务器形成一定负载,来测试服务器的性能指标是否满足要求。
- 狭义:指通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
-
为什么要进行性能测试?
- 评估当前系统的能力
- 寻找性能瓶颈,优化系统性能
- 评估软件是否满足未来的需求
- 招聘需要
3.什么是性能?
- 时间:系统处理用户请求的响应时间。
- 资源:系统运行过程中,系统资源的消耗情况。
-
功能和性能测试
- 不同
- 功能测试验证系统的功能需求规格,聚焦功能。
- 性能测试验证系统的业务性需求场景,聚焦时间和资源。
- 关系
- 一般项目中,先功能测试通过后,再进行性能测试。
- 不同
性能测试的分类
1.基准测试
- 狭义:单用户测试
- 广义:建立基准线,当系统软硬件环境发生变化之后再进行一次基准测试一确定变化对性能的影响。
2.负载测试
- 概念:通过增加逐步系统负载,确定在满足性能指标的情况下,找出系统所能承受最大负载量的测试。
- 作用:系统最大负载量达到用户要求时,系统才能正式上线使用。
- 重点
- 通过负载测试,可以确定系统的最大负载量和极限负载量。
- 系统对往外宣称的最大负载量
- 负载测试的实践一般为1-2小时。
3.稳定性测试
- 概念:在服务器稳定运行(用户正常负载)的情况进行长时间测试(1天-1周不等),并最终保证服务器能满足线上业务需求。
- 系统在用户需求的业务负载下运行达到规定的时间时,系统才能正式上线。
4.压力测试
- 概念:在强负载下的测试,查看系统在峰值下是否功能隐患,系统是否具有良好的容错能力和可恢复的能力。
- 测试场景
- 高负载下的长时间稳定性压力测试(如:B-C区间内进行24/3*24小时长时间测试)。
- 极限负载下的破坏性压力测试(如:C-B区间进行测试)。
5.并发测试
概念:在极短时间内,发送多个请求,在验证服务器对并发的处理能力。
应用场景:特定的活动场景:抢红包、秒杀、抢购等。
-
与负载测试对比:
- 负载测试:主要目的是测试高负载情况下,对系统资源的消耗,是否会耗尽的问题。
- 并发测试:主要目的是测试极短时间内,并发请求时,系统资源争抢的问题。
-
性能测试的指标
-
响应时间
- 指从客户端发起请求开始,到客户端接收到结果的总时间。
- 包括:服务器处理时间+网络传输时间。
-
并发用户数
某一时刻同时向服务器发送请求的用户数。
-
吞吐量
- 概念:单位时间内处理客户端的请求数量,直接体现软件系统的承受能力。
- 吞吐量单位分类:
QPS:每秒查询数,即控制服务器每秒处理的指定请求的数量。
-
TPS:每秒事物数,即控制服务器每秒处理事物请求的数量。
区别:QPS基本类似于TPS,但是不同的是对于一个页面的一次访问,形成一个TPS,但是一个页面请求,可能产生多次对服务器的请求,服务器对这些请求,可以计入QPS中。
点击数:所有的页面元素的请求总数量。
-
错误率
- 指系统在负载情况下,失败业务的概率。
- 错误率是性能指标,是高负载下的失败业务的概率
随机bug是功能bug,先解决随机bug才能进行性能测试。
-
资源利用率
- 概念:系统各种资源的使用情况,率=资源使用量/总资源可用量x100%
- 常见资源指标
- CPU使用率:不高于75%-85%
- 内存大小使用率:不高于80%
- 磁盘IO(速率):不高于90%
- 网速(速率):不高于80%
-
性能测试工具
HP LoadRunner 、 Apache Jmeter 、Apache AB
-
二、Jmeter介绍
- 为什么使用jmeter
- 开源、免费、基于JAVA编写,可集成到其他系统可拓展各个功能插件
- 支持接口测试、压力(负载和压力)测试等多种功能,支持录制回访
- 入门简单相较于自己编写框架和其他开源工具,有较为完善的UI界面,便于接口调试。
- 多平台支持,可在Linux,Windows、Mac上运行,支持多协议
- Jmeter的作用
- 接口测试:Postman,方便好用(可做性能测试,但没有性能指标)
- 性能测试jmeter
- 数据库测试
- jmeter怎么用
- 下载、安装jmeter,配置java环境变量,安装jdk
- Windows双击---jmeter.bat
- Linux双击---jmeter.sh
三、使用Jmeter测试快速入门
-
线程组是什么?
- 进程:一个正在执行的程序
- 线程:一个进程有多个线程
- 线程组:按照线程性质对线程分组。
- 三者关系:一个进程有多个线程组,一个线程组有多个线程。
-
创建线程组
点击进程---右键添加---点击线程----点击线程组
-
线程组主要包含三个参数
线程数、准备时长(Ramp-Up Period(in seconds))、循环次数
-
线程数
虚拟用户数,一个虚拟用户占用一个线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
-
准备时长
设置的虚拟用户数需要多长时间全部启动。
-
循环此时
每个线程发送请求的次数。
-
调度器
设置线程组启动的开始时间和结束时间
-
持续时间
测试持续时间、会覆盖结束时间
-
启动延迟
测试延迟启动时间,会覆盖启动时间。
-
启动时间
测试启动时间,启动延迟会覆盖它。当启动时间已过,手动只需测试当前时间也会覆盖它。
-
结束时间
测试结束时间,持续时间会覆盖它。
-
创建http请求
右键线程组---取样器---HTTP请求
-
指定请求域名,请求路径
- 名称:本属性用于标识一个取样器
- 注释:用于记录可读的注释信息
- 服务器名称或IP:HTTP请求发送的目标服务器名称或者ip地址
- 端口号:目标服务器的端口号
- 方法:发送HTTP请求的方法,较多为GET、POST方法
- 内容编码:utf-8、jbk
- 路径:目标URL路径
-
设置对应的查看内容
点击http请求---右键点击添加---点击监听器---查看结果数、聚合报告、用表格查看结果
-
查看表格信息
- Sample:每个请求的序号
- Start Time:每个请求开始时间
- Thread Name:每个线程的名称
- Label:http请求
- Sample Timer:每个请求所花时间,单位毫秒
- Status:请求状态,如果勾选则表示成功,如果为叉表示失败
- Bytes:请求的字节数
- 样本数目:请求个数,成功情况下等于,设定的并发数乘以循环次数
- 平均:每个线程请求的平均时间
- 最新样本:表示服务器响应最后一个请求的时间
- 偏离:服务器响应时间变化、离散程度测量值得大小
-
查看结果树
- 请求的数据展示(请求头信息、请求参数)
- 响应数据展示(响应码、响应头)
- 观察结果树,请求为红色是出错请求,请求为绿森是通过
-
聚合报告参数说明
- lable:对应每一个请求,显示的是http请求的name
- Samples:表示这一次的测试中一共发送多少个请求
- Average:平均响应时间指的是所有的请求的平均响应时间
- Median:中位数,50%用户响应时间
- 90%Line:90%用户的响应时间
- Min:最小响应时间
- Max:最大响应时间
- Error%:本次测试中出现错误的请求的数量/请求的总数
- Throughput:吞吐量,默认情况下表示每秒完成的请求数
- Recived KB/Sec:每秒从服务器端接收到的数据量,kb为单位
四、Jmeter主要组件介绍
- 测试计划:使用Jmeter进行测试的起点,它是其他Jmeter测试元件的容器。
- 线程组:代表一定数量的并发用户,它可以用来模拟并发用户发送请求。
- 取样器:模拟各种请求,所有实际的测试任务都由取样器承担,存在多种请求。
- 监听器:负责收集测试结果,同时也被告知了结果的方式。
- 断言:用于来判断请求响应的结果是否如用户所期望,是否正确。
- 逻辑控制器:允许自定义Jmeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
- 定时器:负责定义请求(线程)之间的延迟间隔,模拟对服务器的连续请求。
- 配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。
- 前置处理器和后置处理器负责在生成请求之前和之后完成工作,前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。
五、Jmeter组件参数化
-
参数化是什么?
动态的获取并设置数据
-
为什么使用参数化
- 执行批量操作,批量添加批量删除,人工效率太低。
- 运用程序代替人工获取并设置数据,安全高效。
- 比如:对被测系统的用户和密码进行参数化,来模拟多个用户同时登陆系统、
-
参数化实现之用户自定义变量
实现多个接口共享数据,修改一条即修改全部
右键线程组---添加----配置元件----用户自定义的变量
-
参数化实现之CSV Data Set Config
右键线程组---添加---配置元件---CSV Dtate Set Config
这个组件可以动态获取并设置数据,实现批量添加操作
文件名、文件编码、变量名称
用¥{变量名}方法调用
-
线程组线程数改为大于文件中数据的处理
遇到结束符在循环
遇到结束符停止线程
-
如果数据来自数据库
数据库导出txt文件
-
-
使用Jmter函数助手(文件中不要出现中文)
- 点击工具---函数助手、调出函数助手对话框
- 选择 -CSVRead 函数
- 函数参数
- 第一个参数:填写文件路径
- 第二个参数:文件列号是从0开始的,第一列0、第二列1
- 复制生成的参数化函数,copy过程需要使用的地方即可
- _Random函数是从某个数据段随机读取数据替换参数,当需求添加多条数据记录且某些字段需要唯一性时使用。
六、Jmeter正则表达式提取
-
使用正则提取
运用Jmeter正则提取器,可以从请求的响应结果中取到需要的内容,从而实现关联。
*号 匹配前面字表达式0次或多次
+号 匹配前面的子表达式一次或者多次
?号 匹配前面的子表达式0次或者一次
()号 标记一个子表达式的开始和结束为止
正则表达式提取的相关设置
右键线程---添加---后置处理器---正则表达式提取器
引用名称:下一个请求要引用的参数名称
-
正则表达式:
():括起来的部分就是要提取的。
.:匹配任何字符串
+:一次或者多次。
?:不要太贪婪,在找到第一个匹配项后停止。
模板:用
3$表示解析到第几个值。
匹配数字:0代表随机值,1代表全部取值,通常情况下填0
缺省值:如果参数没有取得的值,那默认给一个值让它取。