当前位置: 首页 > 编程日记 > 正文

论性能测试的必要性



论性能测试的必要性

说起为什么要进行性能测试,前面已经多少谈到一些。下面,从“性能测试与功能测试关系”及“性能自动化测试优势”两方面给读者作答。

1. 性能测试与功能测试关系

性能测试和功能测试是测试工作中两个不同的方面,只是在关注的内容上有差异而已。前者侧重“性能”而后者侧重“功能”。但殊途同归,它们的最终目的都是为了提高软件质量,以更好地满足用户需求。

“功能”指的是在一般条件下,软件系统能够为用户做什么以及能够满足用户什么样的需求。比如一个论坛网站,用户期望这个网站能够提供浏览帖子、发布帖子、回复帖子等功能,则只有这些功能都正确实现了,用户才认为满足了他们的功能需求。但是,一个论坛除了满足用户的“功能”需求之外,还必须满足“性能”需求。比如:服务器需要能够及时处理大量用户的同时访问请求;服务器程序不能出现死机情况;不能让用户等待“很久”才打开想要的页面;数据库必须能够支持大量数据的存储以实现对大量的发帖和回帖数据的保存;论坛一天24小时都可能有用户访问,夜间也不能停止休息,它必须承受长时间的运转;等等。

从上面的描述来看,软件系统“能不能工作”已经是一个基本的要求,而能够“又好又快地工作”才是用户追求的目标。“好”体现在降低用户硬件资源成本,减少用户硬件方面的支出上;“快”体现在系统反应速度上,用户在进行了某项操作后能很快得到系统的响应,避免了用户时间的浪费。这些“好、快”的改进都体现在软件性能上。换言之,“性能”就是在空间和时间资源有限的条件下,系统的工作情况。

综上,功能考虑的是软件“能做什么”的问题;而性能关注的是软件所完成的工作“做得如何”的问题。显然,软件性能的实现是建立在功能实现的基础之上的,只有“能做”才能考虑“做的如何”。

在了解功能和性能的区别之后,再理解功能测试和性能测试就很容易了。功能测试主要针对于软件功能开展检测,常常会依据需求规格说明书开展测试;性能测试主要针对于系统性能进行检测,通常会依据性能方面的一些指标或需求进行测试(对于如何获取性能需求请参考1.6小节)。性能测试的目的是验证软件系统是否能够达到用户提出的性能指标,发现软件系统中存在的性能瓶颈以优化软件和系统。在理论上来讲,功能测试和性能测试没有先后顺序,都是系统测试的一部分。测试过程中,要随时注意性能方面的检测。但在很多企业的实际测试工作中,一般会先进行功能测试。所测软件在功能上不存在严重问题且其流程能够“跑通”之后再对它做性能测试。正如前面所说,任何一个产品首先要保证其最基本功能的实现,否则,其性能即使再好也失去了存在的意义。


注意:软件包含程序、文档和数据,故软件测试也不能只针对程序进行检测,还应对其配套文档和系统中数据进行测试。


2. 性能自动化测试优势

性能测试可通过“手工”和“自动化”(自动化测试需要借助于自动化测试工具)两种测试手段实现。相比于“性能手工测试”而言,“性能自动测试”具有诸多优势。下面,首先阐述“性能手工测试的弊端”以使读者认识到引入自动化测试(或说学习自动化测试工具和方法)的必要性。

1. 性能手工测试弊端

通过一个例子加以说明。假设要测试一个Web系统的性能,验证其是否能支持50个用户的并发访问,如图1.1所示。下面,采用“手工”方式实现这一测试需求。

1)首先,准备足够的资源:50名测试人员,每人有一台电脑以进行操作支持。

2)其次,准备一名“嗓音足够大”的指挥人员统一发布号令以调度测试人员对系统进行同步测试。每位参与测试的人员需要注意力集中,在听到指挥员“开始测试”的号令后进行“理论上的同时”操作(每个人反应速度不好控制,所以为理论上的“同时”)。

3)再次,在50个测试人员“同时”执行操作后,对每台电脑上的测试数据和服务器中的测试数据进行搜集和整理。

4)最后,在缺陷被修复后,要开展回归测试(是指在发生修改之后重新测试先前的测试以保证修改的正确性)。即需要再执行1~4步直到满足性能需求为止。

