谁懂啊!性能测试还能这么快学好。。。。。。

前言

互联网普及,用户群体庞大,用户体验非常重要。性能是一种指标,是软件系统对于及时性的符合程度。对于一个产品根据响应时间和吞吐量衡量性能的及时性,响应时间是一个http完整的请求流程时间之和。对用户而言,响应时间是端到端的用户基本体验。

(一)用户视角看响应时间:

• 1-3秒,属于优的表现

• 3-5秒,可以接受,属于中间的表现

• 5秒以上,无法接受

响应时间=⽹络时间+应⽤程序的处理时间,响应时间是一个http完整的请求流程时间之和,请求和响应时间之和

(二)运维视角看系统的使用率

  • cpu使用率

  • 内存使用率

  • 平均负载

当cpu或者内存的使用率大于70%可能存在部署的程序访问速度很慢

mysql等数据库关注指标

所有的数据都是来自数据库:

1、连接数:连接数泄露(使用了连接数,但是没有释放)【是数据库的通道不释放占用的话导致链接不上,数据库瘫痪】

2、读写速度:IOPS

JVM(针对java技术线):Java应用程序的CPU和内存使用率

512M,CPU:1G

内存溢出/内存泄露:OOM

系统的最大容量:包含了cpu、jvm

系统最大处理的任务数:

1亿,但是同时进行支付,5千万可以同时进行,另外的5千万就可以排队处理,排队的策略是什么?----》

按照线程的优先级来设置的。每个任务都是有优先级的,那么最大优先级是10,最小是1,默认是5

在系统资源不紧张的时候,优先级不是那么特别的突出,但是在系统资源特别紧张的时候,那么优先级高的优先执行

(三)开发视角关注点

响应时间=⽹络时间+应⽤程序的处理时间,响应时间是一个http完整的请求流程时间之和,请求和响应时间之和

开发的关注度会更加的全面,毕竟代码都是程序员来编写的,具体可以汇总为如下:

• 前后交互的响应时间

• 中间件的参数设置(内存配多少,最大执行任务数多少)

• 内存释放泄露

• 连接数泄露

• 是否存在不合理的内存使用方式

• 是否存在不合理的线程同步方式(A和B两个任务,任务就是线程,任务发生冲突。处理方式:加锁机制 , A操作时B不能操作)

• 系统中是否存在不合理的资源竞争

• 系统架构&代码结构

(四)WEB前端对性能关注点

所谓前端的性能目前也是性能测试中比较热门的技术之一,关注的点具体汇总为如下:

• 浏览器的资源加载(HTML解析,图片资源加载,CSS文件资源加载)

• 前端缓存技术的优化是否合理性

• 前端与后端的交互性耗时

(五)测试角度对性能关注点

用户关注的视角属于全栈性的,需要考虑用户视角的产品体验,也要监控以及关注运维视角和开发视角,所以性能测试中测试的具体工作职责可以总结为:

• 设计合理的场景和测试用例来验证系统的资源数据

• 验证在高并发的情况下架构是否满足

• 给架构师以及开发人员提供中间件配置参数的合理值范围

• 使用技术手段监控系统,DB,中间件,全链路监控的方式来监控系统资源情况

一.性能测试术语【面试】

1.响应时间:

响应时间=⽹络时间+应⽤程序的处理时间,响应时间是一个http完整的请求流程时间之和,请求和响应时间之和。

⼀次操作完成的时间,也就是客户端发送请求到服务端后,服务端返回到客户端的响应数据的时间。包含了⽤于等 待和服务的时间,也包括⽤来返回结果的时间。响应时间=⽹络时间+应⽤程序的处理时间,

例如:

vue--->nginx :web server

django:应用服务

MySQL:data server

2.并发用户数

性能测试的核心是验证当前系统能否支持现有用户的访问,也就是说系统可以承受在同一时间段多少用户来访问系统,

