性能测试怎么做?性能测试指标,常用性能测试工具

news/2024/4/23 23:54:38/文章来源:https://blog.csdn.net/Ces222/article/details/127246795

前言

性能测试用户概念
系统用户数:指所有可能访问这套系统的用户数,也叫系统的全部用户数。
在线用户数:指同时访问这套系统的用户数量。
并发用户数:在一个时间切面上同时向这套系统发起请求的用户数。

糟糕性能
系统设计阶段缺少性能方面的考虑(考虑整体系统集成后的性能);
直到最后一刻才进行性能测试(性能测试越早越好);
对系统的容量或规模没有足够的考虑(最终用户的规模和分布);
对性能峰值预期偏低;
性能测试还不规范,没有有效的方案参考或实施;
没有使用性能测试自动化工具。

一、性能测试

稳定的并发能力

为什么是稳定的并发能力非常重要呢?

我们在实际性能测试当中往往并不是按照教科书上面写到的“单交易基准测试 -> 单交易负载 -> 混合交易基准 -> 混合交易负载 -> 稳定性测试 ” 这个套路来进行的,实际测试当中往往需要进行对比测试。比如说我应用程序换版前后对比,或者更换操作系统版本前后对比,或者一个数据库参数调节前调节后有一个对比。

对比测试当中的一个最重要的原则就是一次只调一个参数来对比前后的情况, 如果我要调两个或者多个参数的话,如果发现前后性能差距很大,我很难判断是哪个参数导致的影响。因此,性能测试每次尽量只调一个参数,这个参数是什么呢?

这个参数就是应用程序的版本、操作系统的版本、数据库参数等等。并且前后对比的时候,要尽量保持其他要素不变。然而,其他性能指标不变是不可能的,那么就要控制住可控参数,观察不可控参数的变化。

业务吞吐量跟 CPU 利用率是最重要的参数之二,他们之间又有着直接的关系,对于大部分的交易系统来说,我的吞吐量上去的话, CPU 利用率也会随之上升,而 CPU 升高的话,吞吐量一般也会比较高。

我们的策略是对比两个场景在 CPU 利用率相同的情况下吞吐量的差异呢?还是对比吞吐量相同的情况下 CPU 利用率的差异呢?

这种情况下,我们的策略必须是对比吞吐量相同的情况下 CPU 利用率的差异,因为吞吐量我们是可以控制的,而 CPU 我们是不能控制的 。使用工具发出来 100TPS 就是 100TPS , 200TPS 就是 200TPS 。而 CPU 是操作系统和 CPU 共同控制的,它不在我们的控制能力范围。

通过上面分析我们看出,对比测试的原则下面“稳定”控制吞吐量是非常非常重要的。

二、 性能测试工具

RPT:
这里为什么举 IBM RPT 的例子呢,因为即使是专门做性能测试的人, 也很少听说过 RPT 这个工具,在这里是把它当成一个反面例子来介绍的 。

第一,有 license 的严格限制,而且这个 license 是没办法破解的,你需要把你测试的主控机的磁盘信息发送给 IBM , IBM 根据这个信息返回给你一个 license 序列号,它和你的主控机绑死了,所以你是没办法破解的。

Loadrunner:
是目前商业软件当中最为流行的。为什么会流行呢,首先它的 license 是可以破解的,这就导致用户数量庞大,用户也喜欢用,并且用它发送很高的压力(而 IBM RPT 的 license 和并发数是相关的,花钱少是没法设置高并发的)。

这个原因非常重要,导致了用户和软件之间的正反馈,促使 Loadrunner 不断地改进,最后成为一个流行的工具,反观 RPT 有严格的 license 限制,用户特别少,也没什么反馈,最后恶性循环后在市场上消失了。

JMeter:
JMeter 作为开源领域最火爆的一款性能测试工具,在互联网公司里面用的比较广,现在在金融这种领域的公司也用的比较广。但是吞吐量控制的不是很稳定。

我这里举一个如何做后台性能测试的例子。我要给一个数据库服务器施加查询压力,向这台数据库发送一万次某个查询语句。正常的做法是什么呢?写三个函数:

第一个函数 init :创建数据库的连接,并准备一个 SQL 语句。

第二函数 action :负责给 SQL 语句填入参数,真正的去做查询的动作,反复地去做 1 万遍。

第三函数 end :做一些清理工作,断开与数据库的连接。

这三个函数中,第一个函数跟第三个函数都是只做一遍,中间的 action 函数是迭代了一万遍。

事实上像 Loadrunner 和 JMeter 这样的性能工具也的确是这么实现的,而遗憾的是 RPT 就不是这么实现的。 RPT 怎么实现呢?我的 init 函数、 action 函数、 end 函数对于每一次交易都要执行一遍,如果执行 1 万次查询,这三个函数一共执行了 3 万次,大大降低了单机执行效率。

也就是说, RPT 除了线性扩展能力特别差,即使是在单机上面的性能也是非常差。相同资源的 PC 机资源(比如说 4C4G 的 PC )一秒钟能发 200 笔业务,而 RPT 就只能发 100 笔业务,非常浪费性能测试环境的资源,并且,不仅仅是浪费资源的问题,而且你的测试代理机一旦多起来维护管理工作将成倍增长。

三、总结

当你弱时,把最后的口粮捧出去人家都不稀罕,你要强了呢,打一巴掌给个甜枣,人家觉得那枣是真甜啊!

人生是战场,需要冲次,需要拼搏,处处布满陷井,一不小心就会中埋伏,就会遭遇失败,永无翻身之日,但我们拼搏一定要方向明确,有目标性拼搏,才会成功,幸福才会属于你。

最好的生活方式,是和一群志同道合的人,一起奔跑在理想的路上!回头有一路的故事,低头有坚定的脚步,抬头有清晰的远方。

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

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

相关文章

分享两套企业级进销存管理系统源码

▶▶▶▶1:SpringBoot企业级进销存ERP管理系统源码 00189 本系统采用企业级开发标准,使用SpringBoot架构,数据访问层采用Spring Data Jpa,业务控制层采用SpringMvc,安全框架采用Shiro,实现了完整权限系…

风控模型别只会KS、AUC了,来看看其他衡量模型好坏的一些重要指标吧|含实操

当我们训练好一个机器学习模型之后,必然会对模型的综合性能进行评估,针对分类、回归、聚类等不同类型的算法模型,可以采用相关的评价指标,例如分类模型的Accuracy、KS等;回归模型的MAE、MSE等;聚类模型的SS…

Linux下编写C使用的GDB调试器

目录 1.GDB调试器 2.GDB使用 3.实例程序调试 (1)编写一段C程序 (2)对C程序进行编译 (3)调试阶段 ①启动调试 ②查看文件 ③设置断点 ④查看断点情况 ⑤运行代码 ⑥单步运行 ⑦恢复程序 ⑧查看…

数字孪生建筑工程系统开发案例方案,如何选择数孪平台?

据统计,全国建筑业增长值在 GDP 增长中所占比重连续十年保持在 6. 85%以上,其支柱产业的地位依然保持。但是我国建筑业产值利润率已连续五年下滑,部分原因是其生产方式粗放、信息化水平不高、科技创新能力不足等。因此,在发展数字…

java类加载机制解析

一:类加载流程 public class Math {public static final int initData 666;public static User user new User();public int compute(){int a 1;int b 2;return ab;};public static void main(String[] args){Math math new Math();math.compute();} } 当我们…

Mybatis批量插入数据

前言 在很多业务场景中,我们需要批量录入数据。那么意味着我们需要以最高效的方式去实现功能,同时也需要保证软件的便捷性与可维护性,开源字节使用MyBatis foreach标签方式优雅的实现了材料的出入库。源码开放,可前往码云仓库免费…

NR 物理层编码 - slide7 卷积码

前言: 卷积码(n,k,N) 是一种非分组码.与线性分组码的区别: 是一种有记忆的编码方案,n个输出不仅与当前k个输入有关系,也与移位寄存器前N个输入有关系. 发展历史: 1955年 麻省理工的P.Elias 发明 1957年 序列译码法 1963年 门限译码法 1967年 Vi…

MongoDB分片机制

为什么需要分片 应用层实现的手动分片: MongoDB分片组件 mongos路由器负责将应用程序的请求指引到合适的分片上。注意到mongos路由器是在应用程序端实现的,因此分片的配置信息需要保存在另外的服务器上,即配置服务器。mongos通过两阶段提交同…

使用PreparedStatement对数据库的增删改查

目录 介绍 JDBCUtils自定义工具类 增 删 改 查 介绍 可以通过调用 Connection 对象的 preparedStatement() 方法获取PreparedStatement 对象PreparedStatement 接口是 Statement 的子接口,它表示一条预编译过的 SQL 语句PreparedStatement 对象所代表的 SQL 语…

拼搏半个月,刷了 571道Java高频面试题喜提阿里 offer,定级 P7

今年较往年相比面试要难的多,大环境也是对于程序员的要求越来越高,环境是我们无法改变的,我们能改变的只有自己,月初我一好友,努力拼搏一周,刷完了这份阿里 P8 大牛整理的这 571 道 Java 高频面试题笔记&am…

彩色的木棒

一 问题描述 给你一堆木棒。每根棒的每个端点都用一些颜色着色。是否可以将棒对齐成直线,使得接触的端点的颜色具有相同的颜色? 二 输入和输出 1 输入 输入是一系列行,每行包含两个单词,由空格分隔,给出一个木棒的…

SkeyeVSS智慧国土高点视频监控解决方案

随着经济的快速发展、城镇化的快速推进,耕地及矿产资源等不断减少,未批先建、批少用多、私自改变土地用途等各种违法违规用地行为时有发生,在这种情况下,传统的人力巡查工作效率低、执法成本高的弊端进一步凸显。 SkeyeVSS智慧国土…

科技云报道:私有云市场加速洗牌,超云为何异军突起?

科技云报道原创。 近年来在国家相关政策的大力推动下,中国私有云市场发展渐入佳境,一股新的建设高潮汹涌而至。 根据IDC对于2022-2026中国SDS及HCI的市场预测,中国私有云基础架构市场正在从成长阶段迈向成熟阶段,未来3-5年将保持…

自己动手写ls命令——Java版

自己动手写ls命令——Java版 介绍 在前面的文章Linux命令系列之ls——原来最简单的ls这么复杂当中,我们仔细的介绍了关于ls命令的使用和输出结果,在本篇文章当中我们用Java代码自己实现ls命令,更加深入的了解ls命令。 代码实现 文件操作的…

3000字神经网络论文

你遇到了哪些困难和挫折是怎样克服的写下来的作文 我学会了骑自行车人生的道路上,谁都会遇到困难或挫折,就看你敢不敢去挑战它。那一次学自行车,一直让我记忆犹新。一天傍晚,我和爸爸妈妈一起推着车来到体育馆,这次我…

Android同文输入法的使用(开源输入法Trime)

Trime输入法背景源码APP试用下载安装配置部署成功后再一步:学习如何 DIY总结背景 想找一款开源的Android中文输入法,然后发现了这款备受推崇的输入法框架rime。 RIME/中州韵输入法引擎,是一个跨平台的输入法算法框架。 基于这一…

【MySQL】检索数据

每日鸡汤 : —— 若你困于无风之地,我将奏响高空之歌 要和我一起花 10 min 学一会 SQL 嘛? - 当然愿意,我美丽的小姐 (封寝期间练就的自言自语能力越来越炉火纯青了~~~) 前言: 本实验中所用数据…

Kotlin第二章:kotlin基础

1. 基础数据类型 1. 整数类型 序号类型位宽最小值最大值1Byte8-1281272Short16-32768327673Int32-2,147,483,648 (-2^31)2,147,483,647 (2^31 - 1)4Long64-9,223,372,036,854,775,808 (-2^63)9,223,372,036,854,775,807 (2^63 - 1) val number 100 //默认Int类型 类比java的…

0050 Enum枚举类

/* 枚举是一种特殊的类,里面只包含一组有限的特定对象枚举的两种实现方式1.自定义类实现枚举2.使用enum关键字实现枚举自定义类实现枚举1.构造器私有化2.本类的内部创建一组对象[]3.对外暴露对象(为对象添加public final static修饰)4.提供g…

第三章 Flink基础理论之内存优化及常见内存报错解决方案

第三章 Flink基础理论之内存优化及常见内存报错解决方案 哇. 1、总体内存模型 1.1、内存模型概述 ​ Flink内存配置分为JobManager内存配置和TaskManager内存配置。 配置项TaskManager配置参数JobManager配置参数Total Flink Memorytaskmanager.memory.flink.sizejobmana…