资深老鸟总结,性能测试体系-知识分享,测试之路养成...

news2024/11/19 1:32:46

目录:导读

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


前言

开始性能测试前需要了解

1)项目具体需求。
2)指标:响应时间在多少以内,并发数多少,tps多少,总tps多少,稳定性交易总量多少,事务成功率,交易波动范围,稳定运行时长,资源利用率,测哪些交易,哪些接口,测试哪些场景。

3)环境:生产环境服务器数量,测试环境服务器数量,按照资源配比得出测试指标。

4)协议:系统用什么协议进行通讯。
5)压力机数量:如果并发用户数太多,需要把压力发到不同的压力机,不然可能会存在压力机瓶颈问题,导致tps和响应时间抖动。
6)交易占比:分析线上日志得出tps占比。
7)系统架构:请求流经过哪些环节,压测时监控这些环节。

测试:

1)基准:一个用户迭代100次,关注响应时间,事务成功率100%。
2)负载:10个用户跑10分钟,关注响应时间,事务成功率100%。

3)容量:估算一个总tps,根据公式计算出每个交易的pacing和vu,获取系统最大处理能力(最优容量),再令外测出三个梯度作为对比(两组小于最优容量,一组大于最优容量)。

四组容量VU等差,tps等差,对比每组容量实际占比和测试占比(越接近越能模拟真实场景),关注响应时间,总tps,tps,事务成功率,AP cpu利用率,DB cpu利用率,线程死锁,数据库死锁。

其中响应时间应小于负载测试时间,总tps应约等于预估总tps(相差不超过10是正常的),每个交易的tps应接近预估总tps*占比,事务成功率100%,AP cpu小于60%,DB cpu小于80%。
dump线程栈检测是否有线程死锁,查看数据库日志看是否有数据库死锁。

4)稳定性:采取最优容量的80%作为压力持续运行24小时,观察系统长时间运行的性能表现,关注响应时间,tps,总tps,事务成功率,交易总数,观察是否有内存溢出(堆溢出,栈溢出,持久代溢出)。

cpu利用率是否达标,mem是否不持续增长,是否能正常触发fullgc,gc时间,gc频率, fullgc时间,fullgc频率(重点关注,JVM调优就是为了减少fullgc频率)。

监控:
容量测试和稳定性测试时启动nmon监控。

压测中遇到的性能问题及解决办法:

1、容量测试过程中cpu过高

1)用vmstat实时监控cpu使用情况。很小的压力AP cpu却到了80%多,指标是不能超过60%。

2)分析是use cpu过高还是sys cpu过高,常见的是use cpu使用过高。
3)如果是sys cpu使用过高,先把消耗cpu最多的进程找出来(top命令),再找到该线程下消耗cpu过高的是哪几个线程,再把该线程转换成16进制,再用jstack命令来dump线程栈,看这个线程栈在调用什么东西导致use cpu过高。

2、内存溢出(堆溢出、栈溢出、持久代溢出)

1)堆内存溢出

稳定性压测一段时间后,LR报错,日志报java.lang.OutOfMemoryError.Java heap space

jmap -histo pid命令dump堆内存使用情况,查看堆内存排名前20个对象,看是否有自己应用程序的方法,从最高的查起,如果有则检查该方法是什么原因造成堆内存溢出。

如果前20里没有自己的方法,则用jmap -dump来dump堆内存,在用MAT分析dump下来的堆内存,分析导出内存溢出的方法。

如果应用程序的方法没有问题,则需要修改JVM参数,修改xms,xmx,调整堆内存参数,一般是增加堆内存。

2)栈内存溢出

稳定性压测一段时间后,LR报错,日志报Java.Lang.StackOverflowError。

修改jvm参数,将xss参数改大,增加栈内存。
栈溢出一定是做批量操作引起的,减少批处理数据量。

3)持久代溢出

稳定性压测一定时间后,日志报Java.Lang.OutOfMenoryError.PermGen Space。

这种原因是由于类、方法描述、字段描述、常量池、访问修饰符等一些静态变量太多,将持久代占满导致持久代溢出。

修改jvm配置,将XX:MaxPermSize=256参数调大。尽量减少静态变量。

3、线程死锁

1)容量测试压测一段时间后,LR报连接超时。
2)造成这种现象的原因很多,比如带宽不够,中间件线程池不够用,数据库连接池不够,连接数占满等都会造成连接不上而报超时错误。

3)jstack命令dump线程栈,搜索线程栈里有没有block,如果有的话就是线程死锁,找到死锁的线程,分析对应的代码。

4、数据库死锁

1)容量测试压测一段时间后,LR报连接超时。
2)造成这种现象的原因很多,比如带宽不够,中间件线程池不够用,数据库连接池不够,连接数占满等都会造成连接不上而报超时错误。

3)数据库日志中搜索block,能搜到block的话就是存在数据库死锁,找到日志,查看对应的sql,优化造成死锁的sql。

5、数据库连接池不释放

1)容量测试压测一段时间后,LR报连接超时。
2)造成这种现象的原因很多,比如带宽不够,中间件线程池不够用,数据库连接池不够,连接数占满等都会造成连接不上而报超时错误。

3)去数据库查看应用程序到数据库的连接有多少个( show full processlist),假如应用程序里面配置的数据库连接为30,在数据库查看应用程序到数据库的连接也是30,则表示连接池占满了。

将配置改成90试试,去数据库看如果连接到了90,则可以确定是数据库连接池不释放导致的。查看代码,数据库连接部分是不是有创建连接但是没有关闭连接的情况。基本就是这种情况导致的,修改代码即可。

6、TPS上不去

1)压力大的时候tps频繁抖动,导致总tps上不去。查看是否有fullgc(tail -f gc_mSrv1.log | grep full)。

2)pacing设置太小也会导致tps上不去,对抖动大的交易多增加点用户即可。

3)tps抖动,单压抖动大的交易,发现很平稳,这时怀疑是不是压力太大导致,所以发容量的时候把压力最大的那只交易分到其他压力机,然后发现tps不抖动了。

注意:多台压力机只影响tps抖动,不会影响服务器的cpu。

4)看响应时间有没有超时,看用户数够不够。

7、服务器压力不均衡(相差1%-2%是正常的)

1)跑最优容量的时候,四台AP只有一台cpu超过60%,其他三台都在60%以下。
2)查看服务器是否有定时任务。
3)查看是否存在压力机瓶颈。
4)是否存在带宽瓶颈(局域网不存在此问题)。
5)查看部署的版本,配置是否一样。
6)可能别人也在用这些AP,因为同一台物理机上有很多虚拟机,因为别人先用,资源被别人先占了。

8、fullgc时间太长

1)跑容量和稳定性的时候,出现LR报请求超时错误,查看后台日志是fullgc了,看LR几点报的错和日志里fullgc的时间是否对应,fullgc会暂停整个应用程序,导致LR前端没响应,所以报错。

这时可以减少old代内存,从而减少fullgc时间,减少fullgc时间LR就不会报错,让用户几乎感觉不到应用程序暂停。

2)四台AP轮流着full gc(部分server fullgc,其他server也会fullgc),这时可以制定策略让不同的server不同时fullgc,或者等夜间交易量少时写定时任务重启服务。

注意:
服务器日志为error下测试。
服务启动后几分钟内发压压力会很大,最好是服务启动两三分钟后再开始跑压力。

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

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

生命短暂,时间宝贵。珍惜每分每秒,为自己的梦想而奋斗。信念不灭,前路无畏,只要坚守初心、锲而不舍,终将成就辉煌人生。

扬起帆,迎风航行,踏浪前行不畏艰险。相信自己的力量,放飞梦想,努力奋斗,你将在辉煌的航程中创造属于自己的传奇。

人生如旅,奋斗如航。不论起点如何,只要心怀信念和勇气,努力追求,你将驶向未知的海洋,创造属于自己的辉煌航线,留下无悔的足迹。

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

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

相关文章

【Python】Pyside2 可视化实现:每秒复制源文件一行到目标文件并打印日志

背景: 博主在某个项目中,需要模拟每秒钟生成一行数据,所以有了该博客的想法,其中有线程的内容,为了防止主界面卡住 效果: 代码: import sys import threading import timeimport openpyxl im…

盛元广通实验动物中心饲养管理系统2.0

盛元广通实验动物中心饲养管理系统2.0主要功能包括:访客登记、笼位/架管理、笼位预约、动物订购、伦理审查、谱系管理、饲养繁育管理、动物房消毒管理、费用管理、垫料管理等功能。实验室动物中心饲养管理系统是一个综合性的管理平台,主要用于实验动物的…

MySQL 删除ibdata1时怎么恢复

标题:MySQL InnoDB数据恢复,丢失ibdata1时怎么安全恢复 废话在前: 恭喜你,当你看到这篇文章的时候,说明有可能 你心里已经有一万匹🐎在奔腾了。千万不要乱删除ibdata1,有些博客无脑抓取、复制…

项目经理如何提高自己和团队的效率?

技术人员和管理人员,两者是不同的。当有一天领导将你从一线技术人员被提拔为项目经理,也许这是你一直期盼的,也许这使你忐忑不安,也许这是你职业发展的转折,而你当时可能只是不情愿地答应老板“试一下”。 不管哪种情…

AWS边缘媒体安全交付方案

企业如何在AWS上的边缘站点,安全的将优质视频内容交付给用户,并且禁止哪些未经过授权的访问?九河云将基于AWS平台提供边缘媒体安全交付解决方案 解决方案详情 在通过 Amazon CloudFront 交付时,免受未经授权的访问。基于添加到交…

构建基于RHEL9系列(CentOS9,AlmaLinux9,RockyLinux9等)的支持63个常见模块的PHP8.1.20的RPM包

本文适用:rhel9系列,或同类系统(CentOS9,AlmaLinux9,RockyLinux9等) 文档形成时期:2023年 因系统版本不同,构建部署应略有差异,但本文未做细分,对稍有经验者应不存在明显障碍。 因软件世界之复杂和个人能力…

信息之板:数据看板如何点亮我们的生活

数据看板,作为数据可视化的一种应用形式,已经逐渐渗透到我们的日常生活中,发挥着越来越重要的作用。这种集中呈现和分析信息的工具,不仅在企业管理中大放异彩,更在我们的日常生活中展现出了强大的价值。下面我就以可视…

力扣精选算法100题——水果成篮(滑动窗口专题)

本题链接👉水果成篮 第一步:了解题意 我就按照实例1来进行对这题的理解。 1代表种类类型,这个数组里面有2个种类类型 ps:种类1和种类2 ,只不过种类1是有2个水果,种类2有一个水果,共计3个水果。 本题需要解…

Transformer原理与代码实现

Transformer原理与代码实现 概览 一、嵌入层 Embedding 二、位置编码 Positional Encoding 三、(整合)Transformer嵌入层 Transformer Embedding 四、带缩放的点积注意力机制 Scaled Dot-Product Attention 五、多头注意力 Multi-Head Attention 六…

simulink之Data Type Conversion

Data Type Conversion 将输入信号转换为指定的数据类型。 数据类型转换块将任何Simulink数据类型的输入信号转换为您为输出数据类型参数指定的数据类型。输入可以是任何实值或复值信号。如果输入是真实的,那么输出就是真实的。如果输入是复杂的,那么输出…

日处理100立方污水的污水成套设备需要哪些

对于处理100立方污水的污水成套设备,我们可以选择以下几种设备来完成任务。首先,我们需要一个污水处理设备,它可以帮助我们去除污水中的固体悬浮物和污染物。这个设备可以将污水中的固体物质过滤掉,使水变得清澈透明。同时&#x…

SQL语句错误this is incompatible with sql_mode=only_full_group_by解决方法

一、原理层面 这个错误发生在mysql 5.7.5 版本及以上版本会出现的问题: mysql 5.7.5版本以上默认的sql配置是:sql_mode“ONLY_FULL_GROUP_BY”,这个配置严格执行了"SQL92标准"。 很多从5.6升级到5.7时,为了语法兼容,大部…

如何做用户分层和标签体系

“活动作了一场接一场,简直要累死了,拉进来的客户也没有多少,投入产出完全不成比例,怎么办?“ “有那么多注册用户,但是GMV怎么才这么点,他们怎么不买啊,难道都是羊毛党?…

CompletableFuture原理与用法

CompletableFuture 是由Java8引入的,这让我们编写清晰可读的异步代码变得更加容易,该类功能比Future 更加强大。 什么是 CompletableFuture 在Java中CompletableFuture用于异步编程,异步通常意味着非阻塞,运行任务单独的线程&…

muduo网络库剖析——套接字Socket类

muduo网络库剖析——套接字Socket类 前情从muduo到my_muduo 概要socket网络编程socket编程接口介绍头文件socketbindlistenacceptaccept4connect 框架与细节成员函数使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库,考虑的肯定是众多…

BPF 程序与信号交互大揭秘

本文地址 : BPF 程序与信号交互大揭秘 | 深入浅出 eBPF 原文:Signaling from within: how eBPF interacts with signals 1. 背景2. 动机3. 场景:拦截 openat(2)4. 内核如何处理 SIGKILL 信号?5. 什么信号要后置处理6. 通过 BPF程…

arcgis javascript api4.x以basetilelayer方式加载arcgis发布的栅格切片服务

需求: 以arcgis js api的basetilelayer加载arcgis发布的栅格切片服务 效果图: 其中和tileinfo和lods,这样获取: https://map.geoq.cn/arcgis/rest/services/ChinaOnlineCommunity/MapServer/?fpjson urltemplate: …

Pod的控制器

Pod的控制器是什么? pod控制器:工作负载均衡。workload。用于管理pod的中间层。确保pod资源符合预期的状态。 预期状态: 副本数 容器的重启策略 镜像拉取策略 pod出现故障时的重启等等 Pod控制器的类型 1、 replicaSet:指…

RC4(CTFshow re2)

基本原理 RC4属于对称密码算法中的流密码加密算法 什么是对称密码? 使用同一个密钥进行加密和解密 什么是流密码? 一个字节一个字节的进行加密/解密 RC4密钥长度是可以变的,面向字节操作 它以一个足够大的表s为基础 对表进行非线性变换&…

Web3去中心化存储:重新定义云服务

随着Web3技术的崭露头角,去中心化存储正在成为数字时代云服务的全新范式。传统的云服务依赖于中心化的数据存储架构,而Web3的去中心化存储则为用户带来了更安全、更隐私、更可靠的数据管理方式,重新定义了云服务的未来。 1.摒弃中心化的弊端 …