性能测试基础概念

不怕啰嗦的再次忠告,那想成为测试高手的新人,多学学基础知识。别把过多的时间放在研究新工具的使用上。工具何其多,原理差不多。不要本末倒置了。也算是自我提醒吧!

性能测试常见指标

 

     性能测试说白了就是通过工具模拟多个用户对被测系统进行访问。然后查看系统对于多个用户发来请求的处理能力。

左边的两个小人表示两个用户,向右边服务器发送请求,然后得到服务器的响应信息。

    首先,我们要保证向服务器发送的请求的正确性,当然用户向服务器发送错误的请求,服务器也会个客户端响应信息,但响应的是报错信息;所以,为了保证测试数据的有效性,我们的要保证发送请求的正确性。

     为什么一般的性能测试要在局域进行?

一般我们的性能测试都是在局域网中进行的。为什么一定要在局域网中进行呢?因为局域网中不受网络限制。这个说法不能绝对。但是一般测试工具的用户并发量是不会受到局域网带宽的限制,除非你做的是十万,百万级别的用户并发。相信懂一点网络知识的人都知道,当你上网很慢的时候,比如打开某某网站很慢,你肯定会骂电信的网络不给力,而不会骂这个网站响应速度不给力。因为,请求信息的耗时大部耗在传输过程中。

所以,刚做测试时,我们群里热议论,如果我们每个人都开一个压力工具对百度网站进行加压。百度,服务器会不会挂掉。有测友说这样是不道德人。呵呵!其实,完全不必有这个担心。就一般人家用的带宽,我确保,你向百度服务器发送的请求大部分都死在半路上,就算不死到了百度服务器已经不能叫并发了。何况百度服务器的集群技术以及其他各种分压技术。所以,做性能测试不了解被测系统的架构,以及各种技术的性能。很难做出有效的测试报告。

下面我们看看性能测试的一些技术指标。

Work Load = Virtual Users

工作负荷 = 虚拟用户数

对服务器产生多大压力,可以由多少用户同时对服务器发送请求来衡量。也就是服务器的性能可以看它同时处理多少用户发送来的请求来衡量。

虚拟用户数可以用进程或线程的方式进行模拟。

response time  响应时间

从客户端将数据包发出,到接收到服务器端发来的请求。这个过程的总体时间叫response time

这个时间用来衡量的处理请求的速度(抛出网速限制的前提下)

throughput ~Ti & To

这个表示,吞吐量,吞吐量越大表示系统性能越强。1个用户跑100天和10个用户跑1分钟。当然是1个用户跑100天的吞吐量大。所以,我们要想看系统的性能应该用“吞吐率”,就是单位时间的吞吐量,比如吞吐量/秒。

站在服务器端,T-in表示“吞”;T-out表求“吐”

Ti:T-in 主要衡量客户端的能力,看客户端往服务器发送的请求数据包的吞吐率。

To: T-out 主要衡量的服务器端的能力,看服务器处理返回请求数据包的吞吐率。

Hits/Request

网页点击数/请求

Response/Successful Response

响应/成功的响应

Request与Response是对应,一个请求对应一个响应。但当客户端对服务器的压力达到一直程度后,不是每一请求都能得到响应的。去年末火了个最牛B的“电子商务”网站。12306(铁路网上订票系统),虽然有很差的用户体验,但每天还是大把的人拼命的登录(过年回家的人伤不起),甚至用外挂登录。见有网友云云点击(请求)了几十几百次才订票(响应)成功。所以,成功响应率也是很重要的一个指标。客户端发送一千个请求的成功得到响应的几率。

Hits Per Second

每秒中点击次数

和吞吐量一样,单单用点击数(hits)来衡量系统也是不合理的。所以,用每秒钟的点击数才能衡量出服务器的处理能力。

响应时间图分析

  

横坐标表示用户数

纵坐标表示时间

红色虚线,表求的是一种系统的理想状态。

当服务器处理10个用户请求时所用的时间是2秒(假设),当服务器处理200用户请求时所用的时间也是2秒。所以说这种状态是一种理想的状态。现实中,不管是如何超级强的服务器当用户数达到一定数量时,响应时间必会变慢。

蓝色斜线,是服务器常见的一种曲线状态。

服务器的响应时间虽然用户数量的增加逐渐变慢。

当系统出现这种斜线,应该说系统性能是相当健壮的。随着用户的增长响应时间逐渐变长。

