【性能测试学习】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.mzph.cn/news/159977.shtml

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

相关文章

win10 eclipse安装教程

前言:安装eclipse之前必须安装JDK,JDK是编译环境,eclipse是集成开发平台。 一、JDK的安装 Java Development Kit 简称 JDK (一). 官方下载地址: Java Archive Downloads - Java SE 8u211 and later (oracle.com) 找到&#xf…

关于的Java线程池,简解

Java线程池是一种常见的多线程编程技术,它可以在执行任务时复用已创建的多个线程,并且可以控制同时运行的线程数以避免资源占用过多的问题。 线程池可以用于处理需要频繁创建并执行线程的情况,例如在需要执行大量短期异步任务的环境中。通过使…

2020年计网408

第33题 下图描述的协议要素是( )。I. 语法 II. 语义 III. 时序 A. 仅 I B. 仅 II C. 仅 III D. I、II 和 III 本题考察网络协议三要素的相关知识。 网络协议的三要素分别是语法、语义、同步(时序)。语法:定义收发双…

10月起个税系统升级,3个月个税零申报将收到提示

近日,自然人电子税务局扣缴端升级了,升级后对于工资薪金收入连续三个月为零的纳税人,系统会自动出现以下提示。这个提示主要为了避免企业长期对已经离职的员工进行零申报,导致数据不准确和资源浪费。HR在申报个税时,一…

OSG文字-渐变文字(4)

渐变文字(osgText::FadeText类)继承自osgText::Text类继承关系图如图9-6所示 图9-6 osgText::FadeText的继承关系图 从继承关系图中可以看出,它继承自osgText::Text类,因此,它具备一般文字属性的设置方法这里不再重复说明。创建渐变文字与一般…

PHP 安装

您需要做什么? 为了开始使用 PHP,您可以: 找一个支持 PHP 和 MySQL 的 Web 主机在您自己的 PC 机上安装 Web 服务器,然后安装 PHP 和 MySQL 使用支持 PHP 的 Web 主机 如果您的服务器支持 PHP,那么您不需要做任何事情…

​软考-高级-系统架构设计师教程(清华第2版)【第14章 云原生架构设计理论与实践(P496~526)-思维导图】​

软考-高级-系统架构设计师教程(清华第2版)【第14章 云原生架构设计理论与实践(P496~526)-思维导图】 课本里章节里所有蓝色字体的思维导图

Java排序实战:如何高效实现电商产品排序

在当今的数字化时代,电子商务已成为人们日常生活的重要组成部分。消费者可以在电商平台上浏览和购买来自全球的商品,这无疑为我们的生活带来了极大的便利。然而,随着电商平台的规模不断扩大,商品数量的急剧增加,如何对…

[点云分割] 区域增长分割

效果&#xff1a; 原始数据 分割结果 代码&#xff1a; #include <iostream> #include <vector> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> // 各种点云数据类型 #include <pcl/search/search.h> #include <pcl/search/kdtr…

Vue3 官推的状态管理 Pinia

Vue3 官推的状态管理 Pinia 一、Pinia是什么&#xff1f;二、Pinia的特点三、Pinia的使用1.npm install pinia -s2.创建pinia实例3.注册到App实例上4.模块化管理5.组件中使用6.路由中使用1.创建全局路由守卫2.全局守卫中使用全局状态 四、修改数据 $patch五、重置数据 $reset六…

《C++ Primer》第9章 顺序容器(一)

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 C 中的容器可以分为 3 类&#xff1a;顺序容器、关联容器、无序关联容器。 9.1 顺序容器概述&#xff08;P292&#xff09; 所有顺序容器都提供了快速顺序访问的能力&#xff0c;但在以下方面的性能有所不…

【考研】数据结构(更新到双链表)

声明&#xff1a;所有代码都可以运行&#xff0c;可以直接粘贴运行&#xff08;只有库函数没有声明&#xff09; 线性表的定义和基本操作 基本操作 定义 静态&#xff1a; #include<stdio.h> #include<stdlib.h>#define MaxSize 10//静态 typedef struct{int d…

Semaphore使用acquire和tryAcquire方法案例

Semaphore(信号量)可以用来控制同时访问特定资源的线程数量 acquire()方法&#xff1a; 当使用acquire()方法时&#xff0c;如果没有或许到许可证就会被堵塞&#xff0c;直至获得了许可证。 tryAcquire()方法&#xff1a; 当使用tryAcquire()方法时&#xff0c;如果没有获取…

Redis入门指南学习笔记(3):Redis高级特性

一.前言 上一篇博客对Redis常用的数据结构进行了详细介绍。Redis除了丰富的数据类型支持&#xff0c;还包含许多高级特性&#xff0c;例如事务、内存驻留策略、排序、消息队列等&#xff0c;本文将对这些进行逐一介绍。 二.事务 Redis同样包含事务&#xff08;transaction&a…

Vue2系列 — 渲染函数 (render + createElement)

官网文档&#xff1a;https://v2.cn.vuejs.org/v2/guide/render-function.html 1 render 函数 render 函数 不使用模板&#xff0c;使用 js 生成虚拟 dom 2 createElement() 接受的参数&#xff1a; 参数1 节点类型参数2 attribute参数3 子节点 3 DEMO <template>&…

git 泄露

得到flag有两种方法&#xff1a; 1、版本比对&#xff1a;git diff 用法&#xff1a;git diff <分支名1> <分支名2> 2、版本回退&#xff1a;git reset 用法&#xff1a;git reset --hard <分支名> python2 GitHack.py http://www.example.com/.git/ g…

AppLink结合金蝶云星空作订单信息同步流程

此次通过AppLink&#xff0c;根据请求数据金蝶云星空做销售订单信息同步拉取 在获取订单信息前需要得到金蝶云星空授权&#xff0c;详细授权步骤可查看&#xff1a;金蝶云星空授权指南 根据请求数据在金蝶云星空保存销售订单 当webhook接收到数据时触发流程 步骤1&#xff…

【数据库】数据库中的备份与恢复,保障容灾时的数据一致性与完整性

数据库的备份机制 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会定期…

oracle数据库常见巡检脚本-系列一

简介 作为数据库管理员&#xff08;DBA&#xff09;&#xff0c;定期进行数据库的日常巡检是非常重要的。以下是一些原因&#xff1a; 保证系统的稳定性&#xff1a;通过定期巡检&#xff0c;DBA可以发现并及时解决可能导致系统不稳定的问题&#xff0c;如性能瓶颈、资源利用率…

MATLAB对比两txt文件内容是否一致

实现功能 对比两txt每行的内容是否一致&#xff0c;若一致则输出’完全一致’&#xff0c;不一致则输出’第 %d 行不一致’;若行数不等则输出’文件1比文件2少/多%d行’ MATLAB代码 注意修改代码中txt文件名 clear all;close all;clc; %清理工作区&#xff0c;关闭所有窗口…