深聊性能测试,从入门到放弃之:初识性能测试

简介: 深聊性能测试,从入门到放弃之:初识性能测试

本来想分成7篇来写,但是又考虑看到情深处,还得翻页,所以,索性合成一篇来写。

在写正文之前,先分享一个小故事:

人物:

小屌丝:测试经理

大佬:产品经理

小屌丝最近在做一个xx项目,项目马上结项,大佬突然要求小屌丝做性能测试。

俗话说做项目,要有规范流程,也要有项目计划。

小屌丝一脸懵逼,3秒后,小屌丝发出4问~ ~

小屌丝:大佬,首先我们在项目初期评估,这个项目是不是不需要做性能测试,二来,客户有没有要性能报告,三来,合同有没有提供软硬件设备信息,性能期望值等信息,四来,我们是不是需要到客户现场进行部署?

大佬:嗯…

小屌丝:那我们做性能测试,是为了体现报告的完整性,还是为了体现我们团队牛叉?

大佬:我就是想要性能测试报告!

小屌丝:…

哎! 长叹一声吧~ ~

言归正传,既然作为一名专业性能测试工程师,一定要给出项目负责人/客户最合理,最优的解决方案,千万不要因为她们的不了解,而嘲笑她们。

毕竟隔行如隔山~ ~ ~


接下来,跟着小鱼,详细的学习,如何搞性能!

小鱼儿会让你,从入门到放弃,就是一瞬间~ ~




一、测试流程



引用鲁迅老先生的话:无规矩不成方圆。

当然,我们性能测试,也需要有流程规范,而且符合项目管理流程,你说帅不帅~~

我们来瞅瞅这个流程规范


20200624135911307.png


有了上面的流程图,接下来,我们就来详细介绍一下各个环节:

①业务学习:通过查看文档,或通过实际操作来了解系统的功能。

②需求分析:分析系统非功能需求,划定性能测试的范围,了解系统性能指标。

③工作评估:工作量分解,评估工作量,计划资源投入(人、日)。

④设计测试模型:划定性能测试范围后,把业务模型映射成测试模型。

听到这句话,是不是一头雾水?什么是测试模型?

通俗的说,就是 :性能测试用例设计+性能测试方案

用例只关注业务,模型还需关注如何实现,是否具有可操作性,可验证性等,最后还得根据不同的测试目的,组合成测试场景。

⑤计划编写:计划测试工作,在文档中明确列出测试范围、人力投入、持续时间、工作内容、风险评估、风险应对策略等。

⑥脚本开发:录制或编写性能脚本,开发测试挡板程序,开发测试程序。甚至如果没有第三方工具,还需要开发测试第三方工具后程序。

>挡板程序:自己开发程序来替代第三方的支持

>>如:需要与航空系统进行交互,奈何航空公司不提供技术支持,我们就要自己开发程序替代。

⑦测试环境准备:性能测试环境包括服务器和负载机两部分。

服务器:被测系统的运行平台(软件、硬件)

负载机:我们用来产生负载的机器,用来安装负载工具,运行脚本的。

⑧测试数据准备:根据数据模型来准备被测系统的主数据和业务数据。

⑨测试执行:这一步是成败的关键,因为不同的人,设计场景以及测试执行上,所以结果可能还会有较大差异。

⑩缺陷管理:性能测试过程中发现的缺陷

⑪性能分析:性能测试结果可能暴露的问题进行分析,找出原因。

>>如何进行性能分析,请看小鱼的这篇《性能分析流程》

⑫性能调优:这就需要协作,性能测试大佬与开发大佬一起来解决性能问题

>>如何进行性能调优,请看小鱼的这篇《性能调优怎么做》

⑬测试报告:对测试结果的总结。

>>常见性能指标包含:TPS、RT、CPU Using 等等

⑭报告评审:针对性能报告中的内容进行评审,确认问题,评估上线/交付风险。


二、成败要素



小鱼记得,在性能分析这篇文章说过:如果把项目的各个环节比作各个学科,那么性能测试就是理综,集成了需求、开发、测试、运维、协调沟通。

我们从以下几点来说一下性能测试的几大难点:

①需求分析

