• 0
  • 0
分享
  • 性能测试基础——软件测试圈
  • 恬恬圈 2022-05-06 11:12:54 字数 2690 阅读 474 收藏 0

一、性能测试想做什么

首先,性能测试想做的事情,类似下图:

图片 1.png

这是一个简化过的关于web应用的服务端的性能测试示意图,性能测试想要模拟真实业务场景。当一个应用上线,有很多用户通过客户端访问服务端。他们把请求通过用户界面发送给了服务端,于是在服务端接收到了大量的请求,如果用户数很多,那么服务端有可能承受不了这种压力,进而崩溃,严重的可能导致大量经济损失。

性能测试则是希望通过提前模拟这种压力,来发现系统中可能的瓶颈,提前修复这些bug,减少服务器宕机的风险。此外,性能测试还可以用来评估待测软件在不同负载下的运作状况,帮助管理层做一些决策。比如早期有的管理者会希望通过性能测试来评估需要买几台服务器。但,这种做法随着云计算的普及,已经过时。在云计算平台上,硬件资源可以弹性获取,自动调整。云计算也会对性能测试的方式产生影响,包括服务端资源监控在内的很多工作,未来都可以交给云计算平台了。大家也可以关注一下,云计算对传统测试工作的冲击。

二、性能测试的基本流程

下图表示了一个简单的性能测试的基本流程中,我们怎样得到性能测试的结果。

图片 2.png

然后,这只是一轮性能测试的开始,得到性能测试的结果之后,还有很多工作:

图片 3.png

可以说,这里的调优过程才是性能测试的技术含量所在。这可能也是性能专家这个角色存在的意义之一。而测试人员通过做性能测试,进阶成为性能专家,也是一种发展方向。但不得不说,这条路是比较难走的,限于我个人视野,我觉得DBA、运维、开发、这些角色都比测试更容易发展为性能专家。当然是否走这条路也要看个人兴趣了。

调优的话,主要看调优小组推测的瓶颈在哪里,比如推测瓶颈在数据库,可能让DBA调整一下数据库配置,然后再测一遍。推测瓶颈在第三方提供的设备上,那就咨询一下第三方的技术支持,然后调整一下配置再测一遍。这个调优过程,可能比较长。

从以上两图可以看出,在整个性能测试过程中,测试人员能做的工作其实并不多,且大多数属于第一阶段的低技术含量工作。主要集中在脚本录制或编写、性能监控器的配置和数据的收集上。后者还会受到云计算平台普及的冲击,很可能以后不用你做任何工作就能简单得收集到想要的资源使用情况数据。而在第二阶段调优时,性能调优小组的介入使测试人员存在感进一步下降。其中水平较低的测试人员将沦为脚本执行员和脚本修改操作员。

三、性能测试的前期准备

此外,还有一个性能测试还有一个前期准备阶段:

图片 4.png

这里先补充一些名词解释,我只是根据自己理解写一下,并不精确。精确定义大家可以网上搜索,另外我最后会推荐一些参考资料。

吞吐量:

表示待测应用对业务的支持量,以TPS或QPS为单位,表示每秒钟能处理的请求数。需要分析业务场景来计算吞吐量。

平均吞吐量=总请求数/总时间 = 2000×10/(24×3600) 

峰值吞吐量=峰值请求数/峰值时间 = 2000*0.5*10/(2*3600)

具体数字就不算了,算出来你发现吞吐量很低很低。这是因为这些数据我是随便造的,并且我之前工作过的电影网站吞吐量确实也很低,没多少用户。然后除了这些,还有很多估算。比如故意夸大一点,乘以一个估算系数之类的。总得来说,算出来的吞吐量不一定很精确,对计算公式感兴趣的话,可以搜索一下,有很多人给出更具体的例子。

虚拟用户数:

性能测试要模拟的用户数量。

性能测试结果:

包括响应数据和性能指标。

响应数据相关的常见指标有:90%平均响应时间、错误率等

性能指标包括CPU,I/O,Memory,Network四个方面,每个方面都有几个指标。

关于这块,相信你能在网上找到相关文章教你的,我这里就不展开了。

测试策略,代表设计这些场景的依据,在这里主要有以下几种:

注意,这里的名字并不是全球统一的,不同的公司,不同的人可能对同一种测试策略有不同的叫法。

1)基线测试,又叫基准测试:

测一下单个用户做主要业务流程的场景。其性能测试结果会作为比对依据。

2)性能测试:

逐步增加用户数,比如10个,20个,50个,80个,130个,得到不同用户数情况下的性能测试结果变化趋势图。这个图里常常可以发现性能瓶颈。比如用户数到某个值时突然性能指标下降了很多,错误率大幅上升了。那就需要进一步分析是软件的问题还是硬件的问题,还是环境的问题等。

3)压力测试:

使用超过系统设计的最大用户数,看看待测应用会不会崩溃,会怎么样,有没有隐患和风险等。

4)负载测试:

在比较高的用户数情况下,较长时间得执行测试,观察系统在较高负载较长时间下的稳定性。

5)根据性能测试的负载生成器所在位置,还可以分出本地同网络的测试和跨网络的测试。

6)还有当下比较时髦的全链路测试,其实就是把真实环境划出一块来做测试。这样来解决估算不准的问题。这块网上有一些资料,但不太多。

关于分析生产环境和建立估算模型。可以去搜搜阿里研究员对全链路压测的演讲。或者去找其他资料。我也没估算过,不展开了。我只做过最简单的,在没上线的生产环境上做性能测试。但估算的问题很明显就是:很难估算准确。

其他在前期要做的事情,还有确定测试通过标准,比如吞吐量要达到多少,错误率低于多少,响应时间要多快,服务器CPU占用率要多少以下等等。

以及确定测试环境用什么设备,怎么搭建。等等。

四、性能测试的工具及相关学习建议

然后说到测试工具,再吐槽一下一上来就问工具的人。上面这么多原理你如果不了解的话,只会用工具是没什么用的。

现在的主流性能测试工具是:Jmeter

其次Grinder,Gatling,Locust,Loadrunner等等等等,此处排名不分先后。我也不知道哪个工具是第二流行的。

jmeter的学习主要通过官方用户手册。现在这个工具对我来说最大的问题就是图形界面用起来挺麻烦。后来的很多工具已支持纯脚本或代码方式描述测试场景。不过幸好我也不经常做性能测试。我的建议是大家都要学jmeter,其他工具可以选学,loadrunner除非真的你公司要用否则不用学。

而监控服务器指标方面,jmeter有插件支持。也可以用linux命令行工具做。也有人用商业工具做。总之要把服务器性能指标和请求响应时间两组数据的时间线对上,让我们可以看到什么时候发送了多少请求,响应时间多少,错误率多少,此时服务器负载又是多少。

总而言之,不管你做不做性能测试,多多少少要知道是怎么回事,可能什么时候你领导就要你做个简单的性能测试呢。也要有逐步加压的做性能测试的这种概念和思路。性能测试本身也是很系统化的一种测试,其中各个步骤环环相扣的特点,也是其最有意思的地方。

 

作者:成风
文章链接:https://zhuanlan.zhihu.com/p/31080929

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   根据《The Newstack》报道:软件测试平均消耗企业应用预算的30-40%。如果你参与了软件开发过程,那么你就会明白软件测试的重要性。如果bug在早期被发现,修复的成本无论是从金钱还是时间来考量,都会更低。  随着软件开发项目的不断扩展,它们往往会变得更加复杂,随着项目开发周期变得越来越短,依靠手工测试来跟上进度可能会很有挑战性,所以越来越多的公司选择了自动化测试。因为这能够让他们在合理的时间范围内达到测试目的。  但是什么是自动化测试,为什么它很重要?这是我们将在本指南中讨论的内容。  自动化测试有什么好处?  执行自动化测试的主要目的是减少构建产品所需的成本和时间,同时确保产品构...
            0 0 456
            分享
          • 1、django+python27+mysql的生产环境,想换成python3,请问需要哪些注意事项?生产环境数据不想被破坏,所以不敢轻易下手,希望大神指点一下。关于python升级:可以使用Python3自带工具2to3,将python2的代码转换为python3。少部分代码仍需手工转换。升级python版本后,第三方包的版本需要升级。有的第三方包不支持python3。这个时候可以尝试使用2to3工具对第三包的python源代码进行转换,然后使用。这样存在一定风险。无法转换的,需要寻找替代包,应用服务器上对应的代码需要修改。关于django升级:django1.5开始支持python3。同时...
            0 1 1680
            分享
          • 前提条件:Jmeter已安装且已配置好;运行Jmeter,打开界面。第一步,添加线程组在Jemeter界面上有一个默认的测试计划根路径。一个测试计划包含一系列Jmeter运行时要执行的步骤,包含一个或者多个线程组,逻辑控制器,取样发生控制,监听器,定时器,断言和配置元件等。我们想要创建一个完整的测试计划,那么就先创建一个线程组:选中测试计划,点击鼠标右键-> 添加->线程(用户)->线程组,如下图所示:线程组元件是任何测试计划的起点。一个测试计划的所有元件必须在一个线程组下。线程组元件控制JMeter运行测试时使用的线程数。线程组管理可以:设置线程数设置ramp-up per...
            0 0 4997
            分享
          •   你有多久没听过测试策略这个词了?它就像个走失的小孩,慢慢迷失在快速迭代的敏捷潮流中。曾何几时,测试策略是测试活动的重要一环,它指导着整个测试活动的开展,是高阶测试人员必备的技能。今天,我们来聊聊这个被逐渐忽略的测试技能。  1. 什么是测试策略  维基百科上有一大段关于测试策略的定义,这里就不贴出来了,简单来说,测试策略主要关注两个问题:  测什么:测什么是指质量需求是什么、需要关注质量的哪些方面,比如应用的功能范围、性能、安全、易用性等非功能需求。  怎么测:怎么测就是采用什么办法来帮助系统实现质量需求,而不仅仅是手动和自动化的测试方法,也包括一切为质量保障服务的流程、环境、基础设施和人...
            0 0 756
            分享
          •   1月4日,恰好是乐视实行“四天半工作制”的第一天。  当天下午三点,燃次元到达北京乐视公司楼下时,迎面撞上不少面带笑容、结伴离开办公大楼的乐视员工,当燃次元进入乐视公司时,诺大的工区内,只剩下零星几个人。  乐视市场部负责人小夏告诉燃次元,在她宣布实行“四天半工作制”时,员工们是出乎她意料的“淡定”,毕竟在乐视,“从不996,下班即挂机,”小夏补充道,“员工下班从来不回我消息的,所以他们也没有很激动。”  2023年的第一个工作日,1月3日,乐视CEO张巍发布全员信,宣布了一个“高能”的消息,2023年1月1日起,公司将执行每周四天半工作制,每周三实行弹性的半天工作制,考勤时间调整为连续的...
            0 0 787
            分享
      • 51testing软件测试圈微信