测试老鸟总结,性能测试三大核心指标详解,并发/TPS/响应时间...

news2024/12/26 10:47:46

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

抛出问题:
并发到底是什么鬼?
怎么判断系统到了性能瓶颈?
监控那么多指标到底关注哪些?

先举一个很经典的例子:高速收费站的故事

假设现在有一个高速收费站,有4个收费窗口,每个窗口平均5秒通过一辆车。
其中有2个ETC窗口,平均1秒通过一辆车。
现在有100辆车同时到达收费站,需要多久可以完全通过?平均每辆车通过耗时多久?如何提高通过效率降低通过耗时?

以上面的例子来讲,假设它是一个性能需求,你看到的第一眼会想到哪些知识点,要考虑哪些因素?

如果是我的话,我大概会想到下面一些因素:
收费站是服务器,4核的配置,官方(或者说历史数据表明)性能表现是平均响应时间=5秒;
2个ETC窗口,可能是请求打标做了业务(或者技术上的)优先级区分,要考虑这里的具体场景;
100辆车同时到达,是压测工具模拟的“并发数”,但实际并不是服务器单位时间内同时处理的请求;

需求问的是通过的总耗时和平均响应时间,以及如何提高通过效率降低通过耗时。这个问题怎么解决?

并发到底是什么鬼?

严格意义上讲,并发指的是服务端单位时间内接受到了多少请求,这是衡量系统面临多大压力的一个重要指标。

但现实情况却是,很多同学拿着常见的压测工具,用并发线程数/VU等作为所谓的并发数来理解。

就像上面的高速收费站故事,你以为的并发是100辆车,其实对系统来说真正的并发是四个收费窗口。

因此,我建议各位同学在学习性能测试的时候要明白一点:所谓的用工具模拟并发数,其实只是为了满足让系统承受足够压力的动作。

如何理解TPS?

TPS,官方解释是每秒事务数,它描述了系统在单位时间内完整的处理完一整个业务请求的过程。

以上面的高速收费站为例,有4个收费窗口,每个窗口平均5秒通过一辆车。其中有2个ETC窗口,平均1秒通过一辆车。

请问整个收费站的TPS是多少?计算方式:(4个收费窗口*1)/5秒=0.8。

当然,这里要区分业务场景,如果单独论ETC场景,2个收费窗口,1秒1个,那TPS=2。

大家明白了吗?
在真正的性能测试中,TPS是需要考虑到具体的业务场景,并且要求请求在逻辑上被完整处理。

从技术角度来说,如果是写的请求,需要确保数据库或者缓存的数据做了符合业务逻辑的变更。

如何理解响应时间?

聊完了并发和TPS,接着聊响应时间。
如何理解响应时间呢?这个要从2个维度来理解。

client:客户端发起请求,通过网络传输到服务端,服务端按照逻辑处理完成,并返回response给到客户端。
server:从接受到请求开始处理,到完成逻辑处理并从服务端发出,OK到此结束,一个统计区间完成。

换成高速收费站的场景,就是车到了收费窗口,我刷卡扫码支付,然后抬杆放行直到车出去下一个车进来。

这个过程的耗时就是所谓的响应时间。

至于我们常见的平均响应时间和99响应时间,只是不同维度的统计方法而已。

这三者间的关系与影响

如何提高通过效率降低通过耗时,这是上面的问题。

在解决这个问题之前,不妨代入一下真实的高速收费站,我们想象如下几种情况。
100辆车同时到达,但只有四个收费窗口,需要排队按顺序进入,这是队列机制;
100辆车同时到达,但只有四个收费窗口,万一工作人员换班午休,这是系统维护;
100辆车同时到达,但可能有交警路政检查,四个收费窗口,其实只有2条道通过,这是限流;
有个没有安装ETC的车走了ETC的车道,过不去,需要倒车换到其他收费窗口,这是堵塞或者异常;

看完了上面的几种情况,我们来看下如何理解三者间的关系和影响。

提高通过效率,可以增加收费窗口(服务器升配置,4核变8核);
提高通过效率,可以让更多车主安装ETC(技术优化,都用缓存);
提高通过效率,可以通过某种机制确保车道不走错(异常处理,快速失败或放行);
提高通过效率,可以通过7*24小时轮班确保收费窗口正常提供服务(服务的可用性);

还有其他提高通过效率降低通过耗时的方法吗?

方法:
高速3车道变6车道(扩展网络带宽);
多开设几个不同的收费站(服务扩容);
大货车小客车车道时速区分(分流机制);
大货车小客车走专门的收费站(服务分组);

真正的并发是服务端单位时间内接收并处理的请求数,并不是工具模拟的并发线程数。
其他条件不变的情况下,要提高TPS降低响应时间,最简单的办法是升配+扩容+缓存。
高并发/高性能/高可用其实是指用更少时间处理更多请求,且服务长期提供正常服务。

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

在短暂的人生中,我们总会遇到挫折和困难。但是只要坚持努力奋斗,付出汗水和努力就一定能够收获属于自己的成功与幸福。勇敢拼搏,不断超越自我!

成功并不是童话里承诺的那样美好,它来之不易,需要无数次的尝试、调整和失败。只有在坚持奋斗的道路上,我们才能突破自身限制,探索更具灵魂的成长之路。勇敢面对挑战,迎接未来的挑战!

我们的人生就像电影一样,有起有落,有快乐有悲伤,但是只要努力奋斗,就会收获属于自己的精彩和成功。拿起勇气和毅力的武器,勇闯人生巅峰,创造属于自己的不朽传奇!

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

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

相关文章

恒容容器放气的瞬时流量的计算

有时候,你会遇到一个问题,该问题的描述如下: 你有一个已知体积的容器,设容器体积为V,里面装有一定压力(初始压力)的气体,如空气或氢气等,设初始压力为1MPa,容器出口连接着一个阀门开…

服务(第三十一篇)mysql-mmm高可用

MMM是一套支持双主故障切换和双主日常管理的脚本程序。 用来监控和管理 MySQL Master-Master (双主)复制,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加…

Makefile基础教程(自动生成依赖关系)

文章目录 前言一、makefile不包含.h依赖的后果二、gcc -M 和 gcc -MM命令三、sed命令四、makefile中命令的执行机制四、生成依赖文件并单独放入文件夹中总结前言 在前面的文章中我们都只使用到了.c文件作为依赖但是在实际的工程中肯定是不可能只有.c文件的还存在.h文件,那么在…

CSAPP Lab5- MallocLab

实验目标 本实验需要用c语言实现一个动态的存储分配器,也就是你自己版本的malloc,free,realloc函数。 实验步骤 tar xvf malloclab-handout.tar解压文件 我们需要修改的唯一文件是mm.c,包含如下几个需要实现的函数 int mm_ini…

ChatGPT通用人工智能:初心与未来

至少从 20 世纪 50 年代起,人们就开始大肆宣传可能很快就会创造出一种能够与人类智能的全部范围和水平相匹配的机器。现在,我们已经成功地创造出了能够解决特定问题的机器,其准确度达到甚至超过了人类,但我们仍然无法获得通用智能…

基于STM32F103的HAL库手动配置FreeRTOS

基于STM32F103的HAL库手动配置FreeRTOS 源码下载 FreeRTOS源码下载包括示例工程与内核工程。 示例工程:获取与开发环境相关的架构文件 内核工程:移植FreeRTOS的内核文件 示例工程Gitee地址 内核工程GirHub地址 STM32工程创建 使用STM32CubeMX创建新工…

电动汽车变频器

目录 1、电动汽车与汽油动力车的区别 2、变频器 3、变频器内元件 3.1、汽车变频器的组成和功能 3.1.1、电容器 3.1.2、变频器控制单元 3.1.3、逆变桥驱动单元 3.1.4、逆变桥单元 3.2、汽车上变频器的组成和功能 3.2.1、DC/DC升压转换器。 3.2.2、DC/DC降压转换器。 …

Java语言----二叉树

目录 一、二叉树 1.1 二叉树概念 1.2 两种特殊的二叉树 1.3二叉树的性质 二 、二叉树的实现 2.1第一种 使用数组 2.2第二种 使用链表实现 2.2.1二叉树代码构建 2.2.2二叉树的基本操作 三、二叉树的三种遍历 3.1递归方法实现 前、中、后遍历 3.2非递归方法实现 前、中…

Spark入门介绍

目录 一、Spark框架概述 1、Spark简介 2、发展 二、Spark功能及特点 1、定义

Kubernetes部署+kubesphere管理平台安装

Kubernetes官网;kubesphere官网 不论是Kubernetes官网还是找的其它部署步骤,基本都是推荐搭建集群的方式,是为了实现高可用.....等等,这样一来至少需要两台或三台的服务器来搭建,这样对我们的成本也是非常大的&#xf…

HCIA-MSTP替代技术之链路捆绑(手工模式)

目录 1,网络的可靠性需求 2,链路聚合原理 链路聚合: 聚合组(Link Aggregation Group,LAG): 成员接口和成员链路: 活动接口和活动链路: 非活动接口和非活动链路: 聚合模式&…

应急响应-web

应急响应的流程分为6个阶段 PDCERF 准备 ,检测,抑制,根除,恢复,总结 准备: 准备阶段就是以预防为主,准备一些应急响应的预案,对应急响应的分工操作制定一些计划,进行应…

Redis的数据结构

一)SDS 在redis中,保存key的是字符串,value往往是字符串或者是字符串的集合,可见字符串是redis中最常用的一种数据结构: 但是在redis中并没有直接使用C语言的字符串,因为C语言的字符串存在很多问题 1)获取字符串的长度需要通过运算…

突破自动化测试瓶颈!WEB自动化测试鼠标与键盘操作最佳实践分享

目录 引言 鼠标操作方法 说明 实例化对象 方法 实例1 实例2 拖拽 注意 键盘操作 说明 Keys类 常用的键盘操作 案例 结语 引言 在现代软件测试中,WEB自动化测试已经成为了必不可少的一部分,然而,面对各种繁琐的测试场景&#xf…

章节2: husky + 自动检测是否有未解决的冲突 + 预检查debugger + 自动检查是否符合commit规范

在章节1中我们学习到了commit的规范、husky的安装和使用、lint-staged怎么安装以及怎么用来格式化代码。那么这篇文章我们来看看commit预处理中我们还能做哪些处理呢? 自然,我们还是要用到husky这个东西的,大致过程其实和章节1异曲同工&#…

sql语句查询数据库字段和表字段数量

》新建数据库:CREATE DATABASE IF NOT EXISTS 数据库名; 示例::CREATE DATABASE IF NOT EXISTS test_db; 》进入数据库:use 数据库名称; 示例:use test_db; 》数据库中创建表: create table 表名(字段名 字段类型(长度),字段名 字…

零基础自学黑客【网络安全】啃完这些足够了

我刚学网络安全,该怎么学?要学哪些东西?有哪些方向?怎么选? 怎么入门? 这个 Web 安全学习路线,整体大概半年左右,具体视每个人的情况而定。 (上传一直很模糊&#xff0c…

网络安全做红队攻防 35 岁以后可以干嘛?

35岁之后不是都当技术总监,CTO了或者自己创业了吗? 不会,单渗透测试来说,到后期更多是经验的积累。同一个事情,经验老道师傅的可能用更少的命令,发更少的请求完成这个事情,更隐蔽,更…

从AI到BI:隐语SCQL深度解读(附视频)

3月29日,“隐语开源社区开放日”活动顺利举办。当天隐语社区正式开源SCQL引擎,在工业界首次实现了隐私数据从Al到BI分析,是隐语走向易用的重要一步!下文为隐语框架负责人王磊在活动现场的分享内容。 我们知道,在隐私计算目前应用较多的场景中,无论是风控场景的LR、XGB,还…

每日学术速递5.27

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Control-A-Video: Controllable Text-to-Video Generation with Diffusion Models 标题:Control-A-Video:使用扩散模型生成可控的文本到视频 作者&#xff…