8年测试老鸟总结,性能测试案例经验,高级测试之道...

news2024/11/26 19:24:53

目录:导读

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


前言

性能基准测试,会基于固定的硬件环境和部署架构(比如专用的服务器、固定的专用网络环境、固定大小的集群规模、相同的系统配置、相同的数据库背景数据等),通过执行固定的性能测试场景得到系统的性能测试报告,然后与上一版本发布时的指标进行对比,如果发现指标有“恶化”的趋势,就需要进一步排查。

"恶化"趋势
主要表现在以下几个方面:

同一事务的响应时间变慢了。比如,上一版本中,用户登录的响应时间是 2 s,但是在最新的被测版本中这个响应时间变成了 4 s;

系统资源的占用率变高了。比如,上一版本中,平均 CPU 占用率是 15%,但是在最新的被测版本中平均 CPU 占用率变成了 30%;

网络带宽的使用量变高了。比如,上一版本中,发送总字节数是 20 MB,接收总字节数是 200 MB,但是在最新的被测版本中发送总字节数变成了 25 MB,接收总字节数变成了 250 MB。

这里需要注意的是,这些“恶化”趋势的前提是:完全相同的环境以及测试负载。不同“恶化”指标的排查,有不同的方法。我以最常见的事务响应时间变慢为例,和你说明一下排查方法。

假设,通过性能基准测试的比较结果得知,用户登录的响应时间从 2 s 变成了 4 s。那么,我们首先要做的是验证在单用户的情况下,是否会出现响应时间变长的问题。具体做法是,将用户登录的虚拟用户脚本单独拿出来,建立一个单用户运行的性能测试场景并执行,观察用户登录的响应时间是否变慢。

如果变慢了,就说明这是单用户登录场景就可重现的性能问题,后续的处理也相对简单了。

解决方法是:分析单用户登录的后端日志文件,看看完成登录操作的时间具体都花在了哪些步骤上,相比之前哪些步骤花费的时间变长了,或者是多出了哪些额外的步骤。

如果没有变慢,则说明我们必须尝试在有压力的情况下重现这个性能问题。为此,我们要基于用户登录的虚拟用户脚本构建并发测试的场景,但是我们并不清楚在这个场景设计中到底应该采用多少并发用户、加入多长的思考时间。

这时,通常的做法是,直接采用性能基准测试中的并发用户数和思考时间,去尝试重现问题。如果无法重现,我们可以适当地逐步加大测试负载,并观察响应时间的变化趋势。

这里需要注意的是,千万不要使用过大的测试负载。因为测试负载过大的话,系统资源也会成为性能瓶颈,一定会使响应时间变长。但这时,响应时间变长主要是由资源瓶颈造成的,而不是你开始要找的那个原因。

如果此时可以重现问题,那就可以进一步去分析并发场景下,用户登录操作的时间切片,找到具体的原因。如果此时还是不能重现问题的话,情况就比较复杂了,也就是登录操作的性能可能和其他的业务操作存在依赖,或者某种资源竞争关系,这就要具体问题具体分析了。

一般来说,当定位到性能“恶化”的原因并修复后,我们还会再执行一轮性能基准测试,以确保系统对外发布前的性能基准测试指标没有“变坏”。

可以说,通过对每个预发布版本的性能基准测试,我们可以保证新发布系统的整体性能不会下降,这也就是性能基准测试最终要达到的目的。

需要特别注意以下三点:

1、性能基准测试中虚拟用户脚本的选择以及配比,需要尽可能地匹配实际的负载情况;

2、总体的负载设计不宜过高,通常被测系统的各类占用率指标需要控制在 30% 以内,尽量避免由于资源瓶颈引入的操作延时;

3、每次性能基准测试前,一般需要对系统资源以及网络资源做一轮快速的基准测试,以保证每次被测环境的一致性,同时也要保证数据库的数据量在同一个级别上。总之,你需要采用一切可能的手段,来确保多次性能基准测试之间的环境一致性。

稳定性测试

稳定性测试,又称可靠性测试,主要是通过长时间(7*24 小时)模拟被测系统的测试负载,来观察系统在长期运行过程中是否有潜在的问题。通过对系统指标的监控,稳定性测试可以发现诸如内存泄漏、资源非法占用等问题。

很多企业级的服务器端产品,在发布前往往都要进行稳定性测试。稳定性测试,通常直接采用性能基准测试中的虚拟用户脚本,但是性能测试场景的设计和性能基准测试场景会有很大不同:

一般是采用“波浪式”的测试负载,比如先逐渐加大测试负载,在高负载情况下持续 10 多个小时,然后再逐渐降低负载,这样就构成了一个“波浪”,整个稳定性测试将由很多个这样的波浪连续组成。

稳定性测试成功完成的标志,主要有以下三项:
系统资源的所有监控指标不存在“不可逆转”的上升趋势;
事务的响应时间不存在逐渐变慢的趋势;
事务的错误率不超过 1%。

实际工程项目中,由于稳定性测试执行的时间成本很高,往往需要花费 3~7 天的时间,所以我们一般是在其他所有测试都已经完成,并且所有问题都已经修复之后才开始稳定性测试。

另外,有些企业为了缩短稳定性测试的执行时间,往往还会采用“时间轴压缩”的方法,具体的做法就是:在加大测试负载的前提下,适当缩短每个“波浪”的时间,从而减少整体的测试执行时间。

最后,需要强调的一点是,虽然很多时候,尤其是产品版本已经逐渐走向成熟期时,稳定性测试并不会发现问题,但是千万不要小看稳定性测试带来的价值。因为稳定性测试一旦发现问题,那么这些问题都是很严重而且非常隐蔽的大问题。

所以,很多大型的企业级软件企业都会执行严格的稳定性测试,并把稳定性测试的结果作为产品是否可以发布的硬性要求。比如,我曾经工作过的 HP 软件研发中心,它每次产品发布前都会由专门的性能测试团队完成严格的稳定性测试,并以此来决定是否要发布这个产品。

并发测试

并发测试,是在高并发情况下验证单一业务功能的正确性以及性能的测试手段。高并发测试一般使用思考时间为零的虚拟用户脚本来发起具有“集合点”的测试。

并发测试,往往被当作功能测试的补充,主要用于发现诸如多线程、资源竞争、资源死锁之类的错误。要执行并发测试,就需要加入“集合点”,所以往往需要修改虚拟用户脚本。

加入“集合点”一般有两种做法:
1、在虚拟用户脚本的录制过程中直接添加;
2、在虚拟用户脚本中,通过加入 lr_rendezvous() 函数添加。

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

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

只有不断地努力和奋斗,才能实现自己的梦想。无论遇到多大的困难和挑战,都要坚持下去,因为成功就在前方等待着你。让每一天都变得更加充实和有意义,把握每一次机会,勇往直前,不放弃!

在人生的道路上,每一个脚印都是向前的力量。只要坚定目标、不断努力,即使路途再远,终究能到达成功的彼岸。相信自己,坚持奋斗,让我们一起迎接更美好的未来!

每一份努力都不会被辜负,每一个追梦者都值得尊敬。不要害怕失败,因为失败只是通向成功的必经之路。只有勇往直前,才能让生命的价值得到最大的实现。让我们一起奋斗,成为自己想成为的人。

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

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

相关文章

测试员最令程序员讨厌的十种行为,你中了几条?

在做软件测试这些年,总会有程序员给我吐槽某某测试员令其发指的一些事。这里我总结了一些,看你有没有中呢? 1、爱较真,只要逮着问题,哪怕是技术文档中的错别字也要提到bug管理工具中,更让程序员绝望的是&a…

测试员与程序员那些烂在心里的共同秘密

1、生产环境出现了一个较严重的bug,赶在用户没发现的情况下,测试员与程序员悄悄地改了,并跳过了N个步骤做了次发布。 2、程序员告诉测试员,新来的技术leader每天做得最多的事就是copy他们的代码,一份不够还再来一份&a…

VR全景智慧园区,沉浸式数字化体验,720度全视角展示

导语: 随着科技的迅猛发展,虚拟现实(Virtual Reality,简称VR)全景技术已经成为了人们趋之若鹜的新兴领域。 而城市园区作为现代社会的重要组成部分,也正在积极寻求创新的方式来吸引更多的人流和投资。 一&…

【QQ界面展示-设置文本框的leftView属性 Objective-C语言】

一、这个搞定以后,接下来,就实现另外一个效果, 1.注意,我们上午把这个文本框,是不是本来说文本框,直接放这儿就OK了吧,但是,我们上午为了能让这个文本框兼容iOS6,是不是把这个文本框的边框,设为None,然后呢,边框设为nil边框,是不是设了一个背景图啊, 但我们做完…

Ansys Zemax | 如何在OpticStudio中建模和设计真实波片

本文介绍了如何在 OpticStudio 中建模和设计真实的单色和消色差波片。它将演示如何使用双折射材料,通过构建评价函数来计算相位延迟,并使用 Universal Plot 将相位延迟与波片厚度的关系可视化。(联系我们获取文章附件) 双折射材料…

搜索树的逻辑以及代码实现-重点删除结点的逻辑

目录 搜索二叉树概念 代码 二叉搜索树的插入 二叉搜索树的查找 二叉搜索树的删除(非常重要) a、b、c情况:删除14 d情况 打印结点中序遍历 整体代码:(有R开头的就是递归写法,逻辑一样) 搜…

合宙Air724UG Cat.1模块硬件设计指南--UART接口

UART接口 简介 串行接口简称串口,同时串口又分为同步收发串口与异步收发串口两种方式,而CAT1模块支持的串口为异步收发方式,简称UART口。串口作为设备的外部接口,是调试开发的一种重要的开发手段。 特性 UART1串口 包括数据线TXD…

ubuntu (Linux mint) 安装mysql 5.7

1 从官网下载deb格式安装包 网址: https://downloads.mysql.com/archives/community/ 2 解压安装包 执行命令: tar -xvf mysql-server_5.7.41-1ubuntu18.04_amd64.deb-bundle.tar 如下图所示: 你会发现多了很多.deb文件。 3 批量安装 .d…

当C/C++遇上高性能计算|会C/C++编程的看过来,这类岗位是真香

C/C编程语言作为经典而强大的编程语言,一直在计算机科学领域占据着重要的地位。而当C/C遇上高性能计算,这个组合将带给你无尽的机遇和挑战,成为一名高性能计算工程师,你会发现这类岗位是真香。从此告别爹不疼、娘不爱的尴尬境地。…

【RH850/U2A】:Task激活过程

Task激活过程 Autostart非AutostartTASK(Default_Init_Task)EcuM_StartupTwo(void)SchM_Init(void)BswM_Init(xx)Rte_Start(void)Task激活过程,分自动运行(AutoStart)和非自动运行。 Autostart 在DavinciCfg中的配置如下: Autostart意味作在执行StartOS()后就开始运行了。…

使用Python进行小波变化

上图展示了使用Python小波变换的一个使用案例,数据和代码来自https://github.com/ct6502/wavelets。在使用运行代码的时候发现了源代码的报错分别在Line115和Line136,是将Y轴变为对数轴,需要将“plt3.set_yscale(‘log’,base2, subsNone)”改…

pycharm HfArgumentParser ArgumentParser 参数设置 以及Debug

HfArgumentParser可以将类对象中的实例属性转换成转换为解析参数。必须注意的是,这里的类对象必须是通过dataclass()创建的类对象。并且通过HfArgumentParser创建的解析参数,都是可选参数。 from transformers import HfArgumentParser from dataclasse…

Pytest教程__fixture(9)

什么是fixture fixture是pytest特有的功能,使用装饰器 pytest.fixture 标记的函数在其他函数中能被当作参数传入并被调用。 fixture有明确的名字,在其他函数,模块,类或整个工程调用它时会被激活。 fixture是基于模块来执行的&a…

【计算机视觉 | 分割】SAM 升级版:HQ-SAM 的源代码测试(含测试用例)

文章目录 一、第一段代码二、第二段代码三、第三段代码3.1 函数13.2 函数23.3 函数33.4 函数43.5 函数5 四、第四段代码五、第五段代码5.1 测试用例15.2 测试用例25.3 测试用例35.4 测试用例45.5 测试用例55.6 测试用例65.7 测试用例75.8 测试用例8 下面是一个测试用例&#xf…

代理模式(十五)

相信自己,请一定要相信自己 上一章简单介绍了享元模式(十四), 如果没有看过, 请观看上一章 一. 代理模式 引用 菜鸟教程里面的代理模式介绍: https://www.runoob.com/design-pattern/proxy-pattern.html 在代理模式(Proxy Pattern)中&…

阿里云服务器租用费用_2023价格表

2023年阿里云服务器租用费用,阿里云轻量应用服务器2核2G3M带宽轻量服务器一年108元,2核4G4M带宽轻量服务器一年297.98元12个月,阿里云u1服务器2核4G、2核8G、4核8G、8核16G、4核16G、8核64等配置新人3折,云服务器c7、g7和r7均有活…

责任链模式:构建一条责任链去处理不同级别的日志信息

概要 责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,在有多个对象(处理者)都可以接收请求的情况下,允许你将多个对象连接成一条处理链,请求沿着处理链进行发送。收到请求后…

最新水文水动力模型在城市内涝、城市排水、海绵城市规划设计中深度应用丨SWMM排水管网水力、水质建模及海绵与水环境应用

目录 第一部分 CAD、GIS在水力建模过程中的应用 第二部分 SWMM模型深度应用 第三部分 城市内涝一维二维耦合模拟 第四部分 海绵城市关键控制指标计算 第五部分 SWMM二次开发基础 SWMM排水管网水力、水质建模及在海绵与水环境中的应用 随着计算机的广泛应用和各类模型软件…

基于AutoJs7实现的薅羊毛App专业版源码大分享

源码下载链接:https://pan.baidu.com/s/1QvalXeUBE3dADfpVwzF_xg?pwd0736 提取码:0736 专业版肯定比个人版功能强大并且要稳定。增加了很多功能的同时也测试封号的App,对于封号的App,给予剔除。虽然App数量减少了但是都是稳定的…

getopt函数和getopt_long函数

这个函数有点像无限迷宫,正确的路和错误的路都有很多,我们只需要能够满足当前需求就可以了,完全没有必要去探索每一条路。虽然,我很久以前试图这样干过。过滤后的回忆,只剩感觉了,过滤的多了,感…