首页 > 其他分享 >性能测试

性能测试

时间:2022-08-16 18:24:06浏览次数:51  
标签:性能 线程 内存 测试 测试工具 时间

什么是软件性能

在软件的角度而言。性能它首先是一种指标,具体可以说就是软件系统或构件对于其及时性要求的符合程度,另外一种就是软件产品的一种特性,其实就是响应时间。所以对一个产品而言,性能的及时性是用响应时间或者吞吐量来进行衡量,一个用户操作行为,或者说是事务,比如单个的事务,响应时间就是完成事务所需要的时间,对用户而言,响应时间就是端到端的用户基本体验。比如登录打开抖音,视频显示播放,这个过程总共耗时是3秒,那么就是抖音的响应时间。下面具体说下不同视角下对性能这部分的理解。

用户视角

在用户的角度而言,软件性能就是用户操作的响应时间,一般而言关与响应时间业界的说法如下

1-3秒,属于优的表现

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

5秒以上,无法接受

运维视角

系统资源

在实际的测试中关乎的是cpu ,内存,平均负载情况

当cpu和内存使用率大于70%时,系统可能出现瓶颈的情况

数据库资源

所有的数据都是来自数据库: 1、连接数:连接数泄露(使用了连接数,但是没有释放) 2、读写速度:IOPS

Jvm

JVM(针对Java技术栈):Java应用程序的CPU和内存使用率 512M,CPU:1G 内存溢出/内存泄露:OOM

系统最大处理的任务数

1亿,但是同时进行支付,5千万可以同时进行,另外的5千万就可以排队处理,排队的策略是什么?----》按照线程的优先级来设置的 每个任务都是有优先级的,那么最大优先级是10,最小是1,默认是5 在系统资源不紧张的时候,优先级不是那么特别的突出 但是在系统资源特别紧张的时候,那么优先级高的优先执行

开发视角

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

前后交互的响应时间

中间件的参数设置

内存释放泄露

连接数泄露

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

是否存在不合理的线程同步方式

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

系统架构&代码结构

线程同步: A和B两个任务,有100张车票,A和B同时进行抢购

加锁机制:A操作的时候,B不能操作,A操作完了,B才能够操作

WEB前端视角

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

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

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

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

测试视角

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

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

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

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

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

软件性能的常用术语

响应时间

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

vue--->nginx :web server

django:应用服务

MySQL:data server

并发用户数

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

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

吞吐量

主要用于数据传输方面,也就是被测试系统的执行效率。吞吐量指的是操作的速度,也就是每秒操作数或者每秒业务数。或者也可以说单位时间内客户端请求的数量,直接体现系统的性能承载能力。单位时间内处理的请求数量

并发是指同一段时间内发送到服务端的请求

吞吐量是体现系统的性能承 载能力,发送了不一定执行

使用率

对于服务所请求的资源,使⽤率描述的是所给定的时间区间内资源的繁忙程度。对于存储资源来说,使⽤率指的就 是所消耗的存储容量。如⼀个业务中,会使⽤⼤量的内存资源,总的内存资源是4G,在⼀定数据量的情况下执⾏该 业务形态,内存使⽤率从100M⼀直占⽤到3G,然后随着业务形态内存资源得到释放呈下降的趋势,那么可以说内 存使⽤率最⾼为75%,可能会存在OOM的错误信息,也可能会存在内存泄露的情况。所以使⽤率分两个维度,⼀ 个是系统资源的使⽤率,另外⼀个是系统内部署服务对系统资源的使⽤率。

思考时间

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

IOPS

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

TPS/QPS

事务指的是某个操作或者是⼀组操作的组合,如登录的事务那么就是输⼊账户和密码,点击登录按钮跳转到登录成 功的⻚⾯并且信息都加载出来。TPS统计的是每秒处理的事务数,即系统每秒能够处理的事务的数量。QPS指的是 每秒查询率,如DB服务器在规定时间内处理流量多少的衡量标准。

软件性能测试理论

资源调度

在计算机里面,操作系统运行的最小单位是进程,而进程最小的运行单位是线程。线程在计算机执行的时候,是由操作系统来进行分配资源的,操作系统根据调度的算法来分配以及决定哪个线程可以执行,哪个线程暂时不能执行。抢占式调度:根据任务的优先级,优先级高的优先分配资源,优先级低的,后分配资源。操作系统通过什么来分配资源了?是通过操作系统的时间分片,结合调度的算法来分配资源。

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