不难看出,“手工”测试需求的人力量很大(上面只是假设了50个并发访问的情况,如果是5 万个呢,难道要准备5万个测试人员?)。此外,支持“理论上的同时”访问并不是真正想要的性能,我们需要的是“真正意义上的”并发访问。再者,回归测试往往需要在相同的“场景”下进行,在手工测试下,根本不可能“再现”上一次的测试场景。也就是说,第4步中的回归测试也不是真正意义上的回归测试。

总归一句话,“性能手工测试”弊病诸多。

clip_image002

图1.1 性能手工测试弊端

2. 性能自动化测试优势

性能自动化测试工具可轻松化解性能手工测试中暴露出来的一系列问题,如图1.2所示。其解决的方式如下。

1)准备好性能测试工具和一台机器,而无需号召至少50个测试人员协助测试和50台机器。性能自动化测试工具能“虚拟”出任意多个用户(这些虚拟用户不会在工作中带上个人情绪和疲劳的状态),该工具可以在一台测试机上“模拟”出50个用户的同时访问。显然,相比于“手工测试”,自动化测试节省了大量的硬件资源和人力资源。

2)无需指挥人员发布号令进行调度和同步测试用户,自动化工具可以帮助我们自动控制虚拟用户的运行与同步,实现严格意义上的并发操作。

3)测试完毕后,工具将自动收集测试数据并分析测试结果而无需逐一收集各台机器(含服务器)上的测试数据和结果。

4)测试完毕并缺陷被修复后,要开展回归测试。此时,只需要重新运行上一次测试操作的“录制”脚本即可,上一次的测试情景将立刻重现。可对两次测试结果进行自动比较,分析其中的不同之处。

性能自动化测试工具能帮助测试人员模拟出很多真实复杂的业务场景,能够让系统持续运行几天几夜甚至更久的时间,还能捕捉到很多难以捕获的结果等,这些都是手工测试所不能完成的。

clip_image004

图1.2 性能自动化测试优势

尽管读者对上面的描述可能还不尽理解,但有一点,读者是肯定理解了的,即:性能自动化测试值得我们推广和采用。

3. 性能测试定义与要点

对性能测试的定义,仁者见仁,智者见智。尽管定义很多,但它们的核心内容是保持一致的。较常见的关于性能测试的定义如下:性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。

上述定义主要包含了3层含义:

1)通常,性能测试需要借助工具实现。与功能测试主要借助手工开展不同,性能测试一定要借助工具来协助完成。

2)性能测试除了关注普通的正常情况外(如:单用户短时间操作),还重点关注空间和时间上的很多峰值或异常的系统运行情况,如:多用户并发操作、大数据量积累、超负载运行、系统长期持续使用等情况,而这些情况下更容易暴露系统的性能问题。

3)性能测试借助所监控和收集的各项指标来分析系统的性能。指标的范围很广阔,涵盖了系统软件指标(程序自身)和硬件指标(客户端性能指标、网络性能指标、服务器端性能指标)。它不仅关注程序性能,还要考虑数据库性能,同时也兼顾程序运行期间客户端、服务器(应用服务器、数据库服务器等)各项系统资源运行情况,如:CPU使用率、内存及磁盘使用情况等。