并发用户数,可以说:不论从业务视角出发,还是服务端承受压力而言,描述的是同一时间同时向客户端发出请求的客户,某些时候也称为“并发测试”。这中间主要体现的是服务端承受的最大并发访问数。

性能测试的核心是验证同一时间能承受多少人访问系统,吞吐量和响应时间

3.IOPS

该术语主要是针对数据库的,也就是每秒发⽣的输⼊/输出操作的次数,是数据传输的⼀个度量⽅法。⽤于磁盘的读写,IOPS指的是每秒读和写的次数,反映在硬盘上,数据库读写速度。

4.TPS/QPS

事务指的是某个操作或者是⼀组操作的组合。TPS统计的是每秒处理的事务数,即系统每秒能够处理的事务的数量。QPS指的是每秒查询率,如DB服务器在规定时间内处理流量多少的衡量标准

5.吞吐量

吞吐量指的是操作的速度,也就是每秒操作数或者每秒业务数。或者也可以说单位时间内客户端请求的数量,体现的是系统每秒能处理多少请求

吞吐量与并发测试区别:【重要】

并发测试:同一时间段同时向系统发送请求

吞吐量:该时间段内系统能处理的任务数

6.延时

延时是描述操作⾥⽤来等待服务的时间,也就是客户端发送请求后,⽤来等待服务端返回给客户端的响应时间

7.使⽤率

对于服务所请求的资源,使⽤率描述的是所给定的时间区间内资源的繁忙程度。对于存储资源来说,使⽤率指的就是所消耗的存储容量。

8.饱和度

指的是某⼀资源⽆法满⾜服务的排对⼯作量

9.瓶颈【重要】

在系统性能⾥,瓶颈指的是限制系统性能的那个资源。这也是性能测试过程中⾮常核⼼的部分

10.思考时间

思考时间英文名称是Think Time,也称为休眠时间,在业务视角,指的是用户在进行操作时,每个请求之间的间隔时间。

二.性能测试理论

(一)资源调度理解:

crm:客户管理系统

计算机中操作系统的最小单位是进程,进程最小的运行单位是线程。比如钉钉是进程,但是可以干很多事就是多线程程序。线程在执行时,由操作系统分配资源,操作系统通过操作系统的时间分片结合调度的算法来分配资源,决定哪个线程先执行哪个先不执行。调度过程中算法有抢占式算法调度,根据任务优先级,优先级高的优先分配资源,优先级低的后分配资源。比如Linux,Mac,java。线程优先级最高是10,最低是1,默认是5

调度策略:

在操作系统级别,专业的来说,调度器可以理解为:CPU时间划分给活跃的进程和线程,⽽且维护⼀套优先级的机制,这样更重要的工 作可以更快的执⾏,调度器会跟踪所有ready-to-run状态的进程。调度策略(调度器)可以动态的优先提升工作负载的性能。

工作负载类型:

• CPU密集型:应⽤程序执⾏繁重的计算,通常运⾏时间⽐较⻓,会占⽤⼤量的CPU。主要指计算型的程序,程序存在海量数据筛选出具体的数据。

• IO密集型:应⽤程序执⾏I/O,计算不多,会占⽤⼤量的内存资源 系统的最⼩粒度是线程,也就是说系统调度中粒度最细的就是对线程的调度。主要指读写类程序,程序存在大量的文件Io读写,短信营销优惠券发放。

(二)等待队列

在程序中,都会涉及到等待队列的,不管是同步交互还是异步的交互中,都会涉及它的最⼤队列,这样设计的核⼼思想是防⽌在客户端⾼并发的情况下服务端在没有队列的情况下出现雪崩以及最终导致服务端出现瘫痪,因此队列 等待是⾮常核⼼并且是⾮常有必要的。在等待队列中,测试需要得出如下⼏个性能数据:

1、队列设置的值是多少?最⼤可以运⾏的任务是多少?

