如何开展性能测试工作

上一篇 / 下一篇  2017-03-10 14:41:49 / 个人分类:性能测试

1如何有效组织和实施性能测试

1.1测试现状

前一段时间项目组安排了性能测试,我有幸成为其中一员,参与了整个测试过程。在整个过程中,遇到了诸多的问题。这些问题大多都是由于前期计划不周详,最终导致项目测试进度延误。总结如下:

1对测试对象了解不足

在测试方案制定过程 ,由于测试对象版本变更频繁,对当前版本的测试对象了解不足,以致设计的测试用例无法使用,导致脚本录制工作无法顺利开展。

2对测试对象所使用的开发技术不了解

在测试前,对开发技术仅仅了解大概,没有进行深入的学习和研究,导致在录制和增强脚本时,技术储备不够,临时增加技术学习和研究,虽然最终解决了技术难点,但是影响了测试进度。

3测试环境的准备

由于性能测试环境是搭建在客户现场,使用的是现场的测试环境。电网系统是一个高可靠高保密的环境。个人电脑设备、个人的U盘和移动硬盘是无法接入内网的。因此所有的测试工具都需要部署在内网上。同时,内网机器的使用权限都需要向国网公司进行报备审批。因此,在部署系统环境和测试工具时都需要向国网公司申请走流程,此类工作由于需要国网公司人员的同意,更是需要不少时间。

4测试数据的估计失误

测试现场是B类城市,硬件设备是按照B类公司的要求进行采购。领导希望能按照A类城市的要求进行测试,导致数据量过大。硬件设备成为测试的瓶颈,无法达到本次测试的目的。

5计划考虑不够周全

测试计划中的时间规划不够务实。时间设置依赖于过程顺利,未预留冗余时间。一旦测试过程中,出现不可控的风险,即无法顺利完成计划。

6风险意识不强

在做测试计划时,对测试过程中的风险预见不足,没有给出对应的风险应对方案,导致一出现意外情况,测试就出现手足无措,无法进行风险控制。

1.2组织和实施性能测试

在前一段时间的测试过程中,测试人员本着认真负责的态度完成了测试工作,测试结果也找到了系统的问题。但由于测试过程中出现诸多问题,测试计划被严重延误,导致项目计划的延误。现在就这些问题,对如何开展性能测试活动进行了思考。下面把开展性能测试过程的其中6个重要过程进行了详述。

1.2.1测试设计阶段

“凡事预则立,不预则废”。在设计阶段,需要做好计划。而做好计划,事先需要考虑以下几个方面的问题:

1本次测试的对象是谁?

2本次测试的范围是什么?

3本次测试要达到什么样的目标?

4本次被测软件采用了哪些开发技术?

5本次测试对软、硬件环境,测试数据和用户量有哪些要求?

6应该如何去测试?

7项目组的计划是怎样安排的?留给测试的时间有多少?

8各项需要协调的事情的对接人是谁?联系方式?是否有第二对接人?

9测试过程中可能会遇到哪些风险?

只有在认真调研测试需求和仔细分析测试需求后,才能回答上述问题。理解上述问题,即掌握本次测试的基本情况,我们深入理解测试对象,描述出测试范围,明确测试目的,理解被测对象的系统架构以及部署方式,明确数据量要求和用户量要求,理解测试用例和场景设计方式,以及本次测试需要监控哪些性能指标和被测对象的性能要求。当这些信息在我们心中有数时,我们才能理清思路,制定出适用的测试计划和测试方案。另外,在设计阶段,我们还要裁剪出合适的文档模板,以支持各个阶段的工作。务实的测试计划和测试方案,对后期的实施是大有裨益的。

1.2.2测试技术准备

在目前环境下,要求测试人员短期内对软硬件都了如指掌是不现实的,但平时测试人员应抓紧对测试工具和测试理论的学习。在测试计划中,应给测试人员留出足够的时间,让测试人员理解被测对象及其开发技术,调研相应的测试技术和学习使用工具。只有在充分理解系统,且掌握相应技术后,我们才能有效开展测试活动。

