性能测试---开发世界的狂野一面


  摘自Blazemeter-----https://www.blazemeter.com/blog/performance-testing-wild-side-development-world
  曾经在某篇公众号文章的评论中看到这么一段耐人寻味的评论(文章的具体内容不再阐述):测试是一门艺术,每位测试员都是一位工艺师,他们在用他们诠释过的测试策略进行测试设计和执行,那些测试用例都是他们设计的工艺品。而今,软件的迭代速度已经不可控制,在一个只追求速度于发布的软件管理流程下,会有什么样的测试工艺品可以生存呢?各类‘自动化’层出不穷,所谓物极必反,过于追求速度最终都会回归本质---质量!
  这段评论很直白,点中了测试的本质以及当前测试的痛点。。。
  当然,只是小憩一会。。。。
  至于该主题的名称以及内容是粘贴Blazemeter社区的一篇文章,只是做小篇幅的修改。部分内容取自《软件性能测试过程详解和案例剖析》--段念;当然最根本的内容是性能测试的类型以及手段。
  在功能测试中,需要详细的需求,以便能够考虑发现的问题是错误还是功能。但是,在性能测试中,由于无法指定“通过”或“失败”,所以会发生变化。但是需要收集各方面的系统性能指标是一切目标的根本。那么为达到此目的,性能测试的类型就有下边几种:
  负载测试。
  压力测试。
  配置测试。
  稳定性测试。
  基准测试。
  并发测试。
  可靠性测试。
  容量测试。
  扩展性测试。
  失效恢复测试。
  来进行一一解读。
  负载测试:(load Testing)
  负载测试方法是对系统或设备进行增加压力并测量其性能指标的过程。执行负载测试以在正常和峰值负载条件下找出系统的行为。有助于指定应用程序的极限操作量以及任何瓶颈,以便隔离导致降级的组件。换一种说法,麻烦制造者。
  主要目的:找出系统处理能力的极限。
  负载测试需要在给定的测试环境下进行,通常也需要考虑被测系统的业务压力量和典型场景。
  负载测试一般是用来了解系统的性能容量,或者是配合性能调优来使用。
 
  压力测试:(Stress Testing)
  压力测试方法测试系统在一定饱和的状态下,例如CPU、内存等在饱和使用的情况下,系统能够处理的会话能力,以及系统是否会出现错误。当系统上的负载超出标准使用模式,以检查异常极端或最高负载下的系统反应时,这就是压力测试。负荷通常如此之大以至于错误条件是预期的结果,但是当活动不再是负荷测试并且变成压力测试时,不存在明确的边界。
  压力测试方法的主要目的是检查系统处于压力情况下时应用的性能表现;手段一般都是通过模拟负载等方法,使得系统的资源使用达到较高的水平;更多的是测试系统的稳定性。值得注意的是压力负载不是系统发生故障的负载。是系统仍在工作的负载。
 
  配置测试:(Configuration Testing)
  配置测试是通过被测系统软硬件环境的调整,了解各种不同环境对系统性能影响的程度,从而找到系统各项资源的最优分配原则。
  其主要目的是了解各种不同因素对系统性能影响的程度,从而判断出最值的进行的调优操作;一般是对系统性能状况有了初步了解之后进行;其作用于性能调优和规划能力。
 
  稳定性测试:(Stability Testing)
  稳定性测试是就测试系统长期稳定运行的能力,在系统的运行过程中,对系统进行施压,观察系统的各项性能指标,以及服务器指标。
  其主要目的在与系统长期处于压力下的运行能力(或者正常业务压力下);在测试过程中尽量延长测试时间,增大压力来提高测试的可靠性。
 
  并发测试:(Concurrency Testing)
  并发测试是通过模拟用户的并发访问,测试多用户并发访问同一个应用、同一个模块或者数据记录是否存在死锁或者其他性能问题。
  其主要目的是发现系统中可能隐藏的并发访问时的问题。例如内存泄漏、线程死锁、资源争用等。
 
  基准测试:(Benchmarking)
  基准测试是通过科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的可对比的测试;可测量、可重复、可对比是基准测试的三大准则(取自百度百科)

  其主要目的是为对某项性能指标(或业务指标)与某一基线指标相对比的测试过程(可对比)
 
  可靠性测试:(Reliability Testing)
  可靠性测试是为了评估产品在规定的寿命期间内、在预期的使用、运输或储存等所有环境下、保持功能可靠性而运动的活动,是将产品暴漏在自然或人工的条件下经受其作用,以评价产品在实际应用、运输的环境条件下的性能,并分析研究环境因素的影响程度以及其工作机制。。。。。(一系列百科解释)

  其实可靠性测试的概念大致概念就是通过给系统加载一定的业务压力(例如资源在70%~90%的使用率),让应用持续运行一段时间,测试系统在这种条件下能否稳定运行。
  
  容量测试:(Capacity Testing)

  容量测试,顾名思义,大致概念偏向于负载测试(百度百科巴拉巴拉,不再粘贴)
 
  扩展性测试:(Extensibility Testing)
  通常说的水平伸展(也是高并发系统中的一个重要因素),何谓水平伸展,在保证系统性能的情况下,可以通过增加机器来释放系统压力,谓之水平伸展。
  
  失效恢复测试:(Failover Testing)
  失效恢复测试是针对有冗余备份和负载均衡的系统设计的。该测试方法可以用来检验如果系统局部发生故障,用户是否能够继续使用系统,以及如果这种情况发生,用户将收到多大程度的影响。
  特点:(1)主要目的在于验证在局部故障情况下、系统能否继续使用;一般的关键业务系统都会采用热备份或负载均衡的方式来实现。这种业务系统一般要求如果有一台或者几台服务器发生故障,应用系统仍然能够正常执行业务。测试时可以模拟服务器故障,观察恢复技术是否能够发挥作用。
     (2)这种性能测试方法还需要指出,当问题发生后系统能够支持多少用户访问的概念或者采取某种应急措施的方案。
       (3)一般来说,只有对系统持续运行指标有明确要求的系统才需要进行这种类型的测试。不是所有的系统都需要进行该测试的。
  浪涌测试:(Surge Testing)
  浪涌测试是中模拟加压的场景测试,固定的线程数量在不同的时间内持续运行相同的时间。
  例如:10个线程在10s启动,持续运行10s,10s停止。
     10个线程在20s启动,持续运行10s,10s停止。
        10个线程在30s启动,持续运行10s,10s停止。
  。。。。
  (性能测试类型大致记到这一块,有需要补充的回头再来补充。)
  其实性能测试是个相对比较庞大的体系。测试人员要求综合素质普遍较高,从硬件(Disk、CPU、RAM等)、中间件(Tomcat、webSphere、JVM、Jboss等)、系统(windows、linux等)、数据库(oracle、mysql、sqlserver等)、架构(分布式、SSH等)、程序(python、Java等)、网络知识(丢包、截包等)都需要有一定的认识,因此考量一个性能测试人员是否合格,并不是对某一项特别熟悉,而是考量自身知识面的广度以及分析追踪问题的能力。(附一张《全栈Jmeter》的图--性能测试技能总览)
  
 
  
  
 
  
  
posted @ 2018-03-01 09:56  紫陌花间客  阅读(631)  评论(0编辑  收藏  举报