黑色曲线,个人觉得是服务器处理能力的真实曲线状态。

为什么说黑线才是真实服务器处理能力的曲线呢?当用户处理一个用户请求是2秒(假设),当处两个用户请求是马上变成3秒(假设),当处理3个用户请求时变成4秒(假设)。再差的服务器也有个处理范围,比如是,100用户同时并发,服务器可以轻松应对,不管是10个用户还是80个用户同时请求,服务器都可以即可响应(请参考理发店模式)。只有当用户数量达到某个数量点后,服务器性能急剧下降。如上图黑色十字星处就是系统的拐角点。

我们假设有一个门,在一个时间点上可同时过10个人,不管你是同时来3个还是10个都可以在同一时间点过门,假如来了11个人,必然有一个人要等10个人过门之后才能过。那么当超过10人来过门时,过门的速度就开始变慢。那么10就是服务器性能的拐角点。我们通常做压力测试找服务器的拐角点是很重要的任务之一。

关蓝色曲线与黑色区线只是我们常见两种曲线。现实的测试中可能出现各种样式的曲线。当然还要看你做测试的细度,比如,10个用户是系统的拐点,如果你做完5个用户的一轮测试后,就是20用户的测试。那么画出来的曲线就变成斜线,拐点将被护忽略掉。

吞吐率图分析  


横坐标虚拟用户数

纵坐标有吞吐率(服务器端)

红色虚线,表示一种理想的状态。

随着用户数量的增加吞吐率也在持续增加。

黑色曲线,表示现实系统的吞吐率状态。

刚开始吞吐率随着用户数量的增加逐渐变大,当大到一定程度时,逐渐平缓直到变成一条平线。

如果用户还在持续增加中,那么吞吐率有可能下降,直到系统挂掉。

为什么会是这样呢?我们通过另一个例子来说,大家都在城市生活,相信上下班高峰期都会遇到堵车。在比较重要的红绿灯路口常会见到堵车现象。假如每个绿灯可以通过10辆,前期来三五辆车,遇到绿灯,一次都过去了。到了下班高峰期,车子变多,一下来了20辆,但这个路口的绿灯每天只能通过10辆,所以,这个时候,路口的通过率不会根据车辆的增加而继续增加。

好的系统好像好有个好的交警在位置秩序,虽然车辆还在增加,但每个车辆都有条不紊等待通过路口。

不好的系统如路口赶上交警拉肚子,车辆在增加,后面车辆等得不耐烦就往前挤,结果稿得互不相让。好嘛!之后还每个绿灯可通过10辆,现在只能有一辆车从夹缝中脱离苦海了。

响应时间图与吞吐率图并不是我们一轮性能测试下来就能得到结果。需要经过多轮测试才能得到。设置不同的用户数量,得到每次的测试数据,将每次数据连接,从而得到最终系统性能曲线。关于用户数量每次增加的数量自己把握。如果,想精确,可以每次增加1个用户的方式来做,不过这样势必加大工作量,也没必要。这个需要每做完一轮测试后对数据进行分析,然后确定下轮测试所要设置的虚拟用户数。

关于,性能指标的分析,就先谈到这里。关于内容,我反复经过思考,但难免有理解有误之处。还望高手点拨。共同进步。

原文地址:https://www.cnblogs.com/hui2/p/10774808.html

时间: 2024-11-12 12:56:15

性能测试基础概念的相关文章

性能测试基础(一)

随着软件行业的快速发展,现代的软件系统越来越复杂,功能越来越多,测试人员除了需要保证基本的功能测试质量,性能也随越来越受到人们的关注.但是一提到性能测试,很多人就直接连想到Loadrunner.认为LR就等于性能测试,其实这是不对的.LR只是性能测试的一个工具,但性能测试不仅仅是LR.本文会从以下几个方面介绍基础的性能测试理论,后续也会持续更新相关文章,尽量理论结合实践,让性能测试学习不在是工具的学习. 目录: 一. 什么是软件性能 二.不同群体眼中的性能 三.性能测试类型 四.性能测试应用场景

关系型数据库常用基础概念知识归纳