上述定义强调了性能测试的很多重要信息。但是,仅依靠上述性能测试的定义来理解性能测试还是远远不够的。下面,我们再给读者补充一些性能测试的要点及其分析。

  1. 性能测试通常在功能测试基本完成后进行。该要点主要强调性能测试开展的时间问题。虽然总是强调功能测试和性能测试同等重要,应同时开展。但在大多数实际工作中,性能测试的开展会滞后于功能测试。其原因主要在于性能测试属于综合性测试,只有在功能测试通过后,性能测试才会有较大意义。但是对于两类软件存在例外,其性能测试一般进行的较早,几乎伴随着单元测试同步进行。第一类是系统软件,如:操作系统或者数据库。这类软件的性能测试就需要尽早开展,否则在最后阶段发现性能问题的话,则很有可能导致整个系统被推翻。第二类是对性能要求较高的应用软件,如奥运会、银行、联通的系统,这类软件对性能的要求远高于一般软件,倘若在最后测试时发现性能问题,通常是系统架构或者某些关键算法设计不合理所导致,这时候再进行修复的话也会给整个项目带来很大的困扰,甚至也会推翻整个系统。

  2. 性能测试计划、测试方案和测试用例大多情况统一在一个文档里。很多企业会将性能测试相关的内容作为一个“性能测试方案文档”专门编写,里面会涵盖了性能测试的场景设计、测试脚本、测试结果分析等,这样可以作为一个整体提供给其他部门或客户。

  3. 性能测试环境应尽可能同用户生产环境保持一致。该条规则十分重要,直接影响着性能测试结果的真实性和有效性。强调测试环境的一致性主要从以下方面考虑:1)硬件环境,包括:客户端、服务器和网络三方面的环境要求。如:客户端系统硬件配置、服务器的各项配置、是否和其它应用程序进行资源共享、是否在集群环境下、是否进行负载均衡、网络速度等。2)软件环境,包括:软件版本、参数设置方面的一致性要求。如:操作系统或数据库的版本、被测的应用软件的版本以及使用到的第三方软件的版本、数据库的并发读写数、SGA/PGA设置、连接池参数设置等。3)测试使用场景的一致性。如:使用的基础数据、模拟用户真实使用场景的一致性等。

  4. 性能测试工作的重点和难点在于前期数据设计和后期数据分析。这条规则强调千万不要认为借助工具可以代替我们做所有的测试工作。工具的使用很简单,但是前期的用例设计、场景分析需要花大量功夫去研究。工具帮助我们收集了大量的测试数据之后,重中之重的一项工作就是对数据进行分析,确定系统瓶颈所在,这一部分工作往往需要测试工程师具备丰富的项目经验和扎实的技术功底。

  5. 性能测试用例通常基于系统整体架构进行设计,往往具备高复用性。通常不随系统某个功能点的修改而变更。但当系统发生较大变动(如系统业务流程修改)后,建议读者重新设计性能测试用例。


注意:性能测试定义及测试要点虽然均属于很理论的知识,但是能够帮助读者对性能测试实际工作的开展状况有个初步认识,对性能测试有个宏观的理解,且上述知识在性能测试面试中较为常见。


相关文章:

Spring学习系列(二) 自动化装配Bean

一、Spring装配-自动化装配 Component和ComponentScan 通过spring注解(Component)来表明该类会作为组件类,并告知Spring要为这类创建bean,不过组件扫描默认是不启动的,需要显式的配置Spring,从而命令Spring…

如何让SELECT 查询结果额外增加自动递增序号

