一、性能测试的概念
使用自动化工具,模拟不同的场景,对软件各项性能指标进行测试和评估的过程
评估当前系统能力,出现性能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)案例