技术准备:1)扎实的计算机专业知识,包括操作系统的原理、数据库原理、网络原理、中间件的理论知识等;2)实际性能测试经验及优化经验;3)性能测试工具的使用;4)行业知识,包括业务知识、行业标准等;

1.2.3测试环境准备

测试环境分为软件环境、硬件环境和网络环境。由于系统性能与环境有莫大关系。同样的业务系统,在不同的环境下,得出的测试结果可能是天壤之别。因此,测试环境需要严格按照测试方案中的要求准备。在准备测试环境时,该工作通常由实施组负责,但测试人员应该对其有所了解。其中操作系统参数的设置、数据库的配置和中间件的参数设置以及网络拓扑,测试应理解。环境部署的细微偏差,对性能测试有一定范围的影响。

注:测试环境信息具体包括:硬件:服务器、网络设备(交换机、路由器、防火墙等)、其他外围设备;软件:被测软件、第三方应用、系统软件(操作系统、中间件、数据库、web服务器);系统其他配置或处理机制:session复制/同步机制、会话保持机制、F5分发、重定向机制等。

1.2.4测试数据准备

不同级别的数据量,给系统的性能带来不同的影响。数据量越大,给系统带来的压力越大。但是具体使用多大数量级的数据量,应基于调研的结果。准备测试数据,一般有两种方法。一导入现场真实数据库;二生成模拟数据。通常,性能测试是模拟几年后系统情况,因此导入现场数据,依然不能满足性能测试要求,仍然需要生成模拟数据。在这里数据不仅仅是业务数据,还包括基本数据和用户数据。

1.2.5测试执行阶段

测试前期的准备工作纷繁芜杂,做好前期的准备工作,性能测试工作已经有了好的开端。在执行阶段,只需要按照前期制定的计划方案一步一步的实施。严格把握测试的强度,保持测试的一致性,提高测试的精准度,将为提供一份有说服力的报告提供保证。

在性能测试开始后,服务器(包括应用服务器和数据库服务器)、网络设备、客户端、中间件、数据库等所有与被测系统相关的软硬件的参数设置都要遵循统一的标准。在每次测试前,都要严格检查一遍测试环境是否一致,无论哪一个环节,哪怕只是一点点的偏差,都需要严格纠正,决不能存在侥幸心理。一旦出现偏差,测试数据将失去参考价值,而得出的测试结果也就失去了精准度。

1.2.6测试分析阶段

在分析阶段,需要对高标准严要求下获得的测试结果数据进行分析。首页对收集到的性能数据进行通读整理,如响应时间、吞吐量、TPS、并发用户量、CPU、内存、磁盘IOPS、网络带宽、中间件服务器性能、数据库服务器性能等,查看在哪一块性能数据不满足要求。在找到不满足要求的点后,逐步缩小问题范围,在这个范围内进行排查。或者通过逐步分析系统处理一个请求/访问的各个环节,找出处理过程的异常所在,从而找到问题的瓶颈。该过程是一个抽丝剥茧的过程。找到问题的瓶颈后,确定调整目标和解决方案。并对解决方案进行测试,即建立基准测试,测试后分析系统是否达到或超出预定目标。如果达到,则调优工作就基本结束了。

2总结

本文只是就个人在工作过程中的失误以及心得进行了总结和整理,所言仅是个人的片面之言。个人觉得开展性能测试活动,首先重中之重是做好需求调研,明确本次测试对象、测试范围和测试目的。理解被测系统、开发技术,项目架构和部署方式。提前学习研究测试技术和测试工具。做好设计工作,为后期的执行做好准备。在执行阶段严格按照标准执行,收集性能数据,为分析阶段提供精准的数据。分析调优时,大胆设想小心求证,找到解决问题的办法。在测试完成后,对整个测试过程进行总结分析,找出本次的测试过程的不足,以及本次测试过程中遇到的风险,统计分析种种信息,为后期再次开展性能测试活动做好准备。

