一、性能测试的概念
使用自动化工具,模拟不同的场景,对软件各项性能指标进行测试和评估的过程
评估当前系统能力,出现性能bug后,优化性能:预测未来的性能需求是否满足
例如:验收第三方提供的软件
常见的性能需求(性能需求文档):
WEB首页打开速度在5s以下,web登录速度15s以下
邮箱服务支持50万个在线用户
计费话单成功率达到99.999%以上
在100个并发用户的高峰期,邮箱的基本功能,处理能力至少达到10TPS
系统能在高于实际系统运行压力1倍情况下,稳定运行12小时
这个系统能否支撑200万的vn(每天登录系统的人次) vn—Virtual user(虚拟用户)
寻找性能瓶颈,优化性能
评估软件是否能满足未来需求
二、性能测试的策略
(1)基准测试数据的用途
基准测试不会单独存在
为多用户并发测试和综合场景测试等提供参考依据
为系统/环境配置、系统优化前后的性能提升/下降提供参考指标
概念:在服务器稳定运行(用户正常的业务负载下)的情况下进行长时间测试(1天-1周等),并最终保证服务器能满足线上业务需求
概念:在强负载下的测试,查看系统在峰值情况下是否功能隐患、系统是否具有良好的容错能力和可恢复能力
测试场景:
极限负载情况下的破坏性压力测试
高负载下的长时间的稳定性压力测试
概念:并发测试(绝对并发):是指在极端的时间内,发送大量请求,来验证服务器对并发的处理能力
三、性能测试的指标(标准)
对性能测试结果进行量化衡量
指从客户端发送请求开始,到客户端接收到结果的总时间
包括:服务器处理时间+网络传输时间
某一时刻同事向服务器发送请求的用户数
指的是单位时间内处理的客户端请求数量,直接体现软件系统的性能承载能力
点击数:指客户端向服务端发送请求时,所有页面的页面资源元素(如:图片、链接、框架css、js等)的请求总数量
注意:
只有web项目才有此指标
点击数是请求数,点击数不是页面上的一次点击
错误率:指系统在负载情况下,失败业务的概率。错误率=(失败业务数/业务总数)*100%
注意:
大多系统都会要求错误率无限接近于0
错误率是一个性能指标,不是功能上的随机bug
6.资源使用率
资源使用率:是指系统各种资源的使用情况,一般用“资源的使用量/总的资源可用量*100%”形成资源利用率的数据
四、性能测试的流程
功能测试完成后bug修复好后-》性能测试
1.性能测试执行
建立测试环境-》编写测试脚本-》性能测试监控-》执行测试脚本
2.性能分析和调优
说明:性能测试分析人员经过对结果的分析后,如果不符合性能需求,则会提出性能bug,然后有开发人员进行后续的调优
五、Jmeter元件和组件的介绍
(1)Loadrunner和Jmeter对比
(2)Jmeter的bin目录介绍
(3)其他目录介绍
(4)目录总览
(5)永久修改语言配置
(1)元件:多个类似功能组件的容器(类似于类)
(2)组件:实现独立的某个功能(类似于方法)
元件的作用域:是考测试计划的属性结构中元件的父子关系来确定的
提示:所有的组件都是以取样器为核心来运行的。组件添加的位置上不同,生效的取样器也不同
作用域的原则:
同一个作用域下不同类型元件:
配置元件–>前置处理程序–>定时器–>取样器–>后置处理程序–>断言–>监听器
同一个作用域下多个相同类型元件:
按照测试计划中从上到下的顺序依次执行
六、JMeter使用示例
需求:使用JMeter访问百度首页接口,并查看请求和响应信息
步骤:
启动JMeter
在“测试计划”下添加“线程组”
在“线程组”下添加“HTTP请求”取样器
填写“HTTP请求”的相关请求数据
在“线程组”下添加“查看观察树”监听器
点击“启动”按钮运行,并查看结果
线程组
概念:控制JMeter用于执行测试的一组用户
线程组的分类:
线程组参数
http请求参数
(1)响应返回中文乱码解决方案
七、JMeter的参数化
(1)用户定义变量的步骤
(2)用户参数的参数化的步骤
(3)csv参数文件设置
(4)函数参数化设置
函数助手对话框位置
生成函数
引用函数
参数化小结
(5)4种参数化的优缺点
八、JMeter断言
(1)参数配置详细介绍
(2)响应断言的操作步骤
(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)案例