【性能测试学习】2023最有效的7大性能测试技术(建议收藏)

进入互联网时代,性能测试显得越来越重要,移动应用、web应用和物联网应用都需要进行性能测试和性能调优,而进行性能和负载测试会产生了大量的数据,这些数据难以分析。除了数据分析,我们还会遇到其它一些困难和挑战。

今天我们就介绍七大高效的性能工程(测试)技术帮助你应对挑战,能进行有效的数据分析,高效地完成性能测试和性能调优。

1. 识别基于层的工程事务

在典型的性能测试工具中,加载脚本会包含事务处理或有序的API调用,以完成业务工作流。例如,我们正在为一个物联网应用程序创建一个性能管理工具,这个脚本将包含代表一个设备的事务处理逻辑或行为。

 工程脚本包含针对部署的特定层(如网络层、应用层、消息层、数据库层等)的单个事务处理。通过发现工程事务处理的退化,我们可以隔离需要集中精力的部署层。为此,我们需要确定哪些事务到达哪些层。如果在这方面有困难,就不得不向开发或基础架构支持团队寻求帮助。

(图1)

每个部署都是独一无二的,但这里我们可能会遇到的一些和层次相关的问题:

  • Web层:获取静态非缓存文件的事务。

  • 应用程序层:执行一个方法并创建对象的事务,但就停留在这里,没有去访问数据库层。

  • 数据库层:需要从数据库查询的事务。

让每个工程事务都有自己的脚本,这样我们就可以分别绘制出每个工程事务的命中率(TPS)和响应时间值。在每个工程事务之前使用一个恒定的思考时间(例如15秒)来间隔执行时间,并创建一个一致的采样率。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

 

2. 监控KPI

前端KPI(关键性能指标)通过关联用户负载、TPS、响应时间和错误率来显示当前的容量。被监视的KPI可以完整地说明为什么应用程序在某个工作负载级别上开始降级。命中率和空闲资源是每个硬件或软件服务器的两个具有启发性的KPI。

图2

命中率将随着工作负载的变化而变化。在递增负载测试中,随着工作负载的增加,命中率也随之增加。以下是可以监控的命中率示例:

  • 操作系统:TCP连接速率

  • Web服务器:每秒请求数

  • 消息传递:入队(Enqueue)和出队(dequeue)统计

  • 数据库:每秒查询数

请记住,每个部署都是唯一的,因此需要确定每个服务器的良好命中率是多少,然后连接上所需的监视。

一般我们倾向于监视空闲资源KPI,因为与使用的资源不同,空闲资源的趋势与工作负载相反。正因为如此,可以很容易地在图上识别瓶颈(但如果免费资源不算在内,就得使用已使用的资源)。无论目标是哪个资源,如果它有排队策略,请确保添加一个排队计数器来显示正在等待的请求。

以下是可以监控的免费资源:

  • 操作系统:CPU平均空闲

  • Web服务器:等待请求

  • 应用服务器:空闲的工作线程

  • 消息传递:进入/退出队列等待时间

  • 数据库:线程池中的空闲连接

要确定相关的监控KPI或将它们连接起来,首先要研究部署的架构图。接收或转换数据的每一个接触点都是潜在的瓶颈,因此是监视的候选对象。所监视的KPI越相关,性能描述就越清晰。

开始启动工程脚本进行性能测试,完成业务工作流的负载测试。先设置一个缓慢增长的测试(例如,每15秒增加一个用户,最多增加200个虚拟用户)。测试完成后,将所有监控的KPI绘制成图表,并确保它们与测试报告的TPS/工作负载之间存在直接或反向关系。要有耐心,把一切都画出来。从这个测试中收集的信息,在识别性能瓶颈上非常有价值。

(图3)

另外,设置监视间隔以收集每个持续负载的三个值。在本例中,因为每15秒添加一个用户,所以希望每5秒获得负载测试工具示例,因为三个值将作为一个平台图,而一个单一的值将作为一个峰值图,三个值才能形成趋势。 

也许不是所有的资源都将在架构图的审查期间被捕获,所以启动一个快速增长的负载测试,来发现一些新的资源或新的KPI。这只是一个探测,看看哪些进程和操作系统活动会启动。如果注意到一个外部过程,就可以作为一个KPI候选对象添加到脚本中。

3.减少要分析的事务的数量

进入了分析阶段,我们需要显著减少绘制并用于分析的事务数量。试图分析数百个带标记的业务事务是没有效率的。所有这些业务事务都使用部署的共享资源,因此只需选择其中一些事务,就可以避免分析瘫痪。至于选择哪些事务,完全取决于应用程序的特性。 

