AIGC在金融场景是如何落地的? 了解详情
写点什么

Shift Left 性能测试 – 不一样的测试方法

  • 2014-09-05
  • 本文字数:6995 字

    阅读完需:约 23 分钟

开始着手全球性 IT 转型项目对于任何组织来说都是一件即兴奋又富有挑战的事情。当然,降低失败风险是整个项目的主要目标之一。而测试是能明显帮助降低失败几率的活动之一。

本文介绍了与传统多用户性能测试所不同的测试方法;尽管所使用的工具相同,但该方法结合了现代数据可视化技术,从而早早就能对那些可能存在有“沉睡着的”性能问题的特定位置及应用程序区域有所洞察。

大多数项目会首先专注于功能,然后才是其它。使用类似 HP LoadRunner 或 Neotys Neoload 这类测试工具的多用户性能测试往往属于测试循环后期才会发生的活动。很多时候会与 UAT 并行发生,而这时新系统已经暴露给终端用户了。因此在性能测试时发现性能问题的几率很高,修复的几率却很低。因为这种情况下,通常距离上线时间已所剩无几。

多用户性能测试通常发生于项目后期的原因有多种,根据项目的不同而不同。以下两个原因最为常见:

  • 多用户性能测试要求工具和自动化。自动化性能测试脚本所需的资源只有在性能测试即将开始时才有望存在,即应用程序达到“稳定”的开发状态时。假如自动化一个性能测试脚本需要 2 天的话,那么拥有多个测试脚本(比如:10 至 20 个)就要花费大量的时间或人力。为了不破坏当前在性能测试脚本开发上所花费的资源,该阶段不允许修改应用程序。所造成的结果就是:开发阶段的任何延迟或需要对代码进行大量的修改都将进一步延误性能测试,这给执行带来了风险,也不能及时提供相应价值。
  • 多用户性能测试需要一个类产品环境。尤其是处于 IT 转型的项目,这样的环境不一定在项目初期就存在,需要时间、精力和金钱去构建。但与之竞争的是早期测试周期中所有其它必需的对测试环境的配置和那些“真正办事的”功能。对项目而言,绝对需要类产品环境的最早一刻是测试部署时(即彩排时刻)。而这时要想让性能测试对项目成果产生正面影响已为时过晚。

作为降低风险的活动,性能测试是绝对必要的。真正的挑战在于如何以不同方式进行,这样可以在有更多时间和预算时就能解决与性能相关的问题。性能测试应在测试生命周期内更频繁地被执行,同时与主要发布周期相互协调,从而提供更好的投资回报,并不断地帮助降低项目风险。

以下这些目标很可能与大部分 IT 转型项目的目标类似:

  • 现代化 全球 IT 通过更新 ERP 和 CRM 应用程序到最新版本,为未来创新铺平了道路。
  • 合理化 优化应用程序以降低成本和复杂性
  • 集中化 集中化 IT 基础架构以降低成本和提高灵活性

本文所要说明的方法曾被一个处于 IT 转型的项目采用,该项目运行于一个中等规模企业,该企业在全球范围内运营,世界各地的办事处数量也在不断扩大。其通过标准的客户关系管理系统(CRM)和企业资源规划(ERP)应用程序, 在本地办公室内面对面地处理与客户的业务。

这两个应用程序的共同关键属性是显示大量数据给用户的同时,执行关键业务流程。此外,这些面向客户的业务流程还需要输入大量数据集(数百个记录 / 业务流程),然后在彼此上层处理。在以前使用大量数据集的测试业务流程往往只计划发生于用户验收测试(UAT)。其主要原因是:想在允许时间内覆盖所有必需测试集而手动输入数据的话,太费时间。数据迁移工作流被指定来为 UAT 传输这些数据,但是由于延迟,我们往往要等到 UAT 开始时才能期望用得上这些数据。

之前版本的 CRM 解决方案已经报告存在性能问题。当时该 CRM 已经集中化,并应用于世界各地的多个办公室。这些性能问题因地点而异,分布于不同的功能块;而且是由终端客户报告出来的,没有具体的测试或时间可供参考。

相反,之前的 ERP 解决方案是独立安装于各个地区或国家的,目前还没报告有性能问题。但是集中运行这两个应用程序的话,不由得让人担忧其性能,尤其在处理数据输入、扫描和打印等活动时。

可拓展性测试虽然是多用户性能测试的一个关键点,但却算不上该项目的关注点。以市场为导向的标准软件在实施时尽量地减少定制,并在产品环境中配置大小正好的基础设施服务器。

非功能性需求被定义为该项目的一部分,却需要被验证。该组织多年前曾购买过 HP LoadRunner 作为性能测试的首选工具。但由于预算的限制,后来并未在测试工具上做进一步的投资。

综合考虑各方面的限制和需求,该项目将以下这些定义为性能测试的主要目标:

  1. 度量 度量来自不同办公地点的应用程序的性能。
  2. 对比 与非功能需求的性能结果进行对比。
  3. 改进 为潜在的改进提供建议。

该解决方案从单一用户角度出发进行性能测试。对关键业务流程的测试将在数个月内以真实的、自动化的形式在世界各主要地点进行,同时还覆盖了各主要发布周期。现代可视化技术将显著地减少分析及诠释测试结果,还有呈现到项目管理团队的时间。该单一用户性能测试方法相比于“传统的”多用户性能测试有以下众多优点:

  • 不需要类似产品一样的环境,可以使用任一现有测试环境。
  • 其迭代方法允许性能测试脚本随着应用程序的发展而不断成熟,频繁的使用带来了良好的投资回报。与其冒着无法及时交付测试结果的极大风险而在短期内将大量预算花费在聘请众多性能测试脚本编写者上,这些费用大可以用于长期聘请一两位性能测试脚本编写者。
  • 并非所有性能测试脚本都要同时准备好,并运行。
  • 无需工作负载配置文件。
  • 一旦类产品环境可用,自动化脚本可重用于多用户性能测试。
  • 相比于手动测试,由于数据创建是自动的,单一用户性能测试可以在业务流程中使用更多更真实的数据量。

单一用户性能测试解决方案在执行时用到以下工具和方法:

  1. 资源上的限制决定了客户端的执行性能(比如:渲染时间)将不被考虑在内。这将通过在客户机上使用 Profilers 来完成 (谷歌开发者工具),或将功能测试自动化工具结合类似 WireShark 等网络协议分析器。测试最初只专注于包括网络时间在内的服务器响应时间。
  2. 每个办公地点都会有两个用户配有已识别好的台式机,机器上装有 HP 的 Load Generator 软件。来自同一地点的两组测量数据保证了所收集数据的正确率。如果在任何时候两台机器针对相同活动所收集的数据都相差很多,我们就可以认为是本地用户设置出了问题。这不需要额外的硬件投资,也能从真实用户地点收集到响应时间测量值,因此特别真实。在该测试中所用到的脚本也能在多用户性能测试中复用,为性能测量提供统一、可重复的方法。不需要支付其它附加的测试工具许可证费用。
  3. 每个办公地点和数据中心的 HP Load Generator 分别以每 15/1 分钟频率执行性能测试脚本,确保我们不会稀里糊涂地陷入到执行多用户性能测试的陷阱中。其主要目的是将测试系统中的并发降到最低。从数据中心获取的测量数据扮演着“基准值”的角色,换句话说就是所谓的参考点。因此不同办公地点间的响应时间与“基准值”的不同可被假定为终端用户总体响应时间中与地点相关的那一部分,具体包括影响终端用户性能体验的网络延迟、路由、繁琐性及大小等等。“基准值”代表了服务器时间的具体值。根据测试环境的配置,从该测量数据中获取的结论可以用来判断是否存在与测试环境设置相关的问题。总体上的建议是测试环境应只水平地与产品环境版本进行缩放,而 CPU 速度、每个并发用户的内存及硬盘等输入输出速度应当与产品环境相当。这样我们就就可以很容易的假设”基准值”就是服务器的实际性能.
  4. 监测网络延迟(ICMP)和路由(tracert),并将其作为标准 HPLoadRunner 客户端吞吐量的一部分。这三个测量值的组合允许我们评估网络、路由和带宽限制的质量。
  5. 通过使用较低层的 HP LoadRunner Web/HTML 协议,应用程序的繁琐性将自动被记录,其影响也可评估出。而使用类似 Ajax True Client 协议这样较高层的 HP LoadRunner 协议,在检测繁琐度时则需要额外的精力和工具(比如:Wireshark 或 Google 开发者工具集)。

该整体 SUPT 方法可以通过使用其他性能测试或类似 HP Business Availability Centre(HP BAC) 这样的性能监控工具以类似的方法来执行。

为了收集有价值且有效的数据,我们在所有办公地点将所有性能测试脚本执行上一段足够长的时间。每个地点都使用两个 Load Generator 的策略让我们对测试结果更有自信,也帮助我们定位及解决用户在配置上的不同。

“基准值”允许我们在不同环境上执行测试,比如:系统集成、用户验收或预产品等环境,通过对比不同地点的响应时间及相应数据中心的响应时间,我们可以区分出特定性能问题来自应用程序,还是环境或地点。

但要想使之成为可能的先决条件是在数据中心每隔一分钟执行一遍性能测试脚本的循环。而其他所有地点则会每 15 分钟循环一遍(每个地点间交错开 1 分钟的间隔)。目的在于观察服务器和远程地点在执行相同流程时响应时间的不同,而不是让服务器超载。

一旦结果出来,我们要面对的挑战是如何尽快有效地分析这些数据并为以下内容提供信息和分析数据:

  1. 性能最差的地点。
  2. 性能最差的测试脚本(业务流程)。
  3. 针对非功能需求的性能(SLAs)。
  4. 可被网络管理团队定位的路由和网络延迟信息。
  5. 针对如何改进性能所提出的建议。

SUPT 的结果是由每个地点每一个事务响应时间而组成的大数据表。我们选择第 90 百分位作为响应时间的代表值。

圆形可视化

我们所面临的挑战是找到能快速分析这些数据的工具。查看过各种各样可视化工具及技术之后,我遇到了 Mike Bostoks 的“D3”项目,从那找到了圆形可视化及 Circos,从而发现完成这一工作的最佳工具。

Circos 是将数据和信息可视化的软件包。它以圆形布局可视化数据,这使得 Circos 成为研究事务或地点间关系的理想工具,也是展示图表的理想工具。圆形布局除了美观外,还有其它的有利因素。”

有不少工具可让 Circos 更易于使用,Table Viewer tool 就是其中一个,在网上就可以找到。

建议在 Linux 上下载并配置 Circos。第一次分析时,最简单的方式是使用这里的 Table Viewer tool 的在线版本。

性能测试结果需导入到数据表中,其内容应与下图相似。数据表还需符合以下要求:

  • 无重复事务名。对于所有业务流程中相同的业务,推荐使用“S01_xx”作为惯例(比如:S01_Login)。
  • 事务或地点名中无空格。
  • 将地点作为列(“A1”,“A2”等)
  • 将 HP LoadRunner 事务名作为行(“da”,“db”等)。
  • 将第一列重命名为“Label”。
  • 尽量保持名字短小。
  • 将文件分割符选为“Tab”。

单单使用 Table Viewer 默认在线配置就能生成令人惊喜的结果。用于在线生成图形的配置文件可以下载下来与本地安装一起使用。

所得到的结果是类似下图。理解该图像的关键是从 12 点钟开始,然后顺时针查看 HP LoadRunner 响应时间测量值;或者参考事务(小写字母),然后逆时针查看地点(大写字母)。地点所对应的厚度是该地点所有响应时间的总和。同时生成的柱状图对进一步分析也非常有用。仅通过视觉比较,我们一眼就可以看出哪些地点受到低性能的影响,以及相对应的特定流程和步骤。

由于事务的数量可以相当大,该图像在分析事务时信息量可能会有所减少。下一步我们需要过滤掉那些没有问题的响应时间。比如那些响应时间少于最低 SLA(以 5 秒为例)的事务就可以被排除出去。使用 Table Viewer 工具的话,有两种方式可以达到这一目的。其中一种是过滤掉这些事务,但将其保留在总体计算中。

该图像确实突出了性能最差的事务,以及它们在总体业务流程性能上所占的百分比,同时它还为理解潜在的性能改进提供了基础。

要想在更紧凑且缩放的视图中查看相同信息的话,我们还可以将那些通过 SLA 的事务从总体计算中排除。

我们现在可以清楚地识别出“fa”、“ea”、“dz”和“da”事务的性能是最差的,而“A1”、“A2”和“A8”地点的性能最好,“A1”地点则是数据中心。

现在的目标是生成网络延迟和路由的相似视图。第一步我们需要用 LoadGenerator 将 HP LoadRunner Analysis 中的从源到目的地的路由所对应的总网络延迟信息分组(Analysis 工具的一个功能)。然后将这些信息导出到电子表格中。

我们的目的在于验证网络延迟是否在预期的 SLA 范围之内。下图比较了网络延迟测量值和已知的从源到目的地的 SLA 临界值。为了了解是否有已知地点超出 SLA,需要添加主机地点的信息。举个例子:如果 HOST11 位于欧洲,那么 SLA 就通过了,如果位于其它地方,则失败。

点击图片放大

同样每个地点的吞吐量也要与参考点进行对比,与地点的假定可用带宽及用于数据中心的实际带宽进行对比。数据中心地点的测量值将决定达到假定的接近无限带宽的可能最大值(比如:千兆以太网)。

点击图片放大

下一步目标是为网络管理团队获取更多的细节,我们尝试获取更多关于路由和网络延迟的详尽分解信息。该分析的基础是HP LoadRunner 分析工具中的网络段延迟图(Network Segment Delay Graph)。

桑基图

桑基图是有向图,其箭头线的大小代表了流量大小。桑基图被用于各种流程的可视化,不限于能源和材料,是任何“从”源“到”目的地的流程定义(实际或虚拟)。桑基图将我们的注意力带到了流量最大的流程上的同时,也显示了各个流程间的流量比例,指示了“从 - 到”的流动方向。桑基图是以爱尔兰工程师Captain Matthew Henry Phineas Riall Sankey(1853-1925)的名字命名的。( www.e-sankey.com , en.wikipedia.org/wiki/Sankey_diagram, www.sankey-diagrams.com

下图的创建使用了来自 http://www.d3noob.org/ 的桑基图实例和从 HPLoadRunnerAnalysis 工具中提取的网络段延迟数据。

生成该图像的步骤如下:

  • 下载 D3noob 实例文件到目录。
  • 将从 HP LoadRunner Analysis 工具中导出的网络段延迟数据导入到电子表格中,然后将其拷贝到“data”子目录中的“Sankey.xls”。
  • 确保网络延迟无零值,可以将 0 值设置为 0.01 或其它。
  • 确保电子表格中的标题如下所示,并将其保存为“.csv”文件。
  • 刷新本地 URL 就能看到如上图显示的图像。

网络可视化

桑基图用于理解单个网络路径和延迟时特别有效。但当试图显示整个网络时,d3noob 实例的局限性就暴露出来了。而我们的需求是采用一个易于使用的工具将复杂的网络图可视化。可用的工具很多,尤其在社交网络分析这方面,NodeXL 是最适合这一目的的工具。

“NodeXL 是 Microsoft® Excel® 2007、2010 和(可能)2013 免费的开源模板,它使得网络图像探索变得轻松。有了 NodeXL,我们可以在工作表中输入网络边缘列表,然后点击按钮查看图像,所有的内容都呈现在熟悉的 Excel 窗口里。”( http://nodexl.codeplex.com/

我们将所有网络延迟段信息输入到同一工具里,并期望它能帮助我们确定任意特定路由问题。NodeXL 所带来的视图效果还有很多,在这里我们并没有全部采用(像节点图片等)。

性能良好的网络段通过基于标签的“动态过滤器(Dynamic Filter)” 可以简单地过滤掉。这种情况下,该标签是网络延迟的数值表征。我们还未探索的可能性是创建源到目的地网络延迟计算的交互总值。尽管它会是个有趣的功能,但并非是必须的。从之前的分析中,我们已经有了总的源到目的地的测量值。

为了调查正确的路由方向,可以将图像属性从未定向改成定向。

在该实例中,图中间的“diamond”看起来比较可疑。该工具有简单的缩放功能。

上图显示了部分通信从“E”跳转到“J”的两种路径,分别是“HH”和“II”。“II”路由的延迟要比“HH”路由高。该信息可以很容易地传递到网络管理团队,并用于项目内的沟通。我们期望网络团队能调查“diamond”存在的原因,并提供合适的解决方案。

通过上述步骤,我们对应用程序和地点性能的理解不再是个谜团,是时候开始专注关键的性能改进了。想要理解哪个改进是关键的,性能测试结果需要与非功能需求进行对比。这可以使用带有过滤功能的 Circos 或带有图像和表格的 Excel 可视化功能来完成。

下表显示了每个地点响应时间的分析总结。SLA 列值是从表中检索出来的,用来确保 SLA 的简单管理,以防止任何变化。

点击图像放大

该总结图表可以如下蜘蛛网图来显示。

同样的方法也需要应用到网络延迟和吞吐量 SLA 的测量及比较。

现在我们所拥有的关键调查结果包括:

  • 我们知道业务流程中哪些步骤有性能问题。
  • 我们知道哪个地点有性能问题。
  • 我们知道网络延迟和带宽测量值。

下一个步骤我们需要进一步深入获取有性能问题的业务流程详情。之前的步骤允许我们非常有效地走到这一步。

现在我们要做的是回答以下这些问题:

  1. 应用程序是否要下载多个静态对象?如果是,那么这些对象能否缓存到本地,从而避免网络下载?能否降低数量或将对象组合起来?
  2. 应用程序是否繁重,其繁重性是否随着数据处理量的增加而增加?在该示例中,应用程序可以按顺序针对每个事项在服务器中调用一个更新。如果只是手动测试中的 10 个事项则完全没有问题,但如果是在 SUPT 时使用的真实数据量达到 500 至 1000 个事项的话,对性能将会有显著的影响。
  3. 应用程序是否要下载或上传大型对象,比如:文档、图像等?扫描仪的设置会极大地增加扫描文件的大小,却不会显著地提高其质量。检测扫描文件的大小会明显地影响上传和下载时间。另外,带宽也会随之大幅度地增加。

总的说来,该单用户性能测试方法的目的在于通过在全球不同内部地点内对真实数据量的使用,从而让我们对应用程序性能能有个早期的概念。使用适当的现代可视化工具能帮助我们快速地分析与性能相关的数据,并定位性能问题。对上述方法和工具的使用也确保了其结果能在项目中传递的同时,被技术或非技术人员理解。

关于作者

Bernhard Klemm在 IT 行业拥有超过 16 年的工作经验,他曾在不同行业中从事过开发人员、架构师、性能调优专家、项目 / 程序经理、客户经理和测试(项目)经理等职位。可以通过 LinkedIn e-mail 联系到他。

查看英文原文 Shift Left Performance Testing - a Different Approach

2014-09-05 17:263290
用户头像

发布了 39 篇内容, 共 12.2 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

设计电商秒杀系统

好吃不贵

微信抢红包实战案例,已开源

策划Java工程师

Java 程序员 后端

成功从三线小公司跳进大厂涨薪8K,你值得拥有

策划Java工程师

Java 程序员 后端

成功跳槽百度工资从15K涨到28K,面试突击版!

策划Java工程师

Java 程序员 后端

借助AI模型目标检测打标签工具 :Makesense.ai , 解放双手 ! ! !

码农的后花园

人工智能 深度学习 目标检测 yolo YOLOv5

即战力:职场上如鱼得水的一种能力

非著名程序员

个人成长 提升认知 职场成长 8月日更

我凭借这份PDF的复习思路,面试题+笔记+项目实战

策划Java工程师

Java 程序员 后端

避免将 JWT 存储在 localStorage 中

devpoint

Token JWT LocalStorage 8月日更

别再用平板和手机当泡面盖了,将平板和手机同时作为电脑的外接显示屏,效率不只提升一点点 ! ! !

码农的后花园

ipad #windows #Mac 平板 电脑

结合源码讲解:Kafka消费者参数配置(解释、定义、引用、注意事项)

石头哥谈架构

大数据 kafka架构 Kafka参数配置 Kafka技术内幕 分布式消息中间件

【LeetCode】删除有序数组中的重复项Java题解

Albert

算法 LeetCode 8月日更

醍醐灌顶学习RTMP,从总体介绍到各个细节

hanaper

音视频

我们究竟还要学习哪些Java知识?程序员翻身之路

策划Java工程师

Java 程序员 后端

我用2个月的时间破茧成蝶,附赠课程+题库

策划Java工程师

Java 程序员 后端

区块链需要一场革命

CECBC

多核心Linux内核路径优化的不二法门之-slab与伙伴系统

奔着腾讯去

cpu Linux Kenel linuix

架构师实战营 模块十总结

代廉洁

架构实战营

一场“软硬兼施”的数字革新,帮外卖商家和骑手节省时间

脑极体

促进数字经济向更高水平发展

CECBC

Linux内核这么复杂,我该如何学习?

奔着腾讯去

学习 面试 内存 Linux Kenel 进程管理

总结2021年最全180道Java岗面试题,系列篇

策划Java工程师

Java 程序员 后端

渣男已经预订大碗牢饭,“科技渣男”怎么还在疯狂套路?

脑极体

「SQL数据分析系列」14. 视图

数据与智能

sql 数据 视图

TypeScript学习笔记——TS类型/高级用法

前端依依

typescript 学习 程序员 大前端 JavaScrip

一波三折,终于找到src漏洞挖掘的方法了【建议收藏】

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞挖掘

【设计模式】建造者

Andy阿辉

C# 编程 后端 设计模式 8月日更

网络攻防学习笔记 Day93

穿过生命散发芬芳

网络攻防 8月日更

【前端 · 面试 】HTTP 总结(二)—— HTTP 消息

编程三昧

面试 HTTP HTTP协议 8月日更 http消息

业务架构训练营学习总结

好吃不贵

有产品思维和数据意识的解决方案架构师?

escray

学习 极客时间 朱赟的技术管理课 8月日更

怎么对数据指标管理

水滴

指标体系 数据指标 8月日更 指标管理

  • 扫码添加小助手
    领取最新资料包
Shift Left性能测试 – 不一样的测试方法_软件工程_Bernhard Klemm_InfoQ精选文章