一、性能测试开展过程:
答:第一步:找产品沟通哪些接口需要压测,需要达到什么样的预期值TPS和响应时间)
第二步:编写测试计划,人员、时间周期、工具
第三步:环境搭建
第四步:造数据
第五步:场景测试(单接口基准测试、单接口压力测试、混合接口测试、稳定性测试)
第六步:结果分析,提交测试报告
第七步:等待开发性能调优,复测
二、交付一个性能测试项目,请阐述你的性能测试流程 偏高级的回答)
答:1:明确测试需求
2:基于需求设计测试用例,测试方案,测试计划
3:准备测试数据,测试账号(预估并发量),设计测试脚本(参数化,表达式,断言,控制器)
4:运行测试脚本,数据监听(响应时间,tps,活动线程),结果分析(判断性能瓶颈)
5:基本性能瓶颈做调优(tomcat线程池,jvm内存,swap内存,带宽)
6:调优之后做性能回归,和前期结果做对比,是否有明显的优化。
7:代码问题优化(自己定位或者交给开发定位)
8:性能测试报告。整理性能测试数据(包括调优之前和调优之后)
9:构建持久化的性能监听平台,监听线上的服务性能
性能测试贯穿项目始终,从需求分析到上线之后,都需要持续跟踪分析发现问题,响应解决问题
三、什么是性能测试?
答:测试系统有没有性能问题
考虑时间,空间
服务端资源是否足够?
响应时间是否超时?
系统是否足够稳定?
四、性能测试的核心原则是什么?
答:基于协议,多线程,场景设计
协议:所有的请求都是基于协议发出去 http,https,udp,tcp,mqtt
多线程:压力测试是基于java多线程原理,通过线程去模拟用户的行为
基于场景:控制器+定时器设计各种场景满足压测要求
并发场景、负载场景、稳定性、压力测试
… …
五、什么是负载?有哪些负载模式?
答:负载就是对服务器迭代式加压,从而寻求性能测试拐点
1:用户模式。不断增加的用户数带来的压力
1个用户1s内发起20个请求,rps=20/s
2:请求模式,不断增加的请求数带来的压力
10个用户,1s用户1s内发起1个请求,rps=10/s
不能单纯的通用用户去衡量压力,直接通过每秒请求数去衡量压力。直接从服务端考虑
六、性能测试的应用领域有哪些?
答:1、能力验证:乙方向甲方交付项目时,声明项目的性能数据。
2、瓶颈分析:在能力验证的过程中可能会发现一些瓶颈,通过技术手段分析瓶颈,得到分析数据,为后续调优做理论依据。
3、响应超时:什么负载量的时候出现超时现象?
4、tps达到瓶颈,波动剧烈:tps瓶颈点在哪里?,在什么地方出现性能衰减?
5、性能调优:在得到瓶颈分析数据之后,做性能调优。
6、降低超时,提高tps,减少抖动。。
7、容量规划:基于未来。为将来的用户激增提前做准备
8、数据库扩容
9、服务端硬件优化(增加cpu,扩充磁盘,提升带宽,分布式,负载均衡。。。)
七、压力工具的工作原理是什么?
答:jmeter工作原理:基于协议,通过多线程的方式模拟用户行为,设计各种场景压测服务端,得到性能数据,分析性能瓶颈
八、性能测试基本思路是什么?
答:1、测什么:明确测试目标(明确需求)
2、怎么测:怎么设计场景?
测试计划,测试用例,测试方案、数据准备、参数化,表达式,断言、场景设计(并发,负载,压测)
得到性能测试结果、测试结果验证
验证结果数据是否符合预期
如果预期响应时间是3s,但是实际结果响应时间达到了5s 不合格
预期最大tps需要达到500,但是实际最大的tps只有300 不合格
八、测试哪些关键场景?
答:1、浏览器层面:
web端和app端(H5页面)
关注首屏时间(页面打开到完全呈现)
脚本加载时间,cpu占用,fps频率(帧频率越高,流畅度越高)
2、接口层面
权限划分
普通用户权限(非常多的的用户)
大并发场景:包括查询,表单提交
数据量也需要考虑(电商平台,门户网站)
负载场景:用户长期在线访问,对资源的要求会很高
3、管理员权限(几个用户)
大数据量的场景(管理几十万用户数据)
列表查询时间,分页时间
数据下载(excel,数据导出)是否会内存溢出
mysql数据库是否会死锁,sql查询是否异常
4、超管(1个)
大数据量的场景(管理几十万用户数据)
九、前端性能测试关注哪些点?了解哪些前端性能优化方法?
答:首屏时间:页面完全展现需要的时间
白屏时间:页面第一帧画面出现之前的时间
脚本加载时间,fps,cpu,network
前端性能优化:使用缓存,压缩图片,压缩js,css,gc回收优化,js前置
十、解释常用的性能指标的名称与具体含义
答:1、用户角度
响应时间(rt)从发起请求,到接口响应,到页面渲染
错误率error)
2、 服务端角度
rps(request persecond)每秒请求数,用户发起的
tps(transaction persecond)每秒完成事物数,服务端决定的
通过rps指标,来测试tps,从而衡量服务端性能。
3、浏览器层面
qps(query perecond)每秒查询接口数(uv pv)
刷新一次页面,调用了三个接口
hps(hit persecond)每秒点击率
十一、性能测试类型有哪些?按顺序描述
答:并发数先确定
基准测试(得到性能数据,为后续的回归测试做理论依据)
单接口基准测试
容量基准测试
负载测试
不断增加负载量(压力),一直到瓶颈点出现,可以停止
压力测试
1:稳定性压测
假设瓶颈点在300tps,用对应的负载量的80%-90%做持续性(几小时或者几天)的压测。目的是发现稳定性问题(内存溢出等等)
2:破坏性压测
用对应负载量的100%或者150%做压测,直接让服务器出现异常。目的是及早的暴露问题
失效恢复测试
服务端出现异常之后能不能及时恢复
十二、什么是集合点?设置集合点有什么意义?jmeter中如何设置集合点?
答:集合点更多的运用在并发测试
为了让压力尽可能的落在同一个时间点
十三、什么是固定等待和隐式等待?
答:固定等待:超时时间=0
线程数一定要>=集合数。一定要集合完毕才发起请求
隐式等待:超时时间>0
达到超时时间范围,无论集合多少线程都会发起请求
十四、你在测试中遇到过哪些性能问题?
答:h5页面响应时间过长
h5的分页经常卡死,sql查询过多,数据量过大
导出excel时间过长,页面503,后台报内存溢出
功能涉及到算法的时候,一定要在测试环境用大量数据去模拟
只要点击,后台cpu立刻就是300%
十五、你在性能场景设计中用到哪些方法?
答:参数化,关联,断言,jdbc连接
十六、什么是关联,如何动态关联?有哪几种关联的方法?
答:正则关联,json关联,xpath关联
保证接口上下游是衔接的
十七、jmeter负载测试中怎么保持session会话?
答:KaTeX parse error: Expected group after '_' at position 2: {_̲_setPropertyco…{counter},${COOKIE_beegosessionID},)} 存储session
${__Pcookie,)} 从属性表提取session
十八、什么是Ramp up?你如何设置?
答:线程启动的时间
ramp越大,单位时间内的压力越小。ramp=0表示单位时间压力无穷大,线程启动时间无穷小。ramp=0不代表时间为0
十九、如何识别性能瓶颈?
答:随着负载不断升高,tps也是不断升高的,正常逻辑
随着负载不断增加,tps不再增加,甚至下降。表示单位线程的tps实际在衰减。tps的瓶颈点
二十、简述堆区的空间分配和gc原理
答:年轻代
1个eden
2个存活区(S1和S2)
老年代
GC(垃圾回收)
内存溢出:OOMOUT OF memory)
1:运行内存>当前空间剩余内存
2:垃圾不能及时回收
年轻代GC:
1:最初的对象是存活在eden;伊甸园空间满了之后,会进行第一次GC;
2:第一次GC之后,依然存活的对象,会被丢到S1(第一个存活区);
3:S1初次满了之后,会进行第二次GC(年轻代GC)
4:第二次GC之后,依然存活的对象,会被丢到S2(第二个存活区),同时清空伊甸园和S1;
5:S2满了之后,会进行第三次GC,依然存活的对象,会再次被丢到S1,同时清空伊甸园和S2;
年轻代里面的垃圾碎片都是比较小;老年代的碎片比较大;
让垃圾尽可能的在年轻代里面进行回收;否则会影响老年代空间的整理;
老年代GC:
1:年轻代的GC年龄超出阈值(默认16次),会把年轻代依然存活的对象扔到老年代;
2:对象的尺寸超出了阈值;对象尺寸超出了阈值,会直接进入老年代;
3:对象的大小超出了年轻代剩余的空间大小,直接进入老年代;
老年代GC=fullGC一般默认)
1:老年代剩余空间不足以对象进入;老年代会直接进行一次fullGC;
2:老年代的对象无法进行GC;老年代会进行一次fullGC;
老年代的对象尺寸都比较大,所以gc时间会很长,同时所有线程会出现暂停;
jvm调优是为了规避fullgc的频繁出现;会影响到tps;
jstat -gcutil pid 1000 监听gc情况
jmap -heap pid 查看内存空间分配情况
jvm参数调优
调堆内存空间,调年轻代的gc年轻,调空间分配比例(老年代:年轻代 / eden:存活区);调gc回收器,并行回收机制
二十一、什么是内存溢出?
答:1:运行需要的内存大于空间剩余内存;会出现内存溢出
2:垃圾无法进行GC;会出现内存溢出
二十二、简述cpu的工作原理
答:分析cpu参数:lscpu
CPUs): 2 cpu个数
Threads) per core: 1 每核的线程
Cores) per socket: 1 每个卡槽的核
Sockets): 2 每个cpu的卡槽
双cpu,4核多线程;每个cpu是双核;
cpu负载和利用率
可运行的进程(双r)+不可中断的进程(block)
running(运行中的)+runnable(等待运行的)+block(等待io)=cpu的负载
利用率:cpu双线程如果都在调度java进程,表示当前cpu利用率是100%;
cpu双线程如果只有一个java进程在调度,表示当前cpu利用率是50%;
最理想的情况:每个cpu线程都调度一个java进程,此时的负载=4;
不理想的情况:java进程数远大于cpu线程数,此时负载会远远超出cpu线程数;不能及时调度的进程就会排队;
cpu会给运行中的和等待运行的进程数均匀分配时间片;
cpu调度是以时间片为基准的;假设调度时间为1ns,调度超出1ns之后,进程会被挂起;切换到下一个进程
队列越长,cpu时间片就越小,调度时间就会越短,切换的越快;切换的过于频繁,cpu利用率就会很低,线程也会暂停
进程是最小资源分配单元;
线程最小调度单元;
二十三、什么是上下文切换?哪些场景会存在上下文切换?
答:1:线程的切换
切换的时间加载寄存器和计数器
保存数据和位置信息,然后切换到下一个线程并读取它的数据和位置信息
2:进程切换
3:特权切换
系统调用(切换两次上下文)
用户空间向内核空间发起申请,内核空间返回api给用户空间调用;
二十四、什么是swap空间?oomkiller了解吗?怎么开启swap空间
答:swap:从磁盘空间开辟的虚拟用户空间。
cat /proc/sys/vm/swappiness 查看swap比例
当内存空间使用超出了比例,会启用swap空间(内存交换)
so 换出
si 换入
swapon -a 启用swap
sudo sysctl vm.swappiness=10 临时修改swappiness比例
vim /etc/sysctl.conf 永久修改swappiness比例
学习安排上
如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片进群即可自行领取。
查看全文
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/286736.html
如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!
相关文章:
2022最新性能测试面试题(带答案)
一、性能测试开展过程:
答:第一步:找产品沟通哪些接口需要压测,需要达到什么样的预期值TPS和响应时间)
第二步:编写测试计划,人员、时间周期、工具
第三步:环境搭建
第四步:造数……
近期Java杂项问题
Data不会为static变量提供get/set。 Data不会为final变量提供set。 ConfigurationProperties加载static静态属性为null的问题 解决:ConfigurationProperties默认是调用非static Setter方法,把静态的Setter方法的static去掉就可以了 Value注入静态属性 解……
Kubernetes 平台的生态系统介绍
Kubernetes作为一个容器云管理平台,与底层的基础架构、企业周边的公共服务形成了一个完备的生态系统。如图1所示,一个完备的Kubernetes系统在设计和实现时,需要考虑多层面的高可用性问题。 图1 Kubernetes 平台的生态系统因此,解……
Transformer 训练优化
前言
自 BERT 出现以来,NLP 领域已经进入了大模型的时代,大模型虽然效果好,但是毕竟不是人人都有着丰富的 GPU 资源,在训练时往往就捉襟见肘,出现显存 out of memory 的问题,或者训练时间非常非常的久&……
JavaScript监听DOM节点变化事件
JS监听页面DOM节点的变化DOMSubtreeModifiedDOMNodeInsertedDOMNodeRemovedDOMNodeInsertedIntoDocumentDOMNodeRemovedFromDocumentDOMAttrModifiedDOMCharacterDataModifiedAPI描述浏览器兼容DOMSubtreeModified监听元素的DOM结构发生变化IE8不支持DOMNodeInserted监听父元素……
冬季,该如何对扬尘进行管理?
冬季降水少,大风天气多,如今随着各个城市的全面放开,城区里面车辆来来往往更多,所以非常容易产生道路扬尘污染。扬尘污染不仅会降低空气质量,影响居民的正常出行,而且还会对人们的身体尤其是呼吸系统产生健……
压 力 测 试
压力测试目标压测对象压测数据clientserver压测结果压测工具目标
挖掘系统瓶颈点,优化系统性能建立性能基线性能回归系统稳定性网络/线路延迟稳定性
压测对象
后端前端业务指标
压测数据
client
qpsrt(响应时间)成功率页面平均响应时间……
从投资人发现“新大陆”,看“产融星城”为何成?
文丨熔财经
作者|陈小江
“我从来不把《我要投资》节目看作是秀(综艺),要知道《我要投资》是在前面的,秀(综艺)只是一种形式而已。本质上,(参加节目)还是为了投资”。 ……
Java多线程处理笔记
学习视频:598-JavaSE进阶-多线程概述_哔哩哔哩_bilibili 目录
多线程概述
进程和线程的关系 多线程并发的理解
分析程序存在几个线程 实现线程的第一种方式
实现线程的第二种方式 采用匿名内部类的方式
线程生命周期
获取线程的名字 获取当前线程对象
线程的sleep方法 ……
分布式锁主动续期的入门级实现-自省 | 简约而不简单
一、背景
在《# 分布式锁上-初探》中有提到一个分布式锁应具备的功能特点中有避免死锁这一条: 如果某个客户端获得锁之后处理时间超过最大约定时间,或者持锁期间内发生了故障导致无法主动释放锁,其持有的锁也能够被其他机制正确释放……
杭州旭航集团,申请纳斯达克IPO上市,募资9800万美元
来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,为中国企业提供数字内容营销服务的杭州旭航网络科技有限公司的控股公司Xuhang Holdings Ltd以下简称:旭航集团),近期已向美国证券交易委员会(SEC)提……
深度学习快速参考:11~13
原文:Deep Learning Quick Reference 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只关心如何实现目……
基于copula的风光联合场景生成与缩减
目录
1 主要内容
风光出力场景生成方法
2 部分程序
3 程序结果
4 程序链接
点击直达! 1 主要内容
该程序方法复现《融合风光出力场景生成的多能互补微网系统优化配置》风光出力场景生成部分,目前大多数研究的是不计风光出力之间的相关性影响&……
TS 使用自动提示生成对象中的键
TS 使用自动提示生成对象中的键
使用 plain object 而不是 class 的原因主要是在于 redux 中保存的对象需要为可序列化的对象。当然,具体操实现的时候肯定是可以无视这个需求的,不过 Redux 团队强烈建议使用可序列化对象,具体的官方文档说明……
Spring Boot概述(一)
1. SpringBoot 概述
1.1 SpringBoot 概念
SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的……
计算机笔试/面试常见逻辑题/智力题汇总
说明:按种类汇总,难度不分先后,做了分级罗列,方便后续扩充,大家有比较有意思的题目可以在讨论区讨论。 下面有的题题解相对复杂的直接参考了网上的一些解答,而有的题解我认为并不好的也做了补充,……
OpenAI文档翻译——搭建第一个自己的ChatGPT应用
这篇主要是讲了重头到位创建一个基于OpenAI API的应用程序的过程,同时给出了Node.js、Python版本的实例代码。应用程序的构建总体来说是很简单的就是一个接口调用,前提是我们需要提供密匙。
如果想要获取更好的结果返回一个是可以给模型提供一些列子从而……
python以及PyCharm工具的环境安装与配置
这里以Windows为例
Python的安装
当然是到Python官网下载咯,https://www.python.org/downloads/点我直达,如图: 可以下载最新版本,可以下拉找到之前特定的版本安装,如图: 这里先择的是最新版的进行安装……
JavaScript【六】JavaScript中的字符串String)
文章目录🌟前言🌟字符串String)🌟单引号和双引号的区别🌟属性🌟 length :字符串的长度🌟 方法🌟 str.charAtindex);🌟 str.charCodeAtindex);🌟 String.fromCharCode……
获取文件MD5小案例(未拆分文件)
文章目录前端获取MD5后端获取MD5前端获取MD5
1、引入js
<script src"js/spark-md5.min.js" type"text/javascript"></script>注:spark-md5库GitHub链接 2、这里是一个按钮和被隐藏调的<input/>标签 <body><button……
编程日记2023/4/16 14:57:19