软件测试第六阶段性能测试总结01

性能测试

这篇文章总结了一下我学习的性能测试部分的第一天和第二天的部分知识, 文章包含性能测试的概述, 性能测试的类型, 性能测试的监控指标, 性能测试的流程和Jmeter的基本介绍。不足之处希望大佬指正!

1. 性能测试Day01

1.1 性能测试概述

为什么要进行性能测试?
  • 业务需求
    • 大量用户下,系统能否稳定运行(比较多的)
    • 用于硬件服务器的选型
    • 用于软件技术的选型
  • 招聘需求
性能的关注点

性能(即效率)
时间特性:服务器处理用户请求的响应时间(卡/不卡这个用户直接能感受到,所以也是最重要的)
资源特性:软件在运行时,对于服务器资源的消耗情况
CPU、内存、磁盘等等

补充: 这里得提一下影响软件各项性能指标的因素

  • 代码性能
  • 中间件,数据库,架构设计是否存在瓶颈
  • 服务器资源消耗 如CPU, 内存,硬盘和网络等等。
什么是性能测试?

概念:使用自动化的工具模拟不同的场景,对软件的各项性能指标进行测试和评估。
软件的范围包括:
后台处理程序(开发写的代码)
中间件(应用服务器)、数据库、程序架构等等
服务器资源的消耗(CPU、内存、磁盘、网络)

性能测试的目的:

1、评估当前的系统能力
验收第三方提供的软件
获取关键的性能指标,与同类型的软件对比(例如:跑分)
2、发现性能问题后,寻找性能瓶颈,优化性能(例如:12306春运时服务故障)
3、评估软件能否满足未来的性能需要(例如:淘宝11在2020年的销售额)

1.2 性能测试分类

性能测试的分类主要包含基准测试, 负载测试和稳定性测试。

基准测试:
狭义上讲:单个用户进行业务场景的测试,并统计性能的各项指标(为后续多用户性能测试做参考对
比)
广义上讲:在某一个时刻进行性能测试建立一个已知的性能水平,当软硬件发生变化时再测试,观察变
化对于性能产生的影响。

负载测试
通过逐步增加系统负载量,测试系统性能的变化,在满足性能指标的前提下,系统所能够承受的最大负
载量的测试。
通过负载测试,一般能找到系统的最优负载和最大负载。普通用户看到的系统的最大能力,其实指的是最优负载,最大负载一般不向外面公布。

稳定性测试:
在服务器稳定运行(业务正常的负载量)的情况下,进行长时间的测试,保证服务器能够正常运行。
长时间:1天、1周

当然除了上述的分类还有其他的性能测试类型比如:
并发测试:
系统在短时间内同时处理大量请求,查看系统的并发处理能力。这里得提一下一个有意思的例子
在这里插入图片描述
A和B同时进行任务,但是当前系统只有一份西红柿和鸡蛋。结果是A, B陷入了竞争条件,双双都无法完成任务。并发测试的一个目的就是测试系统是否存在这种情况。

压力测试:
测试系统在强负载的情况下,测试系统在峰值情况下的操作,是否具有良好的容错能力及错误的恢复能
力。
稳定性压力测试:在系统高负载的情况下(接近C点),长时间运行(24小时),查看系统的处理能
力,
破坏性压力测试:在系统极限负载的情况下(C-D点),对系统进行压力测试,查看系统容错能力和错
误恢复能力。
在这里插入图片描述
容量测试:
关注系统在极限情况下的各种极限参数值。

1.3 性能测试的指标

指标:在性能测试的过程中,记录的一系列的数据值。用这些实际记录的数据值与需求中的性能要求做
对比,达成需求要求则无问题;未达到需求要求则说明是性能bug。
常见的性能指标:
响应时间、并发数、吞吐量、错误率、点击数、资源利用率。

响应时间:
客户端发送请求,到客户端收到服务器返回的响应,过程中所经历的全部时间,都是响应时间
响应时间 = 应用程序处理时间(A1+A2+A3) + 网络传输时间(N1+N2+N3+N4)。
在这里插入图片描述
并发数
并发测试的用户数量 (注意有三个相关的用户数)

  • 系统用户数:系统注册的总用户数据。
  • 在线用户数:某段时间内访问系统的用户数。
  • 并发用户数:某一物理时刻同时向系统提交请求的用户数。

吞吐量:
英文为Throughput,单位时间内,系统处理客户端请求的数量。衡量服务器性能好坏的直接指标。
加粗样式从不同维度来描述:
业务维度:业务数/秒,业务数/小时,业务数/天
网络维度:字节数/秒,字节数/小时,字节数/天
技术维度:TPS(每秒事务数)、QPS(每秒请求数)

这里细说一下QPS和TPS。
QPS:
服务器每秒钟处理的接口请求数量。
(一个服务器中有多个接口,QPS指的是所有接口在同一个单位时间内的接口处理数量之和)

TPS:
服务器每秒钟处理的事务请求数量。
一个事务通常指的是界面上的一个操作。一个事务可以包含一个或者多个接口请求。

点击数:
点击数不是指在页面上的一次点击。
指的是页面(html代码、图片、js。。。)加载时,向服务器发送的请求数量
可以用每秒点击数来衡量web服务器的处理能力。

