• 0
  • 0
分享

  摘要

  在测试性能时,我们可以尝试编写一个“性能等式”,以便检查影响性能的每个因素。但是,就算逐一检查方程式里的每一项也并不总是能看清整体情况。有些影响性能的因素很容易被忽略。测试更多的是发现系统的行为,而不是对一些期望行为的样本进行验证。

  许多团队为了查看系统是否能够满足业务需求,会搭建一套基于服务器和网络基础设施的“测试平台”,开发一些模拟用户请求的脚本,并运行这些脚本来测试应用程序。为了确保系统有额外的容量,他们会将事务数增加一倍。

  但这种方法似乎只是有时起作用,这意味着它在其他时候失败了。而解释它为什么成功或失败也同样是件困难的事。

  让我们先仔细看看构成“性能等式”的部分:

1.png

  这里:

  ·Env 表示测试环境(网络、交换机、负载均衡器、服务器、数据库和平台软件)。

  ·WL 表示模拟用户行为的负载脚本。

  ·Code 表示应用程序代码,包括程序内部组件和第三方库。

  ·X 是一组性能特征,比如响应时间、吞吐量等。

  环境

  测试环境中的硬件和软件对应用程序的性能有多方面的影响。如果复制生产环境在经济上不允许的话,那么最好的选择是使用最接近生产环境的、可用的环境进行性能测试。通常,这可能是用户验收测试环境或生产前环境。典型的“挑战叉”是,使用比实际生产环境弱的测试环境可能会导致许多不真实的错误,而使用比生产环境强大的测试环境可能会掩盖真正的性能问题。

  尽管在明显不同的硬件上进行测试的风险是显而易见的,但有些差异可能就不那么明显了。像服务器设置、内存分配和进程优先级,这些都是需要优先考虑的。应用程序的设置也可能会导致性能变化。比如,调试模式或日志记录的级别都有可能会显著改变文件操作的频率和数量。数据库结构和内容的复杂性也可能会对搜索和报告等功能产生显著的性能影响。要避免此风险,我们可以使用生产数据库的屏蔽副本。

  而且可能需要几轮测试我们才能发现和纠正那些隐藏在环境部分的、影响性能的因素。

  负载

  负载模型通常基于服务级协议和业务需求。一些常见的示例包括事务数、并发用户数和响应时间。典型的需求可能如下所示:

  允许并发数占2500个总用户基数的10%。

  支持每小时执行2500次的交易量。

  页面加载时间不应超过5 -10秒。

  该系统应保持8小时内无操作。

  这样的需求看起来非常简单,因此它们可能被用作工作负载模型。例如,根据上面给出的需求,您可能需要模拟250个并发用户每小时执行10个事务,每次8个小时。同时,还要测试页面加载时间。是的,为了测试额外的容量,我们可以每小时做20个事务,或者每三分钟做一次。

  对这个简单直白的模型,我们有没有漏掉什么东西?

  为了获得另一个视角,让我们将应用程序流量比作道路流量。一段100码长的路可以同时被10辆车占用。但是,当只有几辆车时,或者当他们一辆接一辆地行驶时,我们注意到行驶速度是不一样的。还要注意的是,在任何给定的路段上,同时并行的可能只有车道数那么多的车辆。如果车道数变了,车道数最少那一段,即能同时并行车辆数最少的路段,将极大地影响车辆行驶速度。

  你可能知道这是怎么回事。在一段时间内平均分配事务的数量时,考虑到了用户的并发性,但没有考虑事务的并发性。虽然人们可能会争辩说,250个用户不太可能同时按下“提交”按钮,但是有10个用户这么做的可能性有多大呢?甚至是3个?这是我们最有可能遇到瓶颈的地方。

  那么并发用户的总数呢?大多数负载测试工具和服务都有一个基于虚拟用户数量的定价模型,而且许多公司没有为250个虚拟用户颁发许可证。一个典型的解决方法是将脚本的速度提高一倍或三倍,以弥补事务的数量。虽然它在数学上是正确的,但是这种方法没有考虑到用户会话的数量对软件系统有非线性的影响。每个用户会话都需要分配资源(分配到应用程序的内存、服务器和数据库),并且资源管理本身也有性能压力。因此,以三倍的速度运行脚本并不能真正弥补同等数量的用户行为。

  代码

  在我们的性能方程中,如果我们假设代码部分是唯一的变量,那么任何性能变化都应该意味着是由于最近的代码更改引起的。

  一些代码更改可能确实会对性能产生巨大影响。但是,通常情况下,在性能问题变得明显之前,这里和那里的隐藏的小变化会累积一段时间。除非您有关于每个构建的性能基准的趋势图,否则很难注意到任何缓慢的下降。尽管测试可能会显示性能下降,但解决问题的困难之处在于缺乏单一的根本原因。

  恒定工作负荷模型的目的是建立跟踪基准。它们以相同的加载方式执行相同的脚本。但这也意味着以同样的方式行使相同的应用程序功能。实际用户在使用中会执行各种操作。除了事务预订功能之外,它们还可以搜索、编辑、删除数据和运行报表。所有这些功能可能不会使负载增加,但是如果用户并行操作的话会对性能有实质的影响。

  在相同的功能中也有新部署的特性,例如账户查找、编辑购物车等等。如果脚本以相同的方式提交事务,它们不会处理新增的那部分功能。

  解X

  所有的测试都是一种混合的活动:学习、建模、实验和调查。测试更多的是发现系统的行为,而不是对一些期望行为的样本进行验证。负载和性能测试也不例外。只有经过反复的尝试和错误,我们才能了解系统并开发有用的工作负载模型。

  在你的性能方程中寻找隐藏的那部分吧——特别是当它看起来很容易解决的时候。



作者:米果柠橙   

来源:http://www.51testing.com/html/96/n-4480796.html


2022 问卷.jpg

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 1、selenium中如何判断元素是否存在?isElementPresent2、selenium中hidden或者是display = none的元素是否可以定位到?不能3、selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?添加元素智能等待时间 driver.implicitly_wait(30)try 方式进行 id,name,clas,x path, css selector 不同方式进行定位,如果第一种失败可以自动尝试第二种4、如何提高selenium脚本的执行速度?代码优化5、用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没...
            0 0 854
            分享
          • 1.什么是接口测试?为什么要做接口测试?接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。由于如今的系统复杂度不断上升,传统的测试方法成本急剧增加且测试效率大幅下降,所以就要做接口测试。同时,接口测试相对容易实现自动化持续集成,且相对UI自动化也比较稳定,可以减少人工回归测试人力成本与时间,缩短测试周期,支持后端快速发版需求。接口持续集成是为什么能低成本高收益的根源。现在很多系统前后端架构是分离的,从安全层面来说,只依赖前端进行限制已经完全不能满足系统的...
            13 13 1090
            分享
          •   受博为峰邀请,我简单分享下,从大学毕业设计实习起至今的个人职业发展历程、工作经验和主要面试经历,希望能给大家带来一些启迪和帮助。  职业发展规划  考虑清楚自己想要什么?  如同很多刚进入职场的新人,我在一开始也没有特别清晰的个人职业规划。如果你在校有很好的课题研究机会,好好把握,大都能通过专业领域的导师或教授们,拿到一份名企的实习机会。  就在临近毕业前夕,我仍然不知道,或者说不敢去主动寻找企业、公司,选择向往的地方去实习。万幸的是,我大专毕业后进入了国有单位实习,最后有幸能够留下来开展职业生涯的第一份工作,对于当时的条件和市场来说绝对是香饽饽,至今也是很多人梦寐以求的。  当时设定好的...
            0 0 1911
            分享
          • 大家好,本人混过大厂,待过创业公司,爱给开发同学提Bug的测试妹纸一枚。2021年,是工作的第六年,也是具有突破性成长的一年,一直挺喜欢六这个数字,果然不负期望,带来了我好多惊喜。一、工作工作六年,一直从事的都是软件测试岗,一路走来可以说还是挺顺利的,在熟悉了各类业务,测试工具和简单的管理之外,略显疲惫,明显感觉工作遇到了瓶颈。后面在请教大佬,领导和同行的朋友,以及看过一些书籍后,慢慢找到了发力的方向,正在尝试突破瓶颈中。今年,负责的两个项目,日常工作正常开展,没有出现过线上事故,下面从测试人的角度总结下工作:一)业务在去年偏底层项目的基础上,新接手了一个Web项目,但是业务并不复杂,简单分为...
            0 0 1335
            分享
          • 读者提问:阿常你好,想请教你一下,如何评估软件质量,有通用的模型可供参考吗 ?阿常回答:有,软件质量版本的评估通常从以下三个角度出发:一、需求实现情况1、统计需求理解错误导致的功能实现上的错误有多少(bug 清单);2、统计由于种种原因功能未提交完的有多少(bug 清单);3、开发和测试关于需求实现存在争议,经产品再次确认发现是开发在需求理解上存在错误,需要在下一版本中修复(bug 清单)。二、测试过程评估1、测试用例首次执行通过率、测试用例累积执行通过率、测试用例累积执行率;2、测试用例在多个版本中的执行结果。三、进行缺陷分析1、功能特性的缺陷密度的统计(根据功能特性优先级、测试投...
            0 0 1202
            分享
      • 51testing软件测试圈微信