改变测试思路,你的性能测试才能更值钱!(上)

性能测试的目的,简单说其实就是为了获取待测系统的响应时间、吞吐量、稳定性、容量等信息。而发现一些具体的性能相关的缺陷(如内存溢出、并发处理等问题),我认为只是一种附加结果。从更高的层次来说,性能测试最想发现的,是瓶颈。如何能得到所需要的信息,就需要从多方面进行测试。

性能测试的内容

1

性能测试种类的划分与定义这里就不说了,各有各的说法,比如性能测试、负载测试、压力测试这三个词,在网上能找到N个版本的定义,大体理解就行了,没必要在文字层面上较这个真。以下的内容也只是我个人的理解,一些名词的定义可能和其他资料有所不同,但在我的工作中,这样是比较形象和容易理解的。

在实际工作,一般的应用系统会从这么几个方面进行性能测试。

1.基准测试

Benchmark或者Baseline测试。一般为单用户测试,或者是零数据量环境下的测试。目的在于建立一个可度量的参考标准,为其他测试场景或者调优过程提供对比参考。也可认为是最基础的性能测试,如果基准测试的结果都不能达到预期要求,那么后续场景也就没必要测试了。

2.日常压力测试

在基准测试通过后,应该先进行较小压力下的测试,首先对系统在日常压力下的表现进行测试。此压力需要根据系统使用相关数据得出,如系统平均每天访问量、平均在线人数、每日完成事务数等。通过此测试,发现一些较表面的性能问题并进行处理。

3.峰值压力测试

在日常压力测试通过后,需要进行更大压力的测试。此处压力同样需要相关数据的支持,一般为未来几年后的预期压力。可根据历史日均压力、日最高压力等信息,估算出未来几年的日均以及日最高压力。再通过一些通用估算方法、如二八原则(80%的工作在20%时间内完成,相当于2小时完成一天8小时的工作量),将日压力转换成峰值压力。

峰值压力为可预期到的最大负载压力,通过了此测试,则认为系统有能力满足未来增长的压力。

4.容量测试

验证了系统是否可满足预期的压力后,还需要知道系统能够承受的最大压力,也就是容量。一般通过“拐点法”进行测试,逐步增大系统的压力,直到性能指标不可接受或者出现了明显的拐点。如下图,拐点在哪?

5.稳定性测试

验证系统是否可长期稳定的运行,是否存在一些短时间内可能无法发现的缺陷(如内存溢出、数据库连接不释放等)。为了缩短测试工期,一般可将预期一天的压力集中在2小时内完成(二八原则),这样持续加压10小时,便相当于系统运行5天。注意监控各种性能指标是否平稳,有无下降。

以上几种类型的测试,是性能测试过程中最多用到的。当然也也其他一些比较常用的类型,如绝对并发测试,测试多用户对某一功能的瞬时请求,主要用于验证系统是否存在并发逻辑上的处理问题。此测试也可划分到不同的压力测试场景中去,根据不同的用户压力,测试相应的绝对并发,一般取在线用户数的10%进行测试;突发压力测试,对一些不在预期内的突然压力进行测试(其实既然想到了,就应该是在预期内了)。

以银行门户网站为例,可能会由于发布了一条重要消息(政策调整)而导致访问量激增,这种压力是否会导致系统宕机或者暂时无法提供服务,就是突发压力测试需要考虑的了。也有人将此压力定义为峰值压力,这就无所谓了,只要考虑到会有这么一个问题就够了。

性能测试的阶段

2

上面主要说的是测试内容的划分,也就是说做性能测试时要考虑到的几个方面。从实际执行层面来看,测试的过程一般分为这么几个阶段:

1.测试确认

理解被测系统、寻找测试点、确认测试范围、测试环境等。一些重要信息需要同PM、需求人员、设计人员讨论确认,如用户最常用哪些功能、最关注哪的性能,程序上哪可能是压力点,哪些数据需要模拟到真实的量级,大体上需要使用哪种测试方法。

2.确定通过标准

性能是好是坏、测试是否通过,必须有明确的标准。这个标准,主要从客户的期望和业务上的需求两方面来考虑,客户的期望一般指页面上的响应时间,业务需求则是系统的处理能力,一般为吞吐量或TPS(每秒完成事务数)。标准制定的不合理,测试结果可能无法反映系统真实的性能表现,或者会让客户无法接受我们认为通过的软件。

至于具体如何去设定,是需要同业务负责人(一般为PM)和技术负责人(一般为设计人员)共同确认的,业务负责人了解用户的实际需求和期望,技术负责人了解具体的实现,可以判断哪些是不可达到的要求。一旦达成了共识,那么测试就要严格的按照标准去执行。

3.测试设计

主要从上面提到的几个方面进行分析,针对系统的特点设计出合理的测试场景。为了让测试结果更加准确,这里需要很细致的工作。如建立用户模型,只有知道真实的用户是如何对系统产生压力,才可以设计出有代表性的压力测试场景。

这就涉及到很多信息,如用户群的分布、各类型用户用到的功能、用户的使用习惯、工作时间段、系统各模块压力分布等等。只有从多方面不断的积累这种数据,才会让压力场景更有意义。最后将设计场景转换成具体的用例。

测试数据的设计也是一个重点且容易出问题的地方。生成测试数据量达到未来预期数量只是最基础的一步,更需要考虑的是数据的分布是否合理,需要仔细的确认程序中使用到的各种查询条件,这些重点列的数值要尽可能的模拟真实的数据分布(数据统计信息、执行计划相关的内容,此处就不细说了),否则测试的结果可能是无效的。

此外,性能测试执行过程中,需要监控收集的各种指标数据,也需要明确下来。

4.测试环境准备

部署测试环境,生成测试数据,环境预调优等等。预调优指根据系统的特点和自己的经验,提前对系统的各个方面做一些优化调整,避免测试执行过程中的无谓返工。比如一个高并发的系统,10000人在线,连接池和线程池的配置还用默认的,显然是会测出问题的。

5.测试执行、监控

准备测试脚本,执行之前设计好的各个用例,监控并收集需要的数据。出现问题时,切记要全面的保留事故现场、或者是能进行分析的数据。比如TOMCAT不再响应,不能只把这个现象记录下来,这对问题的排查定位是没有意义的,要保留所有相关的日志,导出线程转储和堆转储。

6.问题分析定位、调优

发现问题或者性能指标达不到预期,及时的分析定位,处理后重复测试过程。

性能问题通常是相互关联相互影响的,表面上看到的现象很可能不是根本问题,而是另一处出现问题后引起的反应。这就要求监控收集数据时要全面,从多方面多个角度去判断定位。

调优的过程其实也是一种平衡的过程,在系统的多个方面达到一个平衡即可。

7.性能报告

将测试过程中记录的各种数据汇总成报告,将各方面需要的结果清楚的展现出来。

上面所有内容中,如果排除技术上的问题,性能测试中最难做好的,就是用户模型(或者叫系统使用模型)的分析。它直接决定了压力测试场景是否能够有效的模拟真实世界压力,而正是这种对真实压力的模拟,才使性能测试有了更大的意义。可以说,性能测试做到一定程度,差距就体现在了模型建立上。

至于性能问题的分析、定位或者调优,很大程度是一种技术问题,需要多方面的专业知识。数据库、操作系统、网络、开发都是一个合格的性能测试人员需要拥有的技能,只有这样,才能从多角度全方位的去考虑分析问题。

当然,对于测试人员来说,技术能力只能排在第二号,测试思想才是最根本的。敏锐的嗅觉、严谨的逻辑、合理的推测、大胆的实践是一个合格测试工程师的必备要素。

参考:https://mp.weixin.qq.com/s?__biz=MzA5MzYxODgwNQ==&mid=2652490108&idx=1&sn=c8d9d6481cf221c49bf1a48ebe6fca78&chksm=8bb67e66bcc1f77028384fa0246b0437536076281648f12f54c6236cb3ee823dabc54c1cdc37&mpshare=1&scene=1&srcid=0719dHfmH10OKp9gHMDK9J3H#rd

原文地址:https://www.cnblogs.com/uestc2007/p/11214073.html

时间: 2024-08-26 21:43:10

改变测试思路,你的性能测试才能更值钱!(上)的相关文章

改变测试思路,你的性能测试才能更值钱!(下)

普通BS架构的系统,一般都采用测试工具(如LR)直接录制手工操作的方式进行测试.这种方式简单有效,对测试人员要求不高.但在一些情况下,这种基于录制的方法可能无法完成,比如页面上有特殊控件.系统是CS架构.或者通讯的协议无法捕获等.这时就需要更复杂的测试方法,如手动编写模拟客户端的JAVA代码,而把测试工具当作一个调度控制台,去调度大量的虚拟用户线程执行编写好的代码. 现在假设有一个简易版的12306网站,JAVA实现,中间件为TOMCAT,数据库为SYBASE,没有集群处理(一切从简,只有查询和

让你更值钱的方法:培养稀缺(追逐新技术,淬炼已有技能、做到出类拔萃,寻找自己所在的行业痛点,App开发者是市场动态平衡的典型)

一个开发者,如何才能更值钱? 答案非常简单:掌握稀缺资源. 那么,怎样才能持续不断地掌握稀缺资源,让自己更值钱呢? 请看接下来介绍的 2 种识别稀缺的方法和 2 种培养稀缺的策略. 稀缺资源的秘密 资源有很多,比如知识.技能.关系.社会资源.信息.天赋等等,哪种资源才是稀缺的呢? 答案可能不在资源本身,而在于: - 合适的环境 - 合适的时机 举个例子,作为移动 APP 开发者,你可能拥有开发 Android APP 的知识.技能.这些知识.技能,在 2007 ~ 2015 年上半年,尤其是 2

DIV+CSS:如何编写代码才能更有效率

如何编写CSS代码才能更有效率?这是许多网页制作者与开发者都关心的问题.大概没有什么魔法,可以保证一下就把你的样式表缩小到百分之多少,但合理的 CSS 编码与组织技巧,的确能够帮助你的更有效率地写出更清晰高效的代码,自然,样式表大小的缩减还能减少下载的时间. 一.排版: 1.关键词和操作符之间加适当的空格. 2.相对独立的程序块与块之间加空行 3.较长的语句.表达式等要分成多行书写. 4.划分出的新行要进行适应的缩进,使排版整齐,语句可读. 5.长表达式要在低优先级操作符处划分新行,操作符放在新

APP测试思路

APP测试的时候,建议让开发打好包APK和IPA安装包,测试人员自己安装应用,进行测试.在测试过程中需要注意的测试点如下: 1.安装和卸载 ●应用是否可以在iOS不同系统版本或Android不同系统版本上安装(有的系统版本过低,应用不能适配) ●软件安装后是否可以正常运行,安装后的文件夹及文件是否可以写到指定的目录里. ●安装过程中是否可以取消 ●安装空间不足时是否有相应提示 ●如果应用需要通过网络验证之类的安装,需要测试一下断网情况下是否有相应提示 ●是否可以删除应用(可通过桌面删除,也可以通

2017 VR市场变得更加理性才能更好的发展

原文标题:2017 VR市场变得更加理性才能更好的发展 2016上半年什么最火呢?那当然是VR虚拟现实了.在资本的市场疯狂的涌入下,VR虚拟现实成为人人口中的"风口",成为众多厂商追逐的新领域,随着潮水(资本)的退去,似乎整个虚拟现实产业又变得安静起来,而这正是虚拟现实产业"厚积薄发",等待全面爆发的前夕. 2016年被称为中国VR的元年,在资本的推动下,虚拟现实产业涌现出一大批创业公司.除此之外,一些大公司,如腾讯.阿里.乐视.酷开.小米.暴风科技等也都开始涉足V

多线程同步程序的测试思路

这里我有一个简单的思路,来源于去年应届生找工作做大量的名企笔试题里他人的技巧. 多线程的测试使用cout是不靠谱的,因为多个线程使用cout很容易产生混乱的输出,而且耗时. 多线程的测试往往需要知道多个线程同时运行的时候对某个共享区域的使用是否正确,为了检验正确性,比较好的测试用例就是:递增的整数序列 递增的整数序列中的每一个整数都对应一个线程的动作,最后我们将这些整数再当成另一个标记数组的下标,下标对应的值就是我们操作的动作执行的次数 只要用于标记的数组每一个元素都是1,即可. 比如: (1)

上班啦,软件测试的测试思路总结

清晰的测试思路会让工作更加流畅,先来看看进行初步软件测试时,一些测试思路: 模块测试 模块功能点检查 功能操作检查 页面链接.相关性检查.特殊字符.系统数据检查.测试数据检查等,这部分可以自行搜索.同时检查对之前bug的修复是否会影响到其他功能模块. 页面布局是否规范 测试进阶 掌握测试模块需求,及时和系统工程师确认系统需求 详细记录测试的功能点 针对单个模块测试,主要是测试以下: 1.UI界面测试 界面设计.提示框是否正确等,用自动化测试工具进行UI界面的功能测试. 2.易用性操作测试 主要是

户外物理渗透:终端机,客户端的web测试思路

现在的客户端界面越做越好看了,很多用到了web技术,轻便.界面炫.更新快,但是这样web的缺点也就出来了,就是不稳定,容易受用户等因素影响. 因为很多客户端web是内嵌的,内部通信,所以很多对安全的考虑就很少,漏洞亦较多.在此,我想跟大家分享一下客户端的web测试思路,让大家找到更多的高质量漏洞. 首先打开一个客户端界面,如腾讯的群介绍界面. 方法一:测试F5键.大家都知道F5是刷新键,按f5测试界面是否全部或部分刷新,如果刷新,很大的可能就是嵌入的web. 方法二:测试右键.网页自己特有的右键

如何才能更快速更全面直观的了解当下所发生的新闻事件?

二十一世纪什么最贵?你以为我会回答人才吗?不,今天我要说:二十一世纪最贵的,是资讯. 曾几何时,资讯是珍贵的,只为少数人所掌握的内容:曾几何时资讯的传播方式还局限于飞鸽传书.烽火狼烟:曾几何时,资讯的呈现方式还只有竹简.泥石板等--从历史的洪流中一路走来,我们不难发现,资讯二字变得越来越普遍,资讯的获取方式也越来越多样.只要你想知道,似乎什么资讯都可以在互联网获取. 二十一世纪是信息爆炸的时代,但二十一世纪的核心事件,却是对信息的颠覆.获取资讯固然容易,但如何快速获取有效高价值的资讯却成立难题.