2、需要测试到排队的策略机制,也就是说模拟⼤批量的程序进⾏排队,然后⼀个任务执⾏结束后,队列位置释放 ⼀个,等待中的可以⽴刻进⼊然后执⾏,这中间就设计到先进先出还是先进后出,以及线程优先级的设计策略

3、线程在排队的过程中,设置最⼤的等待时间是多少,也就是说⼀个线程不可能永远处于等待中,那么等待多 久,还是没到执⾏的阶段,这个时候服务针对排队等待的线程处理的机制是?这个时间专业术语就是:访问等待时 间

4、那么⼀个线程完整的时间是由三部分组成的,响应时间:客户端发起请求的时间+访问等待时间+逻辑执⾏时间 +返回给客户端的时间。⼀般在测试中,可以把每个线程名称设置为uuid,这样它都是独⽴的,可以依据这个 uuid,让开发同学配合输出每个阶段的时间输出,然后就可以得到每个阶段的具体时间了,根据时间再来判断时间 是否优化。

队列:Queue 规范:First In First Out ----》先进先出

队列方法:

put:往队列里面放数据

get:取出队列里面的数据

empty:判断队列是否为空

队列注意事项:

1、当队列满了的时候,再往里面放的时候是无法放的,如果是程序,就会卡死

2、当队列为空的时候,再取出数据,也会卡死

生产者消费者模式:通过队列:Queue 实现

生产者(Producer) :不断的生产数据,使用的方法是put

消费者(Consumer):不断的消费数据,使用的方法是get

三.性能测试模型(步骤)【面试】

性能测试模型也可以理解为性能测试步骤,具体汇总为如下:

• 测试前期准备

  1. 梳理前期测试目标,比如吞吐量多少,测试人员主导和其他相关人敲定

  2. 性能测试的目标参考依据是什么?产品的需求文档和产品的用户体量和系统的架构。

*例如淘宝性能测试场景:同时多少人登录,商品响应时间,同时多少人支付、领取优惠、收到短信营销

• 测试工具技术引入

  1. LoadRunner:HP公司研发的工业级别的性能测试工具,是收费的一款性能测试工具

  2. JMeter:100%使用Java语言研发的性能测试工具,是开源的,互联网公司基本使用的都是该性能测试工具

  3. Locust:是基于Python的协程来设计的性能测试工具,需要编写Python代码来进行性能测试

  4. Gatling:是微服务架构下高性能的性能测试工具: HP公司研发的(用的少)

• 性能测试计划

  1. 明确每个性能测试的任务开始结束时间

  2. 明确每个任务的负责人

  3. 明确性能测试的工具

• 测试设计与开发

使用选择好的工具或者代码来设计场景和编写代码来测试设计好的性能测试用例

• 测试执行与管理,数据收集

  1. 多次测试执行,收集每次性能测试的数据。包括系统资源:CPU和内存、数据库:连接数和iops、jvm资源:内存资源。响应时间:最大、最小、中位数、平均、中位数,90%,95%,99%,吞吐量

  2. 数据收集后的数据可视化展示

• 测试分析

实际收集的结果得到最终的结论,比如吞吐量响应时间等,与期望的目标进行对比,判断是否达到目标

系统资源:CPU和内存、数据库:连接数和iops、jvm资源:内存资源

【面试:在性能测试之前需要做哪些准备】

  1. 梳理前期测试目标,比如吞吐量多少,测试人员主导和其他相关人敲定

  2. 性能测试的目标参考依据是什么?产品的需求文档和产品的用户体量和系统的架构。

*例如淘宝性能测试场景:同时多少人登录,商品响应时间,同时多少人支付、领取优惠、收到短信营销

【面试:性能测试中,开发说需要加服务器怎么办】

可以加,生产、开发、测试都加,全部保持一致。如果只有开发加,是不行的。

性能测试注意事项:

1.测试环境服务器的配置与生产环境服务器的配置必须一致,这样出的结论才有参考价值

【面试1:性能测试的指标是哪些】

包括系统资源:CPU和内存、数据库:连接数和iops、jvm资源:内存资源。响应时间:最大、最小、中位数、平均、中位数,90%,95%,99%,吞吐量

【面试2:日常用什么工具进行性能测试】

  1. LoadRunner:HP公司研发的工业级别的性能测试工具,是收费的一款性能测试工具

  2. JMeter:100%使用Java语言研发的性能测试工具,是开源的,互联网公司基本使用的都是该性能测试工具

  3. Locust:是基于Python的协程来设计的性能测试工具,需要编写Python代码来进行性能测试

  4. Gatling:是微服务架构下高性能的性能测试工具: HP公司研发的(用的少)

【面试3:性能测试是怎么做的】

1.结合产品的需求文档和产品的用户体量和系统的架构,梳理前期测试目标,比如吞吐量多少,测试人员主导和其他相关人敲定

2.拟定性能测试计划,包含了

  1. 明确每个性能测试的任务开始结束时间

  2. 明确每个任务的负责人

  3. 明确性能测试的工具(如下)

  • LoadRunner:HP公司研发的工业级别的性能测试工具,是收费的一款性能测试工具

  • JMeter:100%使用Java语言研发的性能测试工具,是开源的,互联网公司基本使用的都是该性能测试工具

  • Locust:是基于Python的协程来设计的性能测试工具,需要编写Python代码来进行性能测试

  • Gatling:是微服务架构下高性能的性能测试工具: HP公司研发的(用的少)

3.与相关人员评审测试计划测试点,做进一步的修改和确认

4.执行测试,进行数据收集

  1. 多次测试执行,收集每次性能测试的数据。包括系统资源:CPU和内存、数据库:连接数和iops、jvm资源:内存资源。响应时间:最大、最小、中位数、平均、中位数,90%,95%,99%,吞吐量

  2. 收集后的数据可视化展示

5.最后做测试分析

实际收集的结果得到最终的结论,比如吞吐量响应时间等,与期望的目标进行对比,判断是否达到目标

【面试4:什么是队列】

在程序中,都会涉及到等待队列的,不管是同步交互还是异步的交互中,都会涉及它的最⼤队列,这样设计的核⼼思想是防⽌在客户端⾼并发的情况下服务端在没有队列的情况下出现雪崩以及最终导致服务端出现瘫痪。在等待队列中,测试需要得出如下⼏个性能数据:

1、队列设置的值是多少?最⼤可以运⾏的任务是多少?

2、需要测试到排队的策略机制,也就是说模拟⼤批量的程序进⾏排队,然后⼀个任务执⾏结束后,队列位置释放 ⼀个,等待中的可以⽴刻进⼊然后执⾏,这中间就设计到先进先出还是先进后出,以及线程优先级的设计策略

3、线程在排队的过程中,设置最⼤的等待时间是多少,也就是说⼀个线程不可能永远处于等待中,那么等待多 久,还是没到执⾏的阶段,这个时候服务针对排队等待的线程处理的机制是?这个时间专业术语就是:访问等待时 间

4、那么⼀个线程完整的时间是由三部分组成的,响应时间:客户端发起请求的时间+访问等待时间+逻辑执⾏时间 +返回给客户端的时间。⼀般在测试中,可以把每个线程名称设置为uuid,这样它都是独⽴的,可以依据这个 uuid,让开发同学配合输出每个阶段的时间输出,然后就可以得到每个阶段的具体时间了,根据时间再来判断时间 是否优化。

队列:Queue 规范:First In First Out ----》先进先出

队列方法:

put:往队列里面放数据

get:取出队列里面的数据

empty:判断队列是否为空

队列注意事项:

1、当队列满了的时候,再往里面放的时候是无法放的,如果是程序,就会卡死