声明:我的文章都是只挑主要的写,次要细节太多,归纳就没意义了,同时归纳主要是给自己看的, 而且基本都是凭自己的一些记忆和理解即时写的.不一定对和全(但大多是一些需要理解的概念),请各位看管见谅! 数据库设计篇 1.范式 A.1范式,原子性,即列不可分 B.2范式,完全依赖,即有个主键唯一区分 C.3范式,不能传递依赖,即表中不能还有其他表的非主键信息 2.模型 A.概念模型,即ER图等 B.逻辑模型,即建逻辑表 C.物理模型,即生成物理表 事务 1.四大特性, A.原子,要么..要么.. B.隔

分布式学习——基础概念篇

概述 最近这段时间一直在看分布式有关的东西,但是关于分布式自己还是不能很好的理解,所以本文对分布式基础概念进行下学习. 分布式处理 首先先了解一下分布式处理,分布式处理和集中式处理正好是相反的的体系架构,集中传输集中到式处理顾名思义就是将所有的信息都一个统一的信息中心进行处理:分布式处理就是将不同地点的,或具有不同功能的,或拥有不同数据的多台计算机利用通信网络连接起来,让各个计算机各自承担同一个工作任务的不同部分,在控制中心的管理下,同时运行,共同完成同一个工作任务. 提到分布式处理就不能不提到

js基础--javascript基础概念之语法

掌握一门语言 必须先掌握它的语法! javascript 的语法和C.Java.Perl 的语法有些相似.但是比它们更加宽松. javascript 中的一切都是严格区分大小写的.例如变量: demo 和 Demo 两个变量是完全不同的. javascript 标示符,所谓标示符 是指 变量.函数.属性 的名字或函数的参数.标示符的格式是按照以下规则组合的一个或多个字符. 1.第一个字符必须是字母,下划线,或 $ 符号. 2.其他字符可以是字母.下划线.$ . 或数字. 注意 不能把关键字 保留

js基础--javascript基础概念之数组(二)

js基础--javascript基础概念之数组 数组栈方法 数组可以像栈一样.栈是一种先进后出的数据结构,最先添加的数据最后一个出来.栈方法添加数据也称为 推入  移除数据称为 弹出. js为数值栈方法提供了 push()   和  pop() ;  两个方法. push() push() 方法接受参数就是你要添加进入到数组的值.push()  方法会将他们逐一添加到数组的末尾  数组的length属性会跟着更新数据. *push(多个数组元素值) 返回的修改后的数组长度 var array =

js基础--javascript基础概念之数组

js基础--javascript基础概念之数组 在ECMAScript 中 ,数组是很常用的数据类型,js中的数组和其他很多语言的数组有明显的区别.js的数组可以保持任何类型的数值,一个数组中可以保存着多个不同类型的数值.js数组大小(长度)是可以调整的.可以随着数据的添加自动增长数组长度. 创建数组: 一.数组字面量 数组字面量由一对包含数组项的方括号[]表示. var array = [ 'kin', 'cheong', 'change', 'hello', 'haha', 'hi' ];

Linux基础概念-----环境变量

Shell 环境变量 Shell也是应用程序,工作与用户模式 变量类型 整形 浮点型 字符型 布尔型 bash变量类型 本地变量:仅对当前Shell有效 局部变量:仅对局部代码段有效(函数) 环境变量:expor VAR_NAME=Value,对当前Shell及子Shell有效 位置变量:$1;$2 .... 特殊变量:$?;$!;$$ .... 查看环境变量 printenv export 查看所有变量 set bash的引号 双引号:弱引用,可以实现变量替换: 单引号:强引用,不替换,而显示

Linux基础概念-----Linux I/O重定向 ,管道

标准输入:键盘 标准输出:显示器 错误输出:显示器 FD:文件描述符:让程序可以文件交互,并且便于内核识别文件,打开的每一个文件都有一个描述符 程序在和文件交互式,通过文件描述符来进行交互,而非文件名,文件名是方便用户分别文件. Linux一切皆文件,所以标准输入,标准输出都有各自的文件描述符 标准输入描述符:0 标准输出描述符:1 标准错误输出描述符:2 将其默认数据流改为其他设备:IO重定向 输出重定向 > 覆盖重定向 >> 追加重定向 /dev/null  黑洞 只针对当前Shel

js基础--javascript基础概念之语句(二)

js基础--javascript基础概念之语句(二)label,break,continue.. break .  continue 语句. break  continue 语句用于在循环中精确控制代码的执行,其中break语句会立即退出循环,执行循环后面的语句. continue 则退出循环后返回到再次进入循环中. 如: var num = 0; for(var i = 0; i<=100; i++){ if(i >= 10){ break; } num = i; } alert(num);