图表1如果数据表本身并不内含自动地增编号的字段时,要怎么做才能够让SELECT查询结果如图表1所示,额外增加自动递增序号呢?我们提供下列五种方法供您参考:USE北风贸易;GO/* 方法一*/SELECT序号(SELECT COUNT(客户编号)FROM 客户AS …

UVa 10131

1 /*2 3 * 类似于最长递减子序列4 */5 #include<stdio.h>6 7 #include<string.h>8 #include<algorithm>9 using namespace std; 10 #define Max(x,y) (x>y?x:y) 11 #define max 10005 12 struct node{ 13 int w,s,c; 14 }a[max]; 15 int dp[max]; 16…

再见 VBA!神器工具统一 Excel 和 Python

作者 | 东哥起飞来源 | Python数据科学经常给大家推荐好用的数据分析工具&#xff0c;也收到了铁子们的各种好评。这次也不例外&#xff0c;我要再推荐一个&#xff0c;而且是个爆款神器。Excel和Jupyter Notebok都是我每天必用的工具&#xff0c;而且两个工具经常协同工作&…

Android 开发者必知的开发资源

英文原文&#xff1a;Bongzimo 翻译: ImportNew-黄小非 译文链接&#xff1a;http://www.importnew.com/3988.html Android 开发者必知的开发资源 随着Android平台市场份额的持续猛增 &#xff0c;越来越多的开发者开始投入Android应用程序的开发大潮。如果您是一位2013年刚刚…

SQL Server各种日期计算方法

通常&#xff0c;你需要获得当前日期和计算一些其他的日期&#xff0c;例如&#xff0c;你的程序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分割&#xff08;年、月、日等&#xff09;&#xff0c;然后仅仅用分割出来的年、月、日等放在几…

TensorFlow入门

为什么80%的码农都做不了架构师&#xff1f;>>> TensorFlow核心教程 导入TensorFlow计算图tf.train API 完成程序tf.contrib.learn 基本用法自定义模型下一步原文链接 : https://www.tensorflow.org/get_started/get_started 译文链接 : http://www.apache.wiki/pa…

C#实现类似qq的屏幕截图程序

因为近来想写个类似于远程桌面监控的程序,该程序中要用到屏幕捕捉.为实现该程序的一部分功能,做了个小DEMO.程序很简单&#xff0c;用到的技术也不多&#xff0c;只能实现类似qq的截图功能(方法虽然很笨) 程序流程如下&#xff1a;1.截取整个屏幕并保存 2.新开一个全屏窗口,将保…

构建RESTful风格的WCF服务

RESTful Wcf是一种基于Http协议的服务架构风格。 相较 WCF、WebService 使用 SOAP、WSDL、WS-* 而言&#xff0c;几乎所有的语言和网络平台都支持 HTTP 请求。 RESTful的几点好处&#xff1a; 1、简单的数据通讯方式&#xff0c;基于HTTP协议。避免了使用复杂的数据通讯方式。 …

又一起“删库”:链家程序员怒删公司 9TB 数据,被判 7 年

整理 | 王晓曼来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;1月6日&#xff0c;北京市第一中级人民法院公布前链家员工破坏计算机信息系统罪一案的刑事裁定书&#xff0c;被告人因不满工作调整&#xff0c;删公司9TB数据。北京市海淀区人民法院判决认定&#xff…

hbase以mr导数据方式

./hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator"," -Dimporttsv.columnsHBASE_ROW_KEY,f1:name,f1:age,f1:addr t1 /zldata/demo1.csv转载于:https://www.cnblogs.com/sajia/p/6972420.html

Php中正则小结(一)

一.概念 语法模式类似perl.表达式必须用分隔符闭合&#xff0c;比如一个正斜杠(/). 分隔符可以是任意非字母非数字&#xff0c;除反斜杠(\)和空字节之外的非空白ascii字符 如果分隔符 在表达式中使用&#xff0c;需要使用反斜线进行转义。 二.组成 元字符 一个正则表达式基本组…

在C#.net中如何操作XML

在C#.net中如何操作XML需要添加的命名空间&#xff1a;using System.Xml; 定义几个公共对象&#xff1a;XmlDocument xmldoc ;XmlNode xmlnode ;XmlElement xmlelem ; 1&#xff0c;创建到服务器同名目录下的xml文件&#xff1a; 方法一&#xff1a;xmldoc new XmlDocument…

精彩碰撞!神经网络和传统滤波竟有这火花?

作者 | 凌霄出品 | AI大本营&#xff08;ID&#xff1a;rgznai100&#xff09;惯性传感器在航空航天系统中主要用于姿态控制和导航。微机电系统的进步促进了微型惯性传感器的发展&#xff0c;该装置进入了许多新的应用领域&#xff0c;从无人驾驶飞机到人体运动跟踪。在捷联式 …

软考新思维--2017年上半年信息系统项目管理师上午试题分析与答案(试题16-20题)...

2017年上半年信息系统项目管理师上午试题分析与答案&#xff08;试题16-20题&#xff09; 16.信息系统的安全威胁分成七类&#xff0c;其中不包括&#xff08;&#xff09;A、自然事件风险和人为事件风险B、软件系统风险和软件过程风险C、项目管理风险和应用风险D、功能风险和效…

ASP.NET 2.0 读取配置文件[INI](示例代码下载)

(一). 功能 操作配置文件[*.ini]类 (二). 代码 1. 核心类文件 INIFILE.cs 代码 1 ///<summary>2 ///INIFILE 操作类3 ///</summary>4 publicclassINIFILE5 {6 [DllImport("kernel32")]7 privatestaticexternlongWritePrivateProfileString(stringsectio…

CSDN送会员?免费的!都来领!

距离春节还有不到一个月你准备好给家人的春节礼物了吗&#xff1f;疫情下&#xff0c;为了让程序猿同学开心加班小编提前准备了一份牛年大礼 周五福利日&#xff0c;人人都可免费领会员&#xff01;助你提前实现CSDN会员卡自由&#xff01;奖品多多&#xff0c;不仅有CSDN月卡会…

BGP相邻体之间磋商的过程

一.BGP的几个概念 空闲&#xff08;IDLE&#xff09; 等待由管理员发起的START事件 正确&#xff0c;到连接状态 错误&#xff0c;回到空闲状态 连接状态&#xff08;Connect&#xff09; 等待TCP的连接是否成功&#xff0c;以期望获得一个对等体 正确&#xff0c;到开放发送Op…

去除ios input部分默认样式

input[typesubmit],input[typebutton]{-webkit-appearance:none;outline:none } input{border-radius: 0;}转载于:https://www.cnblogs.com/bbqwwb/p/6993064.html

Asp.net 2.0 C#实现压缩/解压功能

Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载) (一). 实现功能对文件及目录的压缩及解压功能(二). 运行图片示例(三).代码 1. 压缩类 1/**//// <summary> 2/// 压缩类 3/// </summary>4publicclassZipClass5{ 6 public static void ZipFile(string Fi…

