在每种不同的系统架构的实施中,开发人员可能选择不同的实现方式,造成实际情况纷繁复杂。我们不可能对每种技术都详细解说,这里只是介绍一种方法提供给你如何选择测试策略,从而帮助分析软件不同部分的性能指标,进而分析出整体架构的性能指标和性能瓶颈。
由于工程和项目的不同,所选用的度量,评估方法也有不同之处。不过仍然有一些通用的步骤帮助我们完成一个性能测试项目。步骤如下
1. 制定目标和分析系统
2. 选择测试度量的方法
3. 学习的相关技术和工具
4. 制定评估标准
5. 测试环境建立
6. 设计测试用例
7. 运行测试用例
8. 分析测试结果
·制定目标和分析系统
每一个性能测试计划中第一步都会制定目标和分析系统构成。只有明确目标和了解系统构成才会澄清测试范围,知道在测试中要掌握什么样的技术。
目标:
1. 确定客户需求和期望
2. 实际业务需求
3. 系统需求
系统组成
系统组成这里包含几方面含义:系统类别,系统构成,系统功能等。了解这些内容的本质其实是帮助我们明确测试的范围,选者适当的测试方法来进行测试。
系统类别:分清系统类别是我们掌握什么样的技术的前提,掌握相应技术做性能测试才可能成功。例如:系统类别是bs结构,需要掌握http协议,java,html等技术。或者是cs结构,可能要了解操作系统,winsock,com等。所以甄别系统类别对于我们来说很重要。
系统构成:硬件设置,操作系统设置是性能测试的制约条件,一般性能测试都是利用测试工具模仿大量的实际用户操作,系统在超负荷情形下运作。不同的系统构成性能测试就会得到不同的结果。
系统功能:系统功能指系统提供的不同子系统,办公管理系统中的公文子系统,会议子系统等,系统工能是性能测试中要模拟的环节,了解这些是必要的。
·选择测试度量的方法
经过第一步,将会对系统有清醒的认识。接下来我们将把精力放在软件度量上,收集系统相关的数据。
度量的相关方面:
*制定规范
*制定相关流程,角色,职责
*制定改进策略
*制定结果对比标准
·学习的相关技术和工具
性能测试是通过工具,模拟大量用户操作,对系统增加负载。所以需要掌握一定的工具知识才能进行性能测试。大家都知道性能测试工具一般通过winsock,http等协议纪录用户操作。而协议选择是基于软件的系统架构实现(web一般选择http协议,cs选择winsock协议),不同的性能测试工具,脚本语言也不同,比如rational robot中vu脚本用类c语言实现。
开展性能测试需要对各种性能测试工具进行评估,因为每一种性能测试工具都有自身的特点,只有经过工具评估,才能选择符合现有软件架构的性能测试工具。确定测试工具后,需要组织测试人员进行工具的学习,培训相关技术。
·制定评估标准
任何测试的目的都是确保软件符合预先规定的目标和要求。性能测试也不例外。所以必须制定一套标准。
通常性能测试有四种模型技术可用于评估:
*线性投射:用大量的过去的,扩展的或者将来可能发生的数据组成散布图,利用这个图表不断和系统的当前状况对比。
*分析模型:用排队论公式和算法预测响应时间,利用描述工作量的数据和系统本质关联起来
*模仿:模仿实际用户的使用方法测试你的系统
*基准:定义测试和你最初的测试作为标准,利用它和所有后来进行的测试结果进行对比
测试环境建立
1) 整个测试环境系统的安装;
2) Web层系统的部署;
3) App层服务的安装;
4) DB层数据库的备份和还原;
5) 整个系统部署安装完成后,需要对系统功能进行测试检查(可以围绕着测试范围来进行)
设计测试用例
设计测试用例是在了解软件业务流程的基础上。设计测试用例的原则是受最小的影响提供最多的测试信息,设计测试用例的目标是一次尽可能的包含多个测试要素。这些测试用例必须是测试工具可以实现的,不同的测试场景将测试不同的功能。因为性能测试不同于平时的测试用例,尽可能把性能测试用例设计的复杂,才有可能发现软件的性能瓶颈。
1.测试数据生成
对于数据生成的方法,我主要是编写SQL语句来完成,另外还可以使用一些辅助工具,例如:DataFactory。
大数据量的生成,要注意SQL语句的有效性,尽量减少数据生成时所需要的时间;另外在数据生成过程中,可以进行脚本的准备。
注意:在数据生成之前,要考虑数据库文件的数量,因为数据文件均匀分布对整个性能测试结果很有影响,这是我们的血泪经验。
2.测试脚本准备
根据不同的测试工具,编写脚本的方式不一样,但是其流程大致是一样的:
录制—〉回放—〉一些数据的参数化、添加一些验证条件—〉回放
注意:参数化数据的随机性会影响性能测试结果;
运行测试用例
1.预测试
测试相关工作准备完成后,我们可以开始预测试了;
预测试的目的主要是优化和调整系统;它是一个反复迭代的过程;
2.性能优化和调整
性能优化和调整是整个性能测试工作的核心和关键;
主要根据测试过程中所得到的系统计数器值来判断系统瓶颈所在,这里需要一些经验;我对性能优化和调整的认识主要如下:
1) Web层,主要在于对IIS的优化;对于基于.NET Framewoek的Web站点,还可以修改相关的参数来进行优化;
2) App层,目前我们的系统都是在功能完成后才对系统进行性能测试的;所以我们对代码的优化工作机会为零,这是一个遗憾,但也是整个性能优化和调整的一大部分工作所在。
3) DB层,数据库层的性能优化是我们整个性能优化的核心,我们主要围绕着索引和存储过程来展开;这是一个相当漫长的一个过程,需要我们有耐心和毅力。
3.正式测试
当预测试结果达到测试需求后,我们可以进行正式测试了;如果时间允许,我们可以进行进一步的性能优化和调整工作;但是实际上很多时候,我们没有这样的机会。
通过性能测试工具运行测试用例。同一环境下作的性能测试得到的测试结果是不准确的,所以在运行这些测试用例的时候,需要用不同的测试环境,不同的机器配置上运行。
·分析测试结果
运行测试用例后,收集相关信息,进行数据统计分析,找到性能瓶颈。通过排除误差和其他因素,让测试结果体现接近真实情况。不同的体系结构分析测试结果的方法也不同,bs结构我们会分析网络带宽,流量对用户操作响应的影响,而cs结构我们可能更关心会系统整体配置对用户操作的影响。