2、当队列为空的时候,再取出数据,也会卡死

【面试5:什么是生产者消费者模型】

生产者消费者模式:通过队列:Queue 实现

生产者(Producer) :不断的生产数据,使用的方法是put

消费者(Consumer):不断的消费数据,使用的方法是get

队列:Queue 规范:First In First Out ----》先进先出

【面试6:IO密集型以及CPU密集型的区别是什么】

工作负载类型:

• CPU密集型:应⽤程序执⾏繁重的计算,通常运⾏时间⽐较⻓,会占⽤⼤量的CPU。主要指计算型的程序,程序存在海量数据筛选出具体的数据。

• IO密集型:应⽤程序执⾏I/O,计算不多,会占⽤⼤量的内存资源 系统的最⼩粒度是线程,也就是说系统调度中粒度最细的就是对线程的调度。主要指读写类程序,程序存在大量的文件Io读写,短信营销优惠券发放。

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

文档获取方式:

加入我的软件测试交流群:1007119548免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/250267.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源】基于Qt5的ROS1/ROS2人机交互软件(支持地图编辑/多点导航)

本项目基于Qt5开发,基于CMake进行构建,可以实现一套代码同时在ROS1/ROS2系统中使用(本项目已接入CI,保证多ROS版本/系统版本可用性) 项目地址: https://github.com/chengyangkj/Ros_Qt5_Gui_App 软件在编译时会自动识别环境变量中的ROS1/ROS…

Redis -- list列表

只有克服了情感的波动,才能专心致志地追求事业的成功 目录 列表 list命令 lpush lpushx rpush rpushx lrange lpop rpop lindex linsert llen lrem ltrim 阻塞命令 小结 列表 列表相当于 数组或者顺序表。 列表类型是用来存储多个有序的字符串&…

C语言探索:水仙花数的奥秘与计算

摘要: 水仙花数,一种特殊的三位数,其各位数字的立方和等于该数本身。本文将详细介绍水仙花数的定义、性质,以及如何使用C语言来寻找100至999范围内的水仙花数。 目录 一、水仙花数的定义与性质 二、用C语言寻找100至999范围内的…

重写Sylar基于协程的服务器(2、配置模块的设计)