图像处理工具包ImagXpress的多页TIFF编辑API的使用(1)

2019独角兽企业重金招聘Python工程师标准>>> 在ImagXpress中用用于处理TIFF文件的TIFF编辑API&#xff0c;但是怎么使用呢&#xff0c;下面来具体的看看 ImagXpress中的ImageX.DeletePage 方法一次可以删除一个页面&#xff0c;ImageX.DeletePages 方法允许开发人员…

用Matplotlib轻松复刻分析图,看看哪个城市买房最自由

作者 | 费弗里来源 | Python大数据分析简介前不久「贝壳研究院」基于其丰富的房地产相关数据资源&#xff0c;发布了「2020 新一线城市居住报告」&#xff1a;图1而在这个报告中有几张数据可视化作品还是比较可圈可点的&#xff0c;作为&#xff08;在模仿中精进数据可视化&…

Python 代码规范

前言 Python 学习之旅&#xff0c;先来看看 Python 的代码规范&#xff0c;让自己先有个意识&#xff0c;而且在往后的学习中慢慢养成习惯 目录 Python代码规范一、简明概述 1、编码 如无特殊情况, 文件一律使用 UTF-8 编码如无特殊情况, 文件头部必须加入#-*-coding:utf-8-*-标…

二级域名用asp.net 2.0的实现方案

本人所了解有两种方案&#xff0c;可能还有其的方式&#xff0c;希望大家多多讨论&#xff01; 基本思路&#xff1a;1. 域名支持泛解析&#xff0c;即是指&#xff1a;把A记录 *.域名.com 解析到服务器IP&#xff0c;服务器IIS中做绑定&#xff0c;绑定时主机头为空;2. 为了…

又一例“监视员工?”百度回应:和 996 无关,目前没有任何应用

整理 | 王晓曼图源 | 视觉中国出品 | 程序人生 &#xff08;ID&#xff1a;coder _life&#xff09;1月13日晚间&#xff0c;针对百度公开“员工工作状态预测”专利惹争议一事&#xff0c;百度在官方微博火速回应称&#xff0c;这是一个管理上的“人岗匹配”衡量方法&#xff0…

僵死进程和僵尸进程

一个进程在调用exit命令结束自己的生命的时候&#xff0c;其实它并没有真正的被销毁&#xff0c;而是留下一个称为僵尸进程&#xff08;Zombie&#xff09;的数据结构&#xff08;系统调用exit&#xff0c;它的作用是使进程退出&#xff0c;但也仅仅限于将一个正常的进程变成一…

AC日记——[HNOI2010]BOUNCE 弹飞绵羊 洛谷 P3203

[HNOI2010]BOUNCE 弹飞绵羊 思路&#xff1a; SBlct&#xff1b; 代码&#xff1a; #include <bits/stdc.h> using namespace std; #define maxn 200005 int n,m,f[maxn],ch[maxn][2],rev[maxn],ki[maxn],sta[maxn],top,lit,size[maxn]; inline void in(int &now) {c…

C#与RSS亲密接触

讲述动态生成RSS文件的方法。动态生成RSS文件也基本有两种方法&#xff0c;一种是用字符串累加的方法&#xff0c;另一种是使用xml文档生成的方法。字符串累加的方法也比较简单&#xff0c;我也就不多说了&#xff0c;这里着重说一下生成XmlDocument的方法&#xff0c;包括各种…

2020 ACM Fellows 名单出炉,13 名华人入选,7 名来自国内!

【编者按】一年一度的 ACM Fellow 名单现已新鲜出炉&#xff01;向来以严格审查闻名的ACM Fellows&#xff0c;今年居然共选择了 95 名科学家&#xff0c;其中还有 13 位华人&#xff0c;来看看都是哪些大佬吧&#xff01;整理 | 郑丽媛出品 | CSDN&#xff08;ID&#xff1a;C…