附录1性能测试分类

性能测试只是一个广义上的说法,它从不同的角度和不同的关注点分为以下几种:

1性能测试(performance testing

性能测试的方法是通过模拟生产运行的业务压力量和使用场景组合,测试系统的性能否满足生产的性能要求。即在特定的运行条件下验证系统的能力状况。

主要强调在特定的软件环境、特定的测试业务场景下,获得系统的各个性能指标。

2负载测试(Load Testing

在给定的测试环境下,通过在被测系统上不断增加压力,直到性能指标超过预定指标或某种资源使用已经达到饱和状态,目的是了解系统性能容量和处理能力极限。负载测试的主要用途是发现系统性能的拐点,寻找系统能够支持的最大用户、业务等处理能力的约束。

负载测试时再固定测试环境,在其它测试角度(负载方面)不变的情况下,变化一个测试角度并持续增加压力,查看系统的性能曲线和处理极限,以及是否有性能瓶颈存在(拐点)。主要意义是从多个不同的测试角度去探测分析系统的性能变化情况,配合性能调优,测试角度可以是并发用户数、业务量、数据量等不同方面的负载。

3压力测试Stress Testing

测试系统在一定饱和状态下系统能够处理的会话能力,以及是否出现错误,一般用于稳定性测试。

可以理解为资源的极限测试。测试关注在资源处于饱和或超负荷的情况下,系统能否正常运行,是一种在极端压力下的稳定性测试。其主要意义是通过测试、调优,保证系统即使在用户的极端压力下也不会出错甚至系统崩溃。

压力测试的目的是调查系统在其资源超负荷的情况下的表现,尤其是对系统的处理时间有什么影响。这类测试在一种需要在反常数量、频率或资源的方式下执行系统。目标是通过极限测试方法,发现系统在极限或恶劣环境中自我保护能力。主要验证系统的可靠性。

4稳定性测试

稳定性测试就是长时间运行,在这段时间内观察系统的出错几率、性能变化趋势等。进而大大减少系统上线后的崩溃等现象。一般持续的时间为N*24小时。稳定性测试注意事项:1)一般稳定性测试需要在系统成型后进行,并且没有严重的Bug存在。2)场景的设计以模拟真实用户的实际操作为佳。

5配置测试(Configuration Testing

通过对被测系统的软硬件环境的调整,了解各种不同环境对性能影响的程度,从而找到系统资源的最有分配原则。

主要用于性能调优,在经过测试获得了基准测试数据后,进行环境调整(包括硬件配置、网络、操作系统、应用服务器、数据库等),再将测试结果与基准数据进行对比,判断调整是否达到最佳状态。

6并发测试(Concurrency Testing

模拟并发访问,测试多用户并发访问同一个应用、模块、数据时是否产生隐藏的并发问题,如内存泄露、线程锁、资源争用问题。

7失效恢复测试(FailOver Testing

失效恢复测试重在关注系统出现问题后能否根据预先制定的策略恢复,且恢复后能否正常运行。

失效恢复测试一般针对有负载均衡的系统进行,主要是为了测试系统局部发生故障时,是否会对全局产生大的影响,产生的影响是否在可以接受的范围内,以及用户是否能够继续使用系统。

8基准测试(Benchmark Testing

基准测试时一种衡量评估软件性能指标的活动。你可以在某个时候通过基准测试已建议个已知的性能水平(成为基准线),当系统的软硬件环境发生变化之后再进行一次基准测试以确定哪些变化对性能有影响。

注:本文参考百度文库和百度经验


TAG: 性能测试思想

 

评分:0

我来说两句

日历

« 2024-04-14  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 12014
  • 日志数: 4
  • 文件数: 1
  • 建立时间: 2017-03-08
  • 更新时间: 2018-09-21

RSS订阅

Open Toolbar