重写Sylar基于协程的服务器(2、配置模块的设计) 重写Sylar基于协程的服务器系列: 重写Sylar基于协程的服务器(0、搭建开发环境以及项目框架 || 下载编译简化版Sylar) 重写Sylar基于协程的服务器(1、日志模…

【PostgresSQL系列】 ltree简介及基于SpringBoot实现 ltree数据增删改查

本文将对PostgresSQL中的ltree进行相关概念介绍,并以示例代码讲解ltree数据增删改查功能的实现。 作者:后端小肥肠 目录 1.前言 2. 基础概念 2.1. ltree 2.2. lquery 2.3. ltxtquery 2.4. ltree函数及操作符 2.4.1. ltree函数 2.4.2. ltree操作符…

软考 系统分析师系列知识点之需求管理(3)

接前一篇文章:软考 系统分析师系列知识点之需求管理(2) 所属章节: 第11章. 软件需求工程 第8节. 需求管理 11.8.4 需求跟踪 根据IEEE的定义,可跟踪性包含两个层面的含义:一个是开发过程的两个或多个产品之…

统计图表在线配置服务-百度 SugarBI的学习笔记

最近,有个产品要支持统计图表在线可配置,这样,当用户有新增统计指标的需求时,运维人员通过界面化配置,就可以增加统计指标了,不用开发写代码,画页面了。 上网查了下相关的组件,感觉…

OSPF排错

目录 实验拓扑图 实验要求 实验排错 故障一 故障现象 故障分析 故障解决 故障二 故障现象 故障分析 故障解决 故障三 故障现象 故障分析 故障解决 故障四 故障现象 故障分析 故障解决 故障五 故障现象 故障分析 故障解决 故障六 故障现象 故障分析 …

Linux服务详解

如有错误或有补充,以及任何改进的意见,请在评论区留下您的高见,同时文中给出大部分命令的示例,即是您暂时无法在Linux中查看,您也可以知道各种操作的功能以及输出 如果觉得本文写的不错,不妨点个赞&#x…

曲线拟合、多项式拟合、最小二乘法

最近在做自车轨迹预测的工作,遇到 曲线拟合、多项式拟合、最小二乘法这些概念有点不清晰, 做一些概念区别的总结: 曲线拟合用于查找一系列数据点的“最佳拟合”线或曲线。 大多数情况下,曲线拟合将产生一个函数,可用于…

[嵌入式软件][启蒙篇][仿真平台] STM32F103实现SPI控制OLED屏幕

上一篇: [嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集 [嵌入式软件][启蒙篇][仿真平台]STM32F103实现定时器 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现IIC控制OLED屏幕 文章目…

Git 怎么设置用户的权限

在团队协作的软件开发中,对于版本控制系统Git来说,确保代码与数据的安全性至关重要。为了实现这一目标,Git提供了灵活且可定制的用户权限管理机制。下面将简单的探讨一下Git如何设置用户的权限,以及如何保护代码和数据。 用户身份…

提高 NFS Azure 文件共享性能

本文内容 适用于增加预读大小以提高读取吞吐量Nconnect另请参阅 本文介绍如何提高 NFS Azure 文件共享的性能。 适用于 展开表 文件共享类型SMBNFS标准文件共享 (GPv2)、LRS/ZRS 标准文件共享 (GPv2)、GRS/GZRS 高级文件共享 (FileStorage)、LRS/ZRS 增加预读大…

Spring Boot集成Redisson详细介绍

Redisson是一个用于Java的分布式和高可用的Java对象的框架,它基于Redis实现。在Spring Boot应用程序中集成Redisson可以帮助我们更轻松地实现分布式锁、分布式对象、分布式集合等功能。本文将介绍如何在Spring Boot项目中集成Redisson,并展示一些基本用法…

git远程仓库基本操作

目录 gitremote (查看远程仓库) git remote add [仓库名] [url] git clone [url](克隆远程仓库到本地) git push [名][分支名](提交到远程仓库)​编辑 git pull [名][分支名]从远程仓库拉取​编辑 注意操作…

混乱字母排序——欧拉路数论

题目描述 小明接到一个神秘的任务:对于给定的 n 个没有顺序的字母对(无序代表这两个字母可以前后顺序颠倒,区分大小写)。请构造一个有 (n1) 个字母的混乱字符串使得每个字母对都在这个字符串中出现。 输入输出格式 输入格式 第…

three.js CSS2DRenderer、CSS2DObject渲染HTML标签

有空的老铁关注一下我的抖音&#xff1a; 效果&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red;position: relative;"><…

SpringCloud_学习笔记_1

SpringCloud01 1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff…

FairGuard游戏加固入选《CCSIP 2023中国网络安全行业全景册(第六版)》

2024年1月24日&#xff0c; FreeBuf咨询正式发布《CCSIP 2023中国网络安全行业全景册(第六版)》。本次发布的全景图&#xff0c;共计展示20个一级分类、108个细分安全领域&#xff0c;旨在为广大企业提供网络安全产品选型参考&#xff0c;帮助企业了解中国网络安全技术与市场的…

一道sql注入的ctf题目致使用phpmyadmin上传 webshell 拿后台权限

以下均为靶场测试环境渗透&#xff0c;非正式环境。 遇见登录框&#xff0c;直接万能密码’or(11)or’/1 直接登录成功并返回结果: 既然存在sql注入&#xff0c;那就用sqlmap跑一下吧&#xff1a; 输出所有的数据库&#xff1a; sqlmap -u <目标URL> --dbs 要输出数据库…