错误率:
错误率不是功能有错误或者bug
指的是在系统高负载的情况下,业务失败的次数/业务的总次数 * 100%

资源利用率:
在这里插入图片描述

1.4 性能测试的流程

  • 性能测试需求分析
  • 性能测试的计划和方案
  • 性能测试的用例编写
  • 性能测试的执行
    • 性能测试脚本的编写/录制
    • 搭建性能环境
    • 运行脚本
    • 监控性能指标
    • 性能分析和调优
  • 性能测试的报告

2. 性能测试Day02

2.1 Jmeter和Loadrunner的对比

Loadrunner的优点:

  • 支持用户多
  • 报表精度高
  • 支持IP欺骗

Jmeter的优点:

  • 开源
  • 免费
  • 体积小

我们选择jmeter的原因:

  • Jmeter免费
  • Jmeter能提供的功能与loadrunner基本一致,能满足绝大多数的性能测试需要

2.2 jmeter元件及基本作用域:

基本元件
取样器:发送请求。类似于自动化中的业务测试语句
逻辑控制器:控制元件执行顺序。类似于自动化中的逻辑控制语句
前置处理器:对发送的请求参数进行预处理。类似于自动化中的参数化。
后置处理器:对收到的响应数据进行处理。类似于自动化中获得对应的测试结果。
定时器:等待一定时间。类似于自动化中的sleep语句
测试片段:封装的脚本,供其他脚本调用。类似于自动化中封装的函数
配置元件:测试前的环境及数据配置。类似于自动化中的初始化动作
监听器:查看测试的结果。类似于自动化中的日志和报告。

作用域的原理
按照jmeter测试计划的树形结构来定义作用域(有点儿类型python的缩进)
作用域的原则:

  • 取样器是jmeter的核心,不作用于其他的组件
  • 逻辑控制器,只对子节点起作用
  • 对于其他的组件,
    • 如果父节点是取样器的话,则只对父节点起作用,
    • 如果父节点不是取样器的话,则对父节点下的所有组件起作用

2.3 jmeter基本组成部分

Jmeter三个重要组件:

线程组

介绍:

  • 模拟多人操作
  • 如果有多个线程组时,可以并行或者串行执行
    如下图,“独立运行每个线程组”勾选,则所有的线程组按照添加顺序串行执行;
    如果未勾选,则并行执行(先后顺序无法保证)

线程组的分类:
普通线程组:用于发送业务请求的线程组(受并行、串行配置的影响)
setup线程组:在所有的线程组之前执行(不受并行、串行配置的影响)
teardown:在所有的线程组之后执行(不受并行、串行配置的影响)
线程组的属性:
线程数:需要模拟的虚拟用户数。
ramp-up time:模拟的虚拟用户数全部启动所需要的时间。

  • 目的:为了模拟性能测试的场景,更接近用户的使用习惯(用户慢慢接入系统)

循环次数:

  • 设置为固定次数n时:脚本运行时发送请求的次数为n
  • 设置循环次数为“永远”时,脚本会一直运行下去,不停止

调度器:

  • 一般与循环次数为“永远”的设置配合使用
  • 持续时间设置为n时:脚本的请求发送的时间为n秒
  • 延迟启动设置为n时:脚本的请求发送在等待n秒后再进行

延迟创建线程直到需要:当启动线程发送请求时,才分配资源;如果暂未启动该线程,则不分配。如果
不勾选,在jmeter点击运行时立即分配(使用不多,了解即可,无法观察效果)

线程数m和循环次数n的关系:

  • 如果同时配置,实际发送的HTTP请求数应该为m*n
  • 虽然发送请求的次数相同,但是不能相互替换
    线程数:代表并发用户数,体现服务器的负载量
    循环次数:代表执行时间

HTTP请求:

Jmeter参数化

包含用户定义的变量,用户参数,CSV数据和函数四种

用户定义的变量:
配置方法1:配置元件中配置

  • 添加路径:测试计划——线程组——配置元件——用户定义的变量
  • 参数设置:
    • 参数名:参数值
      在HTTP取样器中应用:${参数名}
      线程组下配置的用户定义的变量,在线程组下生效,与测试计划中配置的变量冲突时,以线程组下的为

用户参数:
使用用户定义的变量时,不同的用户在访问时,读取的参数值完全相同,如果希望每个用户在访问时的
变量不同,可以使用用户参数。

  • 配置方法:
    添加位置:线程组——前置处理器——用户参数
  • 添加用户:可以添加多组用户
    添加参数:针对每个用户添加多个参数

CSV数据文件设置:
使用用户参数时,每个用户可以取不同的数据,但是同一用户的多次循环时读取的数据是不变的。如果
想让同一用户多次循环读取时的数据也不同,需要使用CSV数据文件设置的方式。
1、定义CSV数据文件
2、添加线程组
3、配置CSV数据文件设置
添加位置:线程组——配置元件——CSV数据文件设置
参数配置:
4、添加HTTP请求
引用参数值时,使用时CSV数据文件中定义的变量名
5、查看结果树

函数:
通过counter函数在生成动态变化的数值

最后附上第二天的内容逻辑图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值