• CPU密集型:应⽤程序执⾏繁重的计算,通常运⾏时间⽐较⻓,会占⽤⼤量的CPU

• IO密集型:应⽤程序执⾏I/O,计算不多,会占⽤⼤量的内存资源 系统的最⼩粒度是线程,也就是说系统调度中粒度最细的就是对线程的调度。

cpu:计算型的程序 程序存在大量的计算,比如海量数据筛选出具体的数据 io:读写类的程序,程序存在大量的文件IO的读写,比如优惠卷发放,短信营销

CRM:客户关系管理系统

等待队列

在程序中,都会涉及到等待队列的,不管是同步交互还是异步的交互中,都会涉及它的最大队列,这样设计的核心思想是防止在客户端高并发的情况下服务端在没有队列的情况下出现雪崩以及最终导致服务端出现瘫痪,因此队列等待是非常核心并且是非常有必要的。在等待队列中,测试需要得出如下⼏个性能数据: 1、队列设置的值是多少?最大可以运⾏的任务是多少? 2、需要测试到排队的策略机制,也就是说模拟大批量的程序进⾏排队,然后⼀个任务执⾏结束后,队列位置释放 ⼀个,等待中的可以立刻进入然后执⾏,这中间就设计到先进先出还是先进后出,以及线程优先级的设计策略 3、线程在排队的过程中,设置最⼤的等待时间是多少,也就是说⼀个线程不可能永远处于等待中,那么等待多久,还是没到执⾏的阶段,这个时候服务针对排队等待的线程处理的机制是?这个时间专业术语就是:访问等待时间 4、那么⼀个线程完整的时间是由三部分组成的,响应时间:客户端发起请求的时间+访问等待时间+逻辑执⾏时间 +返回给客户端的时间。⼀般在测试中,可以把每个线程名称设置为uuid,这样它都是独⽴的,可以依据这个 uuid,让开发同学配合输出每个阶段的时间输出,然后就可以得到每个阶段的具体时间了,根据时间再来判断时间 是否优化。

 

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

put:往队列里面放数据

get:取出队列里面的数据

empty:判断队列是否为空

队列注意事项:

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

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

 

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

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

性能测试模型

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

• 测试前期准备

1、梳理性能的目标(性能测试的目标是测试主导,然后测试制定出来后,和团队里面其他相关的人一起决定)

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

2、性能测试的数据

3、性能测试场景的设计以及性能测试用例的设计

• 测试工具技术引入

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

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

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

4、Gatling:是微服务架构下高性能的性能测试工具

• 性能测试计划

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

2、明确每个任务的具体负责人

3、明确性能测试工具

• 测试设计与开发

1、使用选择好的工具/代码,来设计场景/编写代码来测试设计好的性能测试用例

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

1、多次测试执行,收集每次性能测试的数据(系统资源:CPU和内存,数据库资源:连接数和IOPS,JVM资源:内存资源 响应时间:最大,最小,平均,中位数,90%,95%,99%,吞吐量) 2、数据收集后的数据可视化展示

• 测试分析

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

 

性能测试的注意事项:

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

 

性能测试常见的面试题总结

1、在性能测试之前,请根据顺序简述下需要有哪些测试准备工作

梳理性能的目标(性能测试的目标是测试主导,然后测试制定出来后,和团队里面其他相关的人一起决定)

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

性能测试的数据

性能测试场景的设计以及性能测试用例的设计

2、性能测试过程中,开发说需要添加服务器性能测试才能继续,此时您会?

不会添加,必须要保证测试环境服务器与生产环境服务器的配置一致,这样出的结论才会具有参考价值。

3、日常使用什么工具进行性能测试?性能测试重要的指标有哪些?

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

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

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

Gatling:是微服务架构下高性能的性能测试工具

重要的指标有:系统资源:CPU和内存,数据库资源:连接数和IOPS,JVM资源:内存资源 响应时间:最大,最小,平均,中位数,90%,95%,99%,吞吐量

4、性能测试是怎么做的?请描述下

在测试前期我们需要根据产品的需求文档以及产品的用户体量和系统的架构梳理出性能测试的目标,还有性能测试的数据,性能测试场景的设计以及性能测试用例的设计;第二步就是测试工具的引入,LoadRunner,JMeter,Locust在相同硬件配置,测试相同接口,使用相同的并发情况下,Locust产生的压力高于Jmeter,Jmeter基于多线程,Locust基于协程,jMeter是100%使用Java语言研发的性能测试工具,是开源的,而Locust是基于Python的协程来设计的性能测试工具,需要编写代码来进行性能测试第三步是制定性能测试计划,明确每个性能测试的任务开始时间和结束时间,明确每个任务的具体负责人,明确性能测试工具;第四步是测试的设计与开发,使用选择好的工具/代码,来设计场景/编写代码来测试设计好的性能测试用例;第四步就是测试执行与管理,数据的收集,多次进行测试执行,收集每次性能测试的数据:系统测试:CPU和内存,数据库资源:连接数和IOPS,JVM资源:内存资源 响应时间:最大,最小,平均,中位数,90%,95%,99%,以及吞吐量,还有数据收集后的数据可视化展示;最后一步时测试分析,实际收集到的结果,来得到最终的结论:吞吐量,响应时间等等,与期望的目标进行对比,来判断是否达到目标。

5、描述下你是怎么理解IOPS,吞吐量,TPS,QPS的?

IOPS:指的是每秒读和写的次数

吞吐量:指的是单位时间内处理的请求数量

TPS:是每秒处理的事务数

QPS:指的是每秒的查询率

6、你是怎么理解软件的性能的?

从用户的视角来说:用户的操作的响应时间;CPU和内存的平均负载和使用率,连接数和IOPS,前后交互的响应时间;浏览器的资源加载

搜索

复制

标签:性能,线程,内存,测试,测试工具,时间
From: https://www.cnblogs.com/Aurora--1/p/16592488.html

相关文章

  • 性能测试理论
    性能测试理论(一) 软件测试分类:1.功能测试:指的是把测试对象看做一个
黑盒子,测试人员完全不考虑程序内部结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是......
  • 腾讯云服务器安装rabbitmq及简单测试记录
    一、安装近期对消息队列的学习让我对消息中间件产生了兴趣,而作为消息队列的使用的rabbitmq,就是我学习中间件的第一步。rabbitmq和erlang的安装安装之前先检查环境:[root......
  • mocha + enzyme, 或者React Testing Library + Jest 的ajax测试
    //app.test.jsimport{rest}from'msw';import{setupServer}from'msw/node';//模拟请求,和返回数据constserver=setupServer(  rest.get('/api/os/......
  • 性能测试(一)
    一、软件性能:对一个产品而言,性能的及时性是用响应时间+吞吐量来进行衡量。事务:一个用户操作行为,或者说是事务,比如单个的事务,响应时间就是完成事务所需要的时间,对用户而言......
  • 性能测试
    性能测试什么是软件性能所以对一个产品而言,性能的及时性是用响应时间或者吞吐量来进行衡量,一个用户操作行为,或者说是事务,比如单个的事务,响应时间就是完成事务所需要的时......
  • 性能测试(一)
    一.什么是软件性能?互联网普及,用户群体庞大,用户体验非常重要。性能是一种指标,是软件系统对于及时性的符合程度。对于一个产品根据响应时间和吞吐量衡量性能的及时性,响应时......
  • 学自动化测试可以用这几个练手项目
    练手项目的业务逻辑比较简单,只适合练手,不能代替真实项目。学习自动化测试最难的是没有合适的项目练习。测试本身既要讲究科学,又有艺术成分,单单学几个api的调用很难应付......
  • 接口测试经典面试题:Session、cookie、token有什么区别?
    原文链接HTTP是一个没有状态的协议,这种特点带来的好处就是效率较高,但是缺点也非常明显,这个协议本身是不支持网站的关联的,比如https://ceshiren.com/和https://ceshiren.co......
  • 微服务性能分析|Pyroscope 在 Rainbond 上的实践分享
    随着微服务体系在生产环境落地,也会伴随着一些问题出现,比如流量过大造成某个微服务应用程序的性能瓶颈、CPU利用率高、或内存泄漏等问题。要找到问题的根本原因,我们通常都......
  • 技术分享 | 实战详解接口测试请求方式Get、post
    原文链接本文节选自霍格沃兹测试开发学社内部教材在日常的工作当中,http请求中使用最多的就是GET和POST这两种请求方式。那么掌握这两种请求方式的原理,以及两种请......