文章目录
性能测试的概念
什么是性能测试
性能:指时间(系统处理用户请求的响应时间)和资源(系统运行过程中,系统资源的消耗情况)
性能测试:使用自动化工具,模拟不同的场景,对软件各项性能指标进行测试和评估的过程。
性能测试的目的
评估当前系统能力
寻找性能瓶颈,优化性能
评估软件是否能够满足未来需求
性能测试的时机
通常在功能测试通过之后进行
性能测试的策略
基准测试
通常为单用户测试。一般不会单独存在,它的目的是建立一条基准线。
常见的使用场景有:
1.为多用户并发测试等综合场景提供参考依据
2.先进行一次基准测试,当系统软硬件环境发生变化后再进行一次,以确定变化对性能的影响
负载测试
在满足客户要求的性能指标下,逐步增加系统负载,找到系统能够承受的最大负载的测试
稳定性测试
将系统在客户要求的负载下运行足够长的时间(时长通常由用户规定),观察其稳定性的测试
压力测试
在高负载下测试系统,看其在这种状态下是否存在隐患,是否有良好的容错力和恢复力
性能测试的指标
响应时间
指从客户端发起请求开始,到接收到结果的总时间。包括:服务器处理时间+网络传输时间
并发数
某一时刻同时向服务器发送请求的用户数
吞吐量
指的是单位时间内处理的客户端请求数量。从技术指标上,可以用每秒事务数(TPS)和每秒查询数(QPS)来衡量。
TPS:服务器每秒处理的事务请求的数量
QPS:服务器每秒处理的指定请求的数量
点击数
所有的页面元素发起的请求总量
错误率
系统在负载的情况下,失败业务的概率
资源利用率
资源的使用量 / 总的资源可用量 * 100%
没有特殊要求的情况下,通常要求:
CPU使用率不高于85%
内存使用率不高于80%
磁盘速率不高于90%
网络速率不高于80%
性能测试的工具
Jmeter
Jmeter最基础的案例
线程(用户)-线程组
配置元件-HTTP信息头管理器
取样器-HTTP请求
监听器-查看结果树
监听器-聚合报告
Jmeter参数化
参数化的本质是使用不同的测试数据测试相同的功能,目的是将测试数据与测试方法分开。
用户定义的变量(常用)
使用场景:
可理解为需要定义全局变量的时候
使用步骤:
1.右键:添加-配置元件-用户定义变量
2.在下图红框中维护变量
3.在需要用到变量的地方引用变量:${变量名称}
用户参数
使用场景:
不同的用户使用不同的测试数据
使用步骤:
1.右键:添加-前置处理器-用户参数
2.在下图红框中维护变量 (注意有几个线程就要维护几个用户)
3.在需要用到变量的地方引用变量:${变量名称}
CSV数据文件设置(常用)
使用场景:
不同的用户,或者同一个用户的多次循环,使用不同的测试数据。需要提前准备数据。
使用步骤:
1.准备csv数据文件(注意保存时的编码格式为utf-8、后缀为.csv)
2.右键:添加-配置元件-csv数据文件设置
3.在下图红框中添加csv文件
4.在需要用到变量的地方引用变量:${变量名称}
函数
使用场景:
不同的用户,或者同一个用户的多次循环,使用不同的测试数据。不需要提前准备数据。
使用步骤:
常用的几个函数:
random:在给定的最小值和最大值之间生成一个随机数
counter:生成一个递增的计数器值
time:生成一个当前时间的时间戳或格式化日期时间字符串。如果不提供格式,则默认生成时间戳。
Jmeter断言
断言的目的是让程序自动判断预期结果和实际结果是否一致。
添加方式:右键:添加-断言
常用的三种断言:
响应断言
JSON断言
持续时间断言
Jmeter关联
当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这时候就需要用到关联处理。
关联处理一般需要用到后置处理器,常用的为:正则表达式提取器、XPath提取器、JSON提取器
提取到的内容都通过**${引用名称}**来使用
正则表达式提取器(常用)
使用场景:可以针对任意格式的响应数据进行提取
XPath提取器
使用场景:可以针对HTML格式的响应数据进行提取
XPath教程见:https://www.w3school.com.cn/xpath/xpath_syntax.asp
JSON提取器
使用场景:可以针对JSON格式的响应数据进行提取
JSONPath教程见:(非官方,挂了就关键字搜索其他的)https://blog.csdn.net/zhouruifu2015/article/details/130056895
https://blog.csdn.net/fanfangyu/article/details/133988514
查看JSONPath提取值的网站:https://jsonpath.com/
Jmeter属性
上节提取到的内容是保存为变量的,局部生效,无法跨线程组使用。如果想要实现跨线程组使用就需要定义为属性。
步骤:
(线程组1)
1.添加合适的提取器,提取想要的内容。
2.将提取的内容定义为属性。需要用到setProperty函数和BeanShell后置处理程序。
(线程组2)
3. 使用属性。需要用到Property函数。
Jmeter常用逻辑控制器
循环控制器
ForEach控制器
一般常与用户定义的变量、正则表达式提取器等配合使用。该控制器下的取样器会被循环执行,每次读取不同的变量值。
用户定义的变量配合使用案例:
Jmeter常用定时器
同步定时器
作用是阻塞线程。当在规定的时间内达到一定的线程数量,这些线程会在同一个时间点一起释放,瞬间产生很大的压力。
使用场景:模拟XX个用户同时XXX
常数吞吐量定时器
使用场景:负载测试
固定定时器
使用场景:需要延迟请求发送时间时
Jmeter直连数据库
以下介绍的是直连MySQL数据库
1.下载MySQL驱动的jar包(下载好后记得解压) https://downloads.mysql.com/archives/c-j/
2.添加MySQL驱动的jar包
方法一:(本脚本可用)在测试计划面板点击浏览按钮,选择jar包添加
方法二:(所有脚本可用)将jar包放到…/lib/ext下,重启JMeter
3.配置数据库连接信息
右键->添加->配置原件-> JDBC Connection Configuration4.添加JDBC请求