一、性能测试的概念
- 性能测试的概念
使用自动化工具,模拟不同的场景,对软件各项性能指标进行测试和评估的过程
- 性能测试的目的
评估当前系统能力,出现性能bug后,优化性能:预测未来的性能需求是否满足
例如:验收第三方提供的软件
常见的性能需求(性能需求文档):
WEB首页打开速度在5s以下,web登录速度15s以下
邮箱服务支持50万个在线用户
计费话单成功率达到99.999%以上
在100个并发用户的高峰期,邮箱的基本功能,处理能力至少达到10TPS
系统能在高于实际系统运行压力1倍情况下,稳定运行12小时
这个系统能否支撑200万的vn(每天登录系统的人次) vn—Virtual user(虚拟用户)
寻找性能瓶颈,优化性能
评估软件是否能满足未来需求
- 什么是性能
- 时间:系统处理用户请求响应时间
- 资源:系统运行过程中,系统资源的消耗情况
二、性能测试的策略
- 基准测试
- 狭义上:就是单用户测试(单用户循环多次得到的数据)
- 广义上:建立基准线,当系统的软硬件环境发生变化之后再进行一次基准测试确定变化对性能的影响
(1)基准测试数据的用途
基准测试不会单独存在
为多用户并发测试和综合场景测试等提供参考依据
为系统/环境配置、系统优化前后的性能提升/下降提供参考指标
- 负载测试
- 概念:通过逐步增加系统负载。确定在满足系统的性能指标(如响应时间等)情况下,找出系统所能承受的最大负载量的测试
- 作用:系统最大负载量达到用户要求时,系统才能上线使用
- 稳定性测试
概念:在服务器稳定运行(用户正常的业务负载下)的情况下进行长时间测试(1天-1周等),并最终保证服务器能满足线上业务需求
- 压力测试
概念:在强负载下的测试,查看系统在峰值情况下是否功能隐患、系统是否具有良好的容错能力和可恢复能力
测试场景:
极限负载情况下的破坏性压力测试
高负载下的长时间的稳定性压力测试
- 并发测试
概念:并发测试(绝对并发):是指在极端的时间内,发送大量请求,来验证服务器对并发的处理能力
三、性能测试的指标(标准)
- 为什么要学习性能测试指标
对性能测试结果进行量化衡量
- 什么是响应时间
指从客户端发送请求开始,到客户端接收到结果的总时间
包括:服务器处理时间+网络传输时间
- 什么是并发用户数
某一时刻同事向服务器发送请求的用户数
- 吞吐量(Throughput)
指的是单位时间内处理的客户端请求数量,直接体现软件系统的性能承载能力
- QPS(Query Per Second)每秒查询数:即控制服务器每秒处理的指定请求数量-
- TPS(Transactions Per Second)每秒事务数:即控制服务器每秒处理事务请求的数量
- 事务:即业务,页面上的一次操作,可能对应一个请求/多个请求
- 点击数和错误率
-
点击数:指客户端向服务端发送请求时,所有页面的页面资源元素(如:图片、链接、框架css、js等)的请求总数量
注意:
只有web项目才有此指标
点击数是请求数,点击数不是页面上的一次点击 -
错误率:指系统在负载情况下,失败业务的概率。错误率=(失败业务数/业务总数)*100%
注意:大多系统都会要求错误率无限接近于0错误率是一个性能指标,不是功能上的随机bug
6.资源使用率
资源使用率:是指系统各种资源的使用情况,一般用“资源的使用量/总的资源可用量*100%”形成资源利用率的数据
四、性能测试的流程
功能测试完成后bug修复好后-》性能测试
1.性能测试执行
建立测试环境-》编写测试脚本-》性能测试监控-》执行测试脚本
2.性能分析和调优
说明:性能测试分析人员经过对结果的分析后,如果不符合性能需求,则会提出性能bug,然后有开发人员进行后续的调优
五、Jmeter元件和组件的介绍
- Jmeter的安装和介绍
(1)Loadrunner和Jmeter对比
(2)Jmeter的bin目录介绍
(3)其他目录介绍
(4)目录总览
(5)永久修改语言配置
- 元件的基本介绍
(1)元件:多个类似功能组件的容器(类似于类)
- 取样器——发送请求
- 逻辑控制层——控制语句的执行顺序
- 前置处理器——对请求参数进行预处理
- 后置处理器——对响应结果进行提取
- 断言——检查接口的返回结果是否与预期结果一致
- 定时器——设置等待
- 测试片段——封装一段代码,供其他脚本调用
- 配置元件——测试数据的初始化配置
- 监听器——查看Jmeter脚本的运行结果
(2)组件:实现独立的某个功能(类似于方法)
- 元件的作用域
元件的作用域:是考测试计划的属性结构中元件的父子关系来确定的
提示:所有的组件都是以取样器为核心来运行的。组件添加的位置上不同,生效的取样器也不同
作用域的原则:
- 取样器:核心,不和其他元件相互作用,没有作用域
- 逻辑控制器:只对其子节点中的取样器和逻辑控制器起作用
- 其他元件:
- 如果是某个取样器的子节点,则该元件只对其父节点起作用
- 如果其父节点不是取样器,则其作用域是该元件父节点下的其它所有后代节点(包括子节点,子节点的子节点等)
- 元件的执行顺序
同一个作用域下不同类型元件:
配置元件–>前置处理程序–>定时器–>取样器–>后置处理程序–>断言–>监听器
同一个作用域下多个相同类型元件:
按照测试计划中从上到下的顺序依次执行
六、JMeter使用示例
- JMeter第一个案例
需求:使用JMeter访问百度首页接口,并查看请求和响应信息
步骤:
-
启动JMeter
-
在“测试计划”下添加“线程组”
-
在“线程组”下添加“HTTP请求”取样器
-
填写“HTTP请求”的相关请求数据
-
在“线程组”下添加“查看观察树”监听器
-
点击“启动”按钮运行,并查看结果
-
线程组
概念:控制JMeter用于执行测试的一组用户
线程组的分类:
- Setup线程组:预测试操作,所有脚本之前执行
- 普通线程组:执行测试用例,可以有1个或多个(并行/串行)
- Teardown线程组:测试后操作,所有脚本之后执行
-
线程组参数
-
http请求参数
(1)响应返回中文乱码解决方案
七、JMeter的参数化
- 什么是参数化测试?常用的参数化方法
(1)用户定义变量的步骤
(2)用户参数的参数化的步骤
(3)csv参数文件设置
(4)函数参数化设置
函数助手对话框位置
生成函数
引用函数
参数化小结
(5)4种参数化的优缺点
- 函数:
- 作用:保证不用的用户及多次循环时,都可以取到不用的值,不需要提前设置
- 局限性:输入数据有特定的业务要求时无法使用(如:登录时的用户名密码)
八、JMeter断言
- 响应断言
(1)参数配置详细介绍
(2)响应断言的操作步骤
- JSON断言
(1)json断言参数介绍
(2)json断言操作步骤
3.断言持续时间
4.3种断言的区别
九、JMeter关联
1.正则表达式
什么是正则表达式?
在编写处理字符串的程序或网页时,经常有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
常用元字符
代码 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
常用限定符
代码/语法 | 说明 |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
n | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
常用反义词
代码/语法 | 说明 |
---|---|
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
(1)案例
2.正则表达式提取器
(1)正则表达式参数介绍
案例
3.XPath提取器
(1)XPath参数介绍
(2)案例
4.JSON提取器
(1)JSON参数介绍
(2)案例
十、JMeter属性
- 设置函数和使用函数
2.函数设置和使用步骤
- 案例
(1)添加线程组
(2)添加http请求-天气
(3)添加json提取器,获取数据
(4)添加BeanShell取样器(将JSON提取器提取的值保存为JMeter属性)
-
工具函数助手对话框
-
保存JMeter属性:KaTeX parse error: Expected group after '_' at position 2: {_̲_setProperty(pr…{city},)}
(5)添加线程组
(6)添加http请求-百度
-
读取JMeter属性-根据函数property
(7)添加查看结果树
测试计划选择为串行执行
- 关联和属性小结
十一、JMeter录制脚本
十二、JMeter直连数据库
1.使用场景
2.操作步骤
3.案例
十三、逻辑控制器
1.IF控制器
(1)参数介绍
(2)案例
2.循环控制器
(1)循环控制器和线程组循环次数的区别
3.ForEach控制器
(1)参数介绍
(2)案例
(3)案例2
4.同步控制器
(1)参数介绍
(2)案例
5.吞吐量定时器
(1)参数
6.固定定时器
(1)参数
(2)案例