就是指软件质量中的效率属性
效率属性:
使用自动化的工具,模拟不同的场景,对软件各项性能指标进行测试和评估的过程
不同
功能测试:验证系统的功能需求规格。焦点:功能(正向、逆向)
性能测试:验证系统的业务需求场景。焦点:时间、资源
关系
一般项目里,先功能测试通过后,再进行性能测试
概念
狭义上讲:单用户测试。(单用户循环多次得到的数据)
广义上讲:建立基准线,当系统的软硬件环境发生变化时之后再进行一次基准测试以确定变化对性能的影响
基准测试数据的用途
概念
通过逐步增加系统负载,确定在满足系统性能指标(如响应时间等)情况下,找出系统所能承受的最大负载量的测试
作用
系统最大负载量达到用户要求时,系统才能正式上线使用
概念
在服务器稳定运行(用户正常的业务负载下)的情况下进行长时间测试(1天~1周等),并最终保证服务器能满足线上业务需求
作用
系统在用户要求的业务负载下运行达到规定的时间时,系统才能正式上线使用
概念
在强负载下的测试,查看系统在峰值情况下是否功能隐患、系统是否具有良好的容错能力与可恢复能力
测试场景
概念(绝对并发)
在极短时间内,发送多个请求,来验证服务器对并发的处理能力
应用场景:抢红包、秒杀、抢购等
为什么学习性能测试指标:对性能测试结果进行量化衡量
从客户端发起请求开始到客户端接收到结果的总时间
包括:服务器处理时间 + 网络传输时间
某一时刻同时向服务器发送请求的用户数
概念
单位时间内处理客户端请求数量。直接体现软件系统的性能承载能力
单位
QTS与TPS的关系
事务即业务,一个事务可以对应一个请求或者多个请求
一个事务对应一个请求时:QTS = TPS
一个事务对应 n 个请求时:QTS = n * TPS
所有页面元素(图片、链接、框架等)的请求总数量
注意:点击数是请求数,不是页面上的一次点击
系统在负载情况下,失败业务的概率
注意:
概念
系统各种资源的使用情况
常见的资源指标
说明:性能测试分析人员经过对结果的分析以后,如果不符合性能需求,则会提出性能bug,然后由开发人员进行后续的调优。
相同点:
不同点:
安装JDK:下载JDK – 安装JDK – 配置环境变量 – 验证
安装Jmeter:下载Jmeter – 安装Jmeter – 配置环境变量 – 启动验证
注意点:
作用域的原则
取样器:核心,没有作用域
逻辑控制器:只对其子节点中的取样器和逻辑控制器起作用
其他元件:
如果是某个取样器的子节点,则该元件只对其父节点起作用
如果其父节点不是取样器,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)
元件执行顺序:
在同一个作用域(目录/级别/缩进)的不同元件的执行顺序:配置元件 - 前置处理程序 - 定时器 - 取样器 - 后置处理程序 - 断言 - 监听器
在同一个作用域(目录/级别/缩进)的相同元件的执行顺序:从上到下的顺序依次执行
案例:执行顺序
定时器1 - 请求1 - 定时器1 - 定时器2 - 请求2 - 定时器1 - 定时器3 - 请求3
需求:访问百度首页,并查看请求与响应信息
步骤:
控制Jmeter用于执行测试的一组用户
案例分析:
使用1个线程组,添加HTTP请求(百度)
分析:
向服务器发送http及https请求
选中线程组—>右键—>添加—>取样器—>HTTP请求
定义:使用不同的测试数据,调用相同的测试方法进行测试
本质:实现测试数据与测试方法的分离。
实现方式:
1. 用户定义的变量: 全局变量
2. 用户参数 :为每个用户分配不同的参数值
3. CSV数据文件设置: 文件方式参数化
4. 函数: 随机数据
5. 数据库
配置元件——>用户定义的变量
用户定义的变量是全局变量
定义变量格式:变量名:变量值
引用变量格式:${变量名}
前置处理器——>用户参数
针对同一组参数,当不同的用户访问时,可以获取到不同的值
配置元件——>CSV数据文件设置
当不同的用户,或者同一个用户的多次循环时,都可以获取到不同的值
把测试数据组织起来,用不同的测试数据调用相同的测试方法
用户定义的变量
作用:定义全局变量
局限性:每次取值(无论是否相同的用户)都是固定值
用户参数
作用:保证不同的用户针对同一组参数,可以取到不同的值
局限性:同一个用户在多次循环时,取到相同的值
CSV数据文件设置
作用:保证不同的用户,或者同一个用户的多次循环时,都可以获取到不同的值
局限性:需要手动进行测试数据的设置
函数
作用:保证不同的用户,或者同一个用户的多次循环时,都可以获取到不同的值,不需要提前设置
局限性:输入数据有特定的业务要求时无法使用
断言:让程序自动判断实际结果与预期结果是否一致
提示:
Jmeter中常用的断言:
任意http请求的响应结果,都可以使用响应断言
http请求——>(右键添加)断言——>响应断言
对http请求的响应结果为JSON格式时,可以使用
http请求——>(右键添加)断言——>JSON断言
测试http请求的响应时间是否满足要求时使用
http请求——>(右键添加)断言——>断言持续时间
关联:当请求之间有依赖,比如一个请求的入参时另一个请求返回的数据,这时需要用到关联处理
Jmeter中常用的关联方法:
就是一个公式,或者说一套规则,使用这套规则可以从任意字符串中提取出想要的数据内容
通过一个正则表达式可以提取出多组数据,每组数据设置对应的左边界和右边界即可
每一组数据都可以有一个或者多个值
公式格式:左边界(匹配符号)右边界:可以提取出想要获取的数据内容
. :是通配符,可以代表任意字符(除换行回车)
* :代表前面的字符出现0次或者多次
.* :找到左边界值后,往右查找有边界,找到最后面的右边界,中间的所有数据都被记录下来
? : 代表非贪婪匹配,找到左边界后,往右查找匹配右边界,只要有匹配的右边界就停止继续查找;再次查找左边界和右边界
公式格式:左边界(.*?)右边界
百度一下,你就知道 百度一下,你就知道
(.*?)
任意格式响应数据,都可以使用正则表达式提取器进行提取
http请求——>(右键添加)后置处理器——>正则表达式提取器
针对HTML格式的响应数据时可以使用
http请求——>(右键添加)后置处理器——>XPath提取器
案例:
//a[@id='kw']: 在HTML页面中,找出a标签(有一个属性为id,且id的值为kw)
//a : 找出所有的a标签
针对JSON格式的响应数据时,使用JSON提取器
http请求——>(右键添加)后置处理器——>JSON 提取器
需要实现跨线程组的数据传递时,可以使用Jmeter属性
将值保存成Jmeter属性,需要通过 Beanshell 取样器执行
在其他线程组使用property函数读取属性