例如面向单用户负载测试的结果,选择访问页面、登录、响应时间最长的业务事务和响应时间最短的事务。

还要包括并绘制所有工程事务。工程事务的数量取决于部署中有多少层:5层等于5个工程事务。

(图4)

现在,不是分析在模拟实际负载的负载测试中执行的所有事务,而是只绘制一个子集,响应时间的图表将不会那么混乱,也更容易分析。但创建性能报告时,需要包括所有业务事务的响应时间。

使用分析技能来查看哪个工程事务首先开始降级。命中率和响应时间都将揭示需要集中精力的地方。

4. 确保可重复的结果

对于每个测试场景,运行相同的负载测试三次直到完成。对于这三种测试执行,不要调整或更改性能测试工具中的任何内容:不要修改运行时设置、不要修改测试脚本、不要修改测试的持续时间、不要修改负载模式,更不要修改性能测试环境。只允许数据重置或服务器回收,并且只允许在测试运行之间将环境恢复到基线。

每个测试场景运行三次,并进行初步分析,以在同一时间验证结果或TPS平台。

5. 增加负荷 

增加负载,就是创建并发用户负载场景。先创建一个缓慢增长的阶梯场景,它允许为每个负载集捕获三个被监视的KPI值。换句话说,在添加下一组用户之前,配置缓慢的用户斜坡以维持一个持续时间。例如,如果您每次增加10或100个用户,并每隔5秒收集KPI,那么在增加到下一个负载之前,每个负载集至少运行15秒。是的,这延长了测试(通过减缓斜坡),但结果更容易解释。不能持续的KPI指标并不是一种趋势。 

当性能测试时,遵循“一半-两倍”定律会极大地简化性能工程方法。从实现一半的目标负载开始,如果应用程序能加载到一半负载,然后可以把它翻倍到目标负载。如果不能加载到一半负载,则再次将负载减少一半。如果有必要,可以反复这样做。继续减少一半,直到得到一个可扩展的测试,即使只有10个用户,而虽然目标是10,000!

6. 利用可视化来发现异常

如果知道一个完全可伸缩的应用程序是什么样子的,我们就可以迅速发现异常。因此,研究一下架构图,看看在一个完全可伸缩的应用程序中应该发生什么,并将其与测试结果进行比较。

  •  会发生什么?

  • 什么会发生,什么不会发生?

这些问题的答案会告诉我们应该把注意力集中在哪里。例如,随着用户负载的增加,应该看到web每秒请求数、应用服务器的活动会话、数据库连接数、CPU使用率等都相应增加。通过使用可视化的强大功能,可以大幅减少调查时间,因为您以快速发现不代表可伸缩应用程序的条件。

 粒度对于KPI监视和可视化分析都至关重要。通常,如果一个测试运行很长时间,加载工具在绘制结果图表时将使用更细粒度的间隔。拥有更多的KPI数据点,使分析更容易,但清晰的图表也可能会扭曲了测试结果

7. 寻找KPI趋势和停滞期,以确定瓶颈

当资源被重用或释放时(就像JVM垃圾收集或线程池一样),KPI值会有起伏。把注意力集中在数值变化的趋势上,而不是绝对的偏差上。用我们的分析眼光来判断趋势,

确定第一个出现的瓶颈的可靠技术是用图表表示前端KPI的最小响应时间。使用粒度来分析和识别从其底部出现的第一次突变。最小响应时间内的提升不会有明显变化,而一旦资源饱和,就会突破最小响应时间,所以第一次突变这点会比较精确。随着部署接近第一次出现的瓶颈,TPS或每秒命中数将趋于稳定,响应时间将立即降低或增加,错误率是级联症状。命中率中第一个出现的平稳期表明吞吐量有限制,所以我们等工作只是在监视的命中率KPI中识别它出现的第一个图形平台,这也是为什么主张为每个持续负载收集三个监视指标。一个数据点值只能给出一个峰值,但三个数据点可以呈现一个平稳区间,而这很关键,帮我们发现系统受到限制,要么是软件限制,要么是硬件限制,但绝大多数瓶颈都是软件限制,任何硬件都无法解决这一问题。

通过调优可以提高可伸缩性,通过优化来提高吞吐量,进一步减轻了软件限制,允许应用程序在云部署中有效地向上和向外扩展,可以为公司节省大量的运营费用。所以建议对峰值负载条件进行负载测试,然后注意哪些资源已被分配来适应工作负载。然后将这些资源投入到部署中去。只在超出预期峰值负载的情况下使用弹性云。

记住,隔离第一个出现的KPI是很重要的。不要停留在偶然发现的第一个平台期,然后宣布胜利,因为这可能是一种症状,而不是根本原因。过早的下结论将使我们在配置更改和重新测试方面浪费数小时的时间,结果却发现性能退化同时发生,这意味着负载遇到了相同的瓶颈。

注意:如果有两个或更多的KPI看起来像竞争条件,通常可以通过覆盖KPI图表来获得更清晰的可视化,从而看到哪个平台期首先出现。如果这不起作用,那么设计一个新的负载测试,在加载接近相同的峰值容量负载时减缓加载速度。慢慢地向下移动以收集更多的数据点,这将使结果更清楚。

END今天的分享就到此结束了,点赞关注不迷路!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/206106.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新手做抖店,这6点建议一定要收好,能让你不亏钱!

我是电商珠珠 我呢,目前身居郑州。 电商这个行业也做了5年多了,抖店从20年开始做,到现在也已经快3年了。 其实,我做抖店期间呢,踩过很多坑,所以今天就把我所踩过的坑,给做抖店的新手总结了6点…

PCB抄板的一些方法

PCB抄板的技术实现过程简单来说,就是先将要抄板的电路板进行扫描,记录详细的元器件位置,然后将元器件拆下来做成物料清单(BOM)并安排物料采购,空板则扫描成图片经抄板软件处理还原成pcb板图文件&#xff0c…

C语言中的多线程调用

功能 开启一个线程&#xff0c;不断打印传进去的参数&#xff0c;并且每次打印后自增1 代码 #include<windows.h> #include<pthread.h> #include<stdio.h>void* print(void *a) {int *ic(int*)a;float *fc(float*)(asizeof(int)*2);double *dc(double*)(as…

解析IBM SPSS Statistics 26 forMac/win中文版:全面统计分析解决方案

作为一款强大的统计分析软件&#xff0c;IBM SPSS Statistics 26&#xff08;spss统计软件&#xff09;在全球范围内被广泛使用。无论是学术研究、市场调研还是商业决策&#xff0c;SPSS统计软件都能提供全面的解决方案&#xff0c;帮助用户快速、准确地分析数据。 首先&#…

内容输入.type

内容输入.type 查看完整说明 语法 .type(text) .type(text, options)正确用法 cy.get(input).type(Hello, World) // Type Hello, World into the input错误用法 cy.type(Welcome) // Errors, cannot be chained off cy cy.clock().type(www.cypress.io) // Errors, clock…

Positive证书:最便宜的SSL证书

在当今数字化的时代&#xff0c;网上交易和信息传输已经成为我们生活中不可或缺的一部分。然而&#xff0c;随着网络犯罪的增加&#xff0c;确保在线信息的安全性变得尤为重要。Positive证书作为一种经济实惠的数字证书&#xff0c;在提供有效安全性的同时&#xff0c;为用户提…

Android修行手册-POI操作Excel文档

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

ubuntu上查看各个进程的实时CPUMEM占用的办法

top常见参数top界面分析system monitorhtop1、查看htop的使用说明2、显示树状结构3、htop使用好文推荐top top的用法应该是最为普遍的 常见参数 -d 更新频率,top显示的界面几秒钟更新一次 -n 更新的次数,top显示的界面更新多少次之后就自动结束了 当然也可以将top日志通过…

[点云分割] 欧式距离分割

效果&#xff1a; 代码&#xff1a; #include <iostream> #include <chrono>#include <pcl/ModelCoefficients.h> // 模型系数的定义 #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> // 各种点云数据类型 #include <pcl/sample_c…

Mac | Vmware Fusion | 分辨率自动还原问题解决

1. 问题 Mac的Vmware Fusion在使用Windows10虚拟机时&#xff0c;默认显示器配置如下&#xff1a; 开机进入系统并变更默认分辨率后&#xff0c;只要被 ⌘Tab 切换分辨率就会还原到默认&#xff0c;非常影响体验。 2. 解决方式 调整 设置 -> 显示器 -> 虚拟机分辨率…

帝国cms开发一个泛知识类的小程序的历程记录

#帝国cms小程序# 要开发一个泛知识类的小程序&#xff0c;要解决以下几个问题。 1。知识内容的分类。 2。知识内容的内容展示。 3。知识内容的价格设置。 4。用户体系&#xff0c;为简化用户的操作&#xff0c;在用户进行下载的时候&#xff0c;请用户输入手机号&#xff…

Vellum —— 简介

目录 一&#xff0c;介绍 二&#xff0c;原理 三&#xff0c;PBD算法 手动实现PBD的拉伸 一&#xff0c;介绍 Vellum是一个解算模拟框架&#xff0c;使用更高级的PBD&#xff08;XPBD&#xff0c;extended position based dynamics&#xff09;&#xff0c;是2nd Order Int…