性能测试中的场景设计和测试执行

假设一个内部系统要求响应时间在 3s 以内,支持最大用户数为4万。根据二八原则,80%用户在20%时间使用系统(4w80%)/(24h20%)≈1.9点击/秒。并发数=TPS(运行时间+思考时间)=1.9(3+0.5+0.3+3+0.5+0.3+0.5+3)=21。

注意:二八原则计算的结果并非是并发数,而是系统要达到的处理能力(吞吐量),初学者容易被误导,拿着这个数据就去设置并发数,这是错误的哦。如果你的系统性能要求更高,也可以选择一九原则或更严格的算法,二八原则比较通用,一般系统性能比较接近这个算法而已,大家应该活用。

基于以上,如果我们通过测试得到的最大吞吐量大于计算出来的吞吐量(TPS≈1.9),且各项性能指标均达标,那么系统就是安全的。如果用户发帖遵循正态分布,那么并发请求数峰值还肯定会大于上述估算的吞吐量(并发数大于吞吐量)

01场景设计

场景编号:001 - 基准测试

目的:验证测试环境、验证脚本,得到系统的性能基准,为后续测试提供参考。

场景编号:002 - 配置测试

目的:优化配置,测试当前软、硬件配置是否能够满足性能指标。

场景编号:003 - 负载测试

目的:分析性能变化趋势,找出性能瓶颈与风险,对系统进行定容定量。

场景编号:004 - 稳定性测试

目的:长时间(>8小时)运行大量负载,确定系统软硬件环境是否运行稳定。

02场景实现

1、单线程组实现测试场景

假设业务比例为 “查看详情(8):登录(6):新建任务(4):(配置任务)2:(删除任务)1”。差不多每3个登录会有4个查看任务,新建2个任务,配置1个任务;每6个登录,删除1个任务。

我们使用 If逻辑控制器 + ${__counter(arg1, arg2)}函数来实现。

  • 新建任务的If控制器条件:登录(3)/新建(2)
    ${__counter(true,i)}%2==1||${__counter(true,i)}%3==0
  • 配置任务的If控制器条件:登录(3)/配置(1)
    ${__counter(true,i)}%3==0
  • 删除任务的If控制器条件:登录(6)/删除(1)
    ${__counter(true,i)}%6==0
  • 查看任务:因为配置和删除操作包含查看的业务,所以单独的登录/查看比为6:(8-2-1),即6:5。
    ${__counter(true,i)}%5!=0||${__counter(true,i)}%6==0

2、多线程组实现测试场景

多线程组的场景设计需要注意的是业务关联关系。比如查看任务可以不需要登录的;新建、配置、删除任务都需要登录且并发数的和大于登录,说明有些场景是登录后执行了多业务的;查看详情的并发数小于登录,所以有部分用户可能是登陆后只查看了详情。

按照 “查看详情(8):登录(6):新建任务(4):(配置任务)2:(删除任务)1” 的比例,以及用户实际使用场景来算,得到如下场景:

  • 登录(2)-新建任务(2)
  • 登录(2)-新建任务(2)-配置任务(2)-查看详情(2)
  • 登录(1)-查看详情(1)-删除任务(1)
  • 登录(1)-查看详情(1)
  • 查看详情(4)

两种脚本实现方式的对比:

03测试执行

场景编号:001 - 基准测试

基准测试采用单用户、单业务场景的执行方式。测试时间尽可能长,尽量执行多次(通常建议3次以上),取相对稳定的结果,目的是统计响应时间的取样更多,测试结果越准确。对于发现的异常,如果不熟悉就请开发团队告诉你有哪些作业任务,这些作业任务的频度是否适中。

基准测试_聚合报告

基准测试_ResponseTime

基准测试_TPS

结论:

满足性能需求3s以内,事务正确率100%,且CPU、内存、磁盘表现正常(局域网不考虑网络影响)。测试环境检查通过,脚本检查通过,可以考虑对系统进一步的测试。

场景编号:002 - 配置测试

先确定配置测试的目标:

  • JVM配置
  • Tomcat线程池配置
  • 数据库连接池配置
  • 数据库的一些配置

配置测试场景一般为混合场景(多个业务同时执行)

  • JVM Heap大小及不同代的大小指定?Heap回收算法的选择?(P316)
  • Tomcat线程数配置?
  • 数据库缓存、临时表空间,大表水平切分,主从结构、读写分离、主从备份、主主备份等?

配置测试_聚合报告

配置测试_ResponseTime

配置测试_TPS

结论:

随着并发数的增加,响应时间也逐渐增加,但仍然满足3s以内的性能指标;事务正确率100%;查看详情、登录、新建任务、配置任务、删除任务各业务之比接近6:8:4:2:1;TPS未出现明显拐点;CPU、内存、磁盘均正常。性能表现能够满足需求,系统性能瓶颈风险在CPU。

场景编号:003 - 负载测试

负载测试在满足系统性能指标的基础上进行测试,寻找性能的拐点。负载测试分为单场景与混合场景。

  • 单场景有利于分析性能问题,因为排除了其他业务干扰;
  • 混合场景更贴近用户实际使用习惯,是一个综合的性能评估。

建议先做单场景测试,再做混合场景测试

我们一般采用二分法,如总的线程数递增为21/42/84,当发现线程增大后性能降低,再对该区间进行二分尝试,最后对拐点附近精细尝试得到最大吞吐量

负载测试_聚合报告

负载测试_ResponseTime

负载测试_TPS

负载测试_CPU

结论:

执行过程中,CPU首先出现性能瓶颈,利用率接近100%。响应时间开始大于3s,TPS降低,出现失败的事务。此时的内存、磁盘、网络均表现正常。此时应优先解决CPU的瓶颈问题,再反复进行负载测试,直到在没有硬件瓶颈的条件下找到系统的性能拐点。

场景编号:004 - 稳定性测试

稳定性测试在正常性能阀值下尽量加大负载。什么是阀值呢?

比如响应时间要求3s以内,3秒就是阀值;比如CPU利用率70%以下,70%就是阀值。假设满足性能要求的负载是B,那么稳定性测试时负载一般是1.5B~2B。

在此案例中我们满足性能需求的并发量是21,那么在做稳定性测试时,并发量应该是1.521~221即32~42之间。运行时间原则上越长越好,惯例要求不低于8小时。有些隐藏较深的诸如内存溢出的问题是需要长时间运行才能反映出来的。如果各项性能指标都在阀值内,且性能表现平稳,则可以认为通过稳定性测试。

除了分析响应时间、TPS和服务器硬件性能外,我们也要关注JVM内存回收情况,MySQL有无慢查询等。

原文链接:百度安全验证

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

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

相关文章

Flutter循序渐进==>数据结构(列表、映射和集合)和错误处理

导言 填鸭似的教育确实不行,我高中时学过集合,不知道有什么用,毫无兴趣,等到我学了一门编程语言后,才发现集合真的很有用;可以去重,可以看你有我没有的,可以看我有你没有的&#xf…

毫米波雷达深度学习技术-1.7训练一个神经网络

1.7 训练一个神经网络 对于训练神经网络,有两个步骤,即前向传递和误差反向传播。 1.7.1 前向传播和反向传播 在前向传递中,输入被馈送到模型并与权重向量相乘,并为每一层添加偏差以计算模型的输出。密集层或全连接层第l层的输入、…

SQL面试题练习 —— 查询前2大和前2小用户并有序拼接

目录 1 题目2 建表语句3 题解 1 题目 有用户账户表,包含年份,用户id和值,请按照年份分组,取出值前两小和前两大对应的用户id,需要保持值最小和最大的用户id排首位。 样例数据 ------------------------- | year | user_id | v…

网络基础-RIP协议

RIP(Routing Information Protocol)是一个基于距离矢量的动态路由协议,常用于小型到中型网络。RIP是较早的路由协议之一,具有简单易用的特点。以下是关于RIP协议的详细介绍: RIP的主要特点 ①使用跳数(ho…

非标设备行业的数智化项目管理

近年来,中国制造快速发展,企业迫切需要加快转型升级。与传统制造业相比,高端制造业具有明显的优势:高技术、高附加值、低污染、低排放、竞争优势强。一方面,企业对于生产效率和自动化水平的要求不断提高,期…

开发个人OpenUI--1 项目介绍

开发个人OpenUI--1 项目介绍 开发个人OpenUI--1 项目介绍知识点大纲文章目录项目地址 开发个人OpenUI–1 项目介绍 本文将以一个使用Ollama部署的ChatGPT为背景,主要还是介绍和学习使用 go-zero 框架,开发个人OpenUI的服务器后端,使用Docker…

武汉星起航:成功挂牌上股交,领航亚马逊跨境电商,共创未来辉煌

在全球电商的竞争格局中,亚马逊凭借其卓越的服务、丰富的商品种类和高效的物流体系,始终稳坐全球电商市场的头把交椅。而在这股不可阻挡的电商浪潮中,武汉星起航电子商务有限公司凭借其前瞻性的战略布局和强大的运营能力,成功在20…

名企面试必问30题(十二)——简单介绍一下你的家庭情况

1.思路 对于面试官来说,他提出这个问题,只是为了深挖您的性格、稳定性、行事风格,包括未来定居规划、生育规划等基础信息,这是正常情况。您不要过多围绕其他家庭成员来讲,否则面试官无法获取他想要的,您也难…

【单片机毕业设计选题24040】-基于STM32的蓝牙防丢器设计

系统功能: 系统上电后显示“欢迎使用蓝牙防丢系统请稍后”两秒钟显示正常界面,如果蓝牙正常连接OLED显示Connected, 蓝牙未连接则显示DisConnected同时蜂鸣器报警 蓝牙正常连接后在APP上每隔三秒显示一个Connected 系统功能框图: 主要功能模块原理图: 电源时钟…

大数据之Zookeeper部署

文章目录 集群规划环境准备集群部署参考资料 集群规划 确定使用Hadoop101、hadoop102和hadoop103三台服务器来构建Zookeeper集群。 hadoop101hadoop102hadoop103zookeeperzookeeperzookeeper 环境准备 安装zookeeper前需要确保下面的环境配置成功,具体可以参考大…

AI智能剪辑发展到哪种地步?来看看云微客就知道了!

不是短视频团队招不起,而是矩阵账号更有性价比。企业做短视频有反思过为什么干不过同行吗?我们来看看大佬是怎么做的。云微客AI智能剪辑系统用几百个账号做矩阵布局,系统每天自动进行批量剪视频、写文案、一键自动化发布视频,一个…

[漏洞复现] MetInfo5.0.4文件包含漏洞

[漏洞复现] MetInfo5.0.4文件包含漏洞 MetInfo5.0.4 漏洞代码审计 漏洞出现在about/index.php中,因为利用了动态地址,所以存在漏洞。 漏洞检查语句(!192.168.109.100是我的服务器ip,需要换成自己的)&…

华为仓颉语言体验:一个简单的socket服务端实现

前言 由于仓颉目前是内测状态, 不能展示仓颉的详细信息,但是华为仓颉官网的公共文档的内容是可以公开的。 我相信有不少喜欢编程的朋友都申请了内测,但是一些编程初学者应该和我一样,处于摸索阶段。所以,我这里把我测…

排序题目:多数元素 II

文章目录 题目标题和出处难度题目描述要求示例数据范围进阶 前言解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 解法三思路和算法代码复杂度分析 题目 标题和出处 标题:多数元素 II 出处:229. 多数元素 II 难度 3 级 题目描述 …

css高度0到高度auto,过渡的设置

1.css从高度0到高度auto,过渡设置 方法(vue代码) 你可以通过设置transform: scale(0);到 transform: scale(1); 来实现,具体代码 你也可以通过设置transform: scaleY(0);到 transform: scaleY(1); 这两种展示的效果不一样,你可以看看你喜欢那种 // css代码// 原来的css类 .s…

港口危险货物安全管理人员考试题库(含答案)

一、单选题 1.化学品安全标签内容中警示词有( )种分别进行危害程度的警示。 A、3 B、4 C、5 参考答案:A 2.运输放射性物品,应当使用( )的放射性物品运输包装容器(以下简称运输容器)。 A、专业 B、专用 C、统一 D、定制 参考答案:B 3.库区仪表及计算机监控管理系…

中电金信:金Gien乐道 | 6月热门新闻盘点 回顾这一月的焦点事件

“以检之力 e企守护”——上海市检一分院与中电金信开展联学联建 6月24日,上海市人民检察院第一分院与中电金信数字科技集团股份有限公司联合开展“以检之力 e企守护”联学联建活动。双方共同参观了全国检察机关证券期货犯罪办案基地和重大职务犯罪案件办理&#xf…

HTML5与3D打印:探索网页内容的物理化可能

随着科技的飞速发展,互联网与物理世界的交汇点日益增多。HTML5作为当前网页开发的主流标准,不仅推动了网页内容的丰富性和互动性,还在与3D打印技术的结合中,展现出了将网页内容物理化的巨大潜力。本文将探讨HTML5与3D打印的结合点…

C++ 中的数据类型

C规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存. 1 整型 作用:整型变量表示的是整数类型的数据 C中能够表示整型的类型有以下几种方式,区别在于所占内存空间不同: 数据类型占用…

python(6)numpy的使用详细讲解

在numpy中,最基本的数据结构是数组,因此我们首先需要了解如何创建一个数组。numpy提供了多种数组创建方法,包括从列表或元组创建、从文件中读取数据、使用特定函数创建等。下面是一些常用的创建方法: 一、创建数组 1. 从列表或元…