②场景设计

③性能诊断调优

④环境搭建和模拟


很多性能测试大佬由于在需求分析阶段没分析到位,不准确的预估用户行为,不能在场景上很好的模拟用户操作,无法真实的模拟系统的负载情况,

最后的结果就是:在测试或者UAT环境运行的非常好,在上线后,就问题频频发生,结果可想而知。

就好比 :

2008年的奥运会,

2012年11.11 某宝,

2012年11.11 某东,

2014年1月9日的12306,

2014年11月6日亚马逊网站。


针对外行人,或者有些性能测试大佬,都以为性能测试就是使用一个工具或者写一个脚本,弄几台服务器,随便"跑跑",然后出一个报告,就ok了。

通常关注并发多少、响应时间多少、能不能跑通等等。

性能测试如果真的那么简单,还对得起从入门到放弃这几个字吗~~~

接下来我们来看一下,性能测试重要关注点有哪些:

1.评估系统,需求分析

在客户没有明确要求哪些值,

我们需要引导运维大佬和需求大佬给出具体的需求数据,并对数据进行二次分析,得出我们需要的信息。

针对初次上线的系统:我们需要用同行的数据,进行用户行为分析和商业数据结构的估算为前提,来进行推算,来得到我们想要的性能需求。

针对已上线的系统:我们可以通过运维人员获取TPS和时间的比例分布图、用户数和时间的分布图、数据库ER关系图、容量数据等,直接精确的得出目前系统的用户行为和业务数据关系,进而得到我们想要的性能需求。

2.场景设计,用例设计

我们要尽可能的真实模拟线上系统的负载。

我们要决定哪些功能需要参与性能执行,参与方式怎样?这就是用例设计。

如何有效的组织测试用例就是场景需做的事情,如,按业务分布,业务量,业务时段,业务角色来综合分配用户数、执行时间、执行比例等。

这个场景设计、用例设计,花费的时间可不短。

3.测试执行,是否pass

模拟不同负载执行测试场景来识别系统弱点,做好各种监控,筛查各种问题,验证系统稳定性等。

4.性能诊断优化

性能测试的大佬,需要具备良好的、敏锐的性能意识,能够把问题细化(即分步分类),协助各开发团队完成问题定位,分析调优。



三、大佬看性能



由于性能是一门综合学科,所以,我们就从不同的角度,来看看这些大佬对系统的要求有哪些:

1.黑盒测试大佬角度:

关心应用程序的单步响应时间,性能的好坏,就看应用的时间多少,即数据流经过服务器/服务器集群经过网络传输后往返时间总和。

2.开发大佬角度

①架构合理性

②数据库设计合理性

③代码

④系统里内存使用方式

⑤系统里线程使用方式

⑥系统资源是否有恶性,不合理竞争

3.运维大佬角度

①硬件资源利用率

②JVM

③DB

④系统是否支持7x24的服务

⑤扩展性,兼容性,最大容量,可能的瓶颈

4.性能测试大佬角度

①服务器硬件性能

②根据需求或历史数据制定性能目标

③建立性能通过模型

④对开发代码框架和硬件框架进行性能分析

⑤针对开发发布版本进行基准测试

⑥执行软件性能验收及稳定性测试

⑦生产环境的配比和优化

⑧执行性能测试用例、场景设计

⑨协调部分之间的配合

⑩特定的性能分析



四、相关术语



1.负载:

模拟业务操作对服务器造成压力的过程,比如2000个用户进行下单操作。

2.性能测试(Performance Testing):

模拟用户负载来测试系统在负载情况下,系统的响应时间,吞吐量等指标是否满足性能要求。

3.负载测试(Load Testing)

在一定软硬件环境下,通过不断加大负载(不同虚拟用户数)来确定在满足性能指标情况下能够承受的最大用户数。

>>这里性能指标包含:TPS(每秒事务数),RT(事务平均响应时间),CPU Using(CPU使用率),Mem Using(内存使用情况)等软硬件指标。

4.配置测试(Configuration Testing)

为了合理的调配资源,提高系统运行效率,通过测试手段来获取,验证,调整配置信息的过程。

5.压力/强度测试(Stress Testing)

在一定软硬件环境下,通过高负载的手段来使服务器的资源(强调的是服务器资源,硬件资源)处于一个极限状态,测试系统在极限状态下长时间运行是否稳定。

>>确定稳定的指标,包含:TPS(每秒事务数),RT(事务平均响应时间),CPU Using(CPU使用率),Mem Using(内存使用情况)等。

6.稳定测试(Endurance Testing)

在一定软硬件环境下,长时间运行一定负载,确定系统在满足性能指标的前提下是否运行稳定。这里强调一下,稳定性测试并不是在极限状态下来运行的,这与上面第五条的压力/强度测试 是不一样的。

一般我们会在满足性能要求的负载情况下加大到1.5 ~ 2倍的负载量进行测试。

7.TPS

每秒完成的事务数,通常指每秒成功的事务数,性能测试中重要的综合性能指标。一个事务是一个业务度量单位。

举个例子:

比如支付操作,在后台系统可能会经历会员系统,财务系统,支付系统,会计系统,银行网关等,但是针对用户来说,我就想知道我从下单到付款成功共花费多长时间。

8.RT/ART(Response Time/average Response Time)

响应时间/平均响应时间,指一个事务花费多长时间完成。我们更多的时候,是统计很多次响应时间,然后去平均值,这样保证了时间的准确性,同时也更具代表性。

>>通常,我们写RT,来代替ART。

9.PV(Page View)

每秒用户访问页面的次数。

>>此参数是用来分析平均每秒有多少用户来访问页面

10.Vuser(Virtual user)

虚拟用户数。即模拟真实业务逻辑步骤的虚拟用户,虚拟用户模拟的操作步骤都被记录在虚拟用户脚本里。Vuser脚本用户描述Vuser在场景中执行的操作。

11.并发:

并发最主要要有两点:点层面上和线层面上。

①点层面上的:

例如:周一早上7:30半,小学生要统一到操场升国旗。

>>即:同一时间做某件事

②线层面上的:

例如:中午11:30-13:00,小学生有的跳皮筋,有的踢足球,但同时对服务器产生压力。

>>即:一个时间段做不同的事

这里不做过多介绍,详细可以看小鱼写的这篇《常见并发问题》,里面有对并发的详细解读。

12.场景(Scenario)

性能测试过程中为了模拟真实用户的业务处理过程,在LR中构建的基于事务、脚本、虚拟用户、运行设置、运行计划、监控、分析等一系类动作的集合,称之为性能测试场景。

>>场景中包含:待执行的脚本、脚本组、并发数、负载生成器、测试目标、测试执行时的配置条件等。

13.思考时间(Think Time)

模拟真实用户在实际操作过程中停顿的时间间隔。

>>从业务角度来讲:思考时间是用户在操作时,每个请求之间的时间间隔;

>>从测试脚本来讲:是两个请求语句之间的时间间隔。

14.标准差(Std. Deviation)

根据数据统计的概念得来,标准差越小,说明波动越小,系统越稳定,反之,则说明系统不稳定。

>>包含:响应时间标准差,TPS标准差,Running Vuser标准差,Load标准差,CPU Using标准差等等。


五、性能工具



市面上的性能测试工具,还蛮多的,但是我们熟知,且使用最多的 JMeter 和Loadrunner这两款,那么,我们要怎么选性能测试工具、市面上又有哪些性能测试工具呢?

别着急,我们慢慢介绍。

1.如何选择性能测试工具

我们在选择工具的时候,无非从以下几个方面来考虑:

①专业,稳定,高效。

②简单易上手,在测试脚本上不需要花费太多时间。

③有技术支持,文档健全。

④投入与产出比。

2.常见性能工具有哪些

①HP公司的 Loadrunner

②Apache JMeter

③Grinder

④CompuWare 公司的QALoad

⑤Microsoft 公司的WAS

⑥RadView公司的WebLoad

⑦IBM公司的RPT

⑧OPENSTA等

在这里,小鱼强调一下,性能测试的核心不是选择什么工具,而是性能分析,重要的是思想,实现方式,这与选择什么工具,并无太大关系,

所以一定要分析主次。




六、通过标准



判断性能测试是否通过,不仅是看TPS,RT,而是要从服务端性能,前端性能,和用户体验性能来分析。

常见的测试通过标准如下:

七、小结


以上跟大家分享了,性能测试的基本情况,相信大家都能很好的理解并消化掉这些姿势,不, 是知识。

性能测试,要求的很多,不仅仅要求专业技能,还需要的是沟通能力。

为了能更好的学习掌握性能测试,还想需要各位大佬多从分析的角度来提升自己,毕竟,其的核心点就是性能分析。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
2月前
|
JavaScript jenkins 测试技术
这10款性能测试工具,收藏起来,测试人的工具箱!
这10款性能测试工具,收藏起来,测试人的工具箱!
|
4月前
|
测试技术
性能测试和负载测试的区别
性能测试和负载测试的区别
|
11天前
|
消息中间件 网络协议 物联网
如何入门做物联网系统压测?
【4月更文挑战第18天】物联网系统在架构、网络模式、通信协议等方面与传统的互联网系统有所区别。因此,传统的性能测试方法不能直接套用到物联网系统中。
89 13
如何入门做物联网系统压测?
|
24天前
|
人工智能 分布式计算 Kubernetes
人工智能,应该如何测试?(三)数据构造与性能测试篇
本文探讨了人工智能场景中的性能测试,区别于传统互联网测试,其复杂性更高。主要关注点包括两类AI产品——业务类和平台类,后者涉及AI全生命周期,测试难度更大。测试重点是模型训练的性能,特别是数据模拟。需要构造大量结构化数据,如不同规模、分布、分片和特征规模的数据,以评估算法效率。此外,还涉及模拟设备规模(如视频流)和节点规模(边缘计算),以测试在大规模负载下的系统性能。文中提到了使用工具如Spark、ffmpeg、流媒体服务器和Kubernetes(K8S)的扩展项目,如Kubemark,来模拟大规模环境。最后,文章介绍了使用Golang进行异步IO操作以构建海量小文件,优化IO性能。
48 0
|
2月前
|
存储 Android开发 C++
【Android 从入门到出门】第五章:使用DataStore存储数据和测试
【Android 从入门到出门】第五章:使用DataStore存储数据和测试
41 3
|
2月前
|
存储 SQL 数据库
【Android 从入门到出门】第六章:使用Room数据库并测试
【Android 从入门到出门】第六章:使用Room数据库并测试
31 4
|
3月前
|
弹性计算 测试技术 数据中心
阿里云香港服务器BGP多线精品网络_CN2性能测试_中国香港主机测试
阿里云香港服务器BGP多线精品网络_CN2性能测试_中国香港主机测试,阿里云香港服务器中国香港数据中心网络线路类型BGP多线精品,中国电信CN2高速网络高质量、大规格BGP带宽,运营商精品公网直连中国内地,时延更低,优化海外回中国内地流量的公网线路,可以提高国际业务访问质量
|
4月前
|
Web App开发 前端开发 测试技术
性能测试分层模型以及前端性能测试工具介绍
性能测试分层模型以及前端性能测试工具介绍
|
4月前
|
Java 测试技术 API
【Java技术深入解析】「核心技术提升」最流行的Java模拟框架Mockito入门指南(Java单元测试)
还在使用 Mockito 1.x?看看 Mockito 2 有哪些新功能!Mockito 3 没有引入任何破坏性的 API 变动,但现在需要 Java 8 而不是 Mockito 2 的 Java 6。 Mockito 4 删除了过时的 API。Mockito 5 将默认 mockmaker 改为 mockito-inline,现在需要 Java 11。一次只支持一个主要版本,而且不会向旧版本回传更改内容。
69 0
【Java技术深入解析】「核心技术提升」最流行的Java模拟框架Mockito入门指南(Java单元测试)
|
5月前
|
Linux 网络安全 开发工具
Android APP入门之Android的简介以及Android Studio开发环境的搭建和测试(2022最新 图文解释 简单易懂)
Android APP入门之Android的简介以及Android Studio开发环境的搭建和测试(2022最新 图文解释 简单易懂)
67 0