性能测试知识栈与面试必答题

发表于:2019-11-13 13:07

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:飞天小子    来源:测试驿栈

  技能树:
  完整的性能测试流程
  需求-计划-方案-环境搭建-用例设计-数据准备-场景设计-脚本开发-脚本执行-结果分析-问题反馈-性能调优-结果报告
  性能测试基础理论
  性能指标
  tps,qps,rps,hps,rt,vu,error
  测试类型
  压力测试,负载测试,并发测试,spike测试,稳定性测试,破坏性测试,验收测试
  应用领域
  能力验证:测试方法:验收测试,可靠性测试,压力测试,失效恢复测试
  规划能力:使性能满足增长的用户数的需求。负载,配置,压力测试
  性能调优:确定基准环境,负载,性能指标
  瓶颈发现:无可参照的指标,重现和定位性能瓶颈。并发测试
  基准比较:敏捷流程,固定迭代,比较结果
  工具:
  jmeter
  jmeter工作原理
  常用的元件,插件
  jmeter如何设计脚本(线程组,定时器,参数化,关联,断言)
  jmete的典型性能测试场景
  其它工具
  lr,wrk,ab,httpload,webbench,siege
  服务器/中间件
  JVM
  JVM原理和配置、堆栈原理、GC原理、OOM原因和表现
  Tomcat
  配置、使用方法、启动参数配置
  Nginx
  配置、使用方法
  Dubbo
  服务注册、消息队列
  服务器硬件资源
  cpu,磁盘,网络,内存,load和利用率,IO读写,发包率丢包率
  linux性能监听命令
  lscpu,uptime,free,vmstat,mpstat,sysstat,netstat,iostat,pidstat,jstack,jmap,
  数据库
  锁,索引,读写分离,分库分表,Nosql
  线程状态
  就绪(Runnable),运行(Running),阻塞(Blocked)
  可能的瓶颈点
  硬件,中间件,程序,操作系统,网络设备
  cpu,内存,磁盘,网络,jvm,线程池,jdbc连接池
  性能测试分析
  错误提示分析
  OutOfMemoryError: Java heap space (堆内存不够)
  OutOfMemoryError: GC overhead limit exceeded (代码内存过大或死循环)
  OutOfMemoryError: PermGen space (perm内存不够)
  OutOfMemoryError: Direct buffer memory (线程栈太小)
  指标监控分析
  cpu瓶颈
  响应时间慢
  空闲时间高(idle)
  系统占用高(sys)
  用户占用高(usr)
  运行队列长(r)
  load长期大于cpu个数
  内存瓶颈
  交换率过高(swap)
  系统cpu利用率很高
  内存溢出(OOM)
  磁盘
  磁盘利用率高
  等待队列过长(avgqu-sz)
  等待IO的百分比过高(await))
  用于IO的时间比例过高(util)
  缓存命中率过低(buffer cache)
  JVM
  fullgc频繁,考虑老年代内存是否太小
  YoungGc频繁,考虑年轻代内存是否太小
  YoungGc时间过长,程序中出现了大对象, 增加 -XX:PretenureSizeThreshold
  GC监控
  jstat -class 类加载统计
  jstat -compiler 编译统计
  jstat -GC 垃圾回收统计
  jstat -gccapacity 堆内存统计
  jstat -gccnew 年轻代垃圾回收统计
  jstat -gccold 老年代垃圾回收统计
  jstat -gcnewcapacity 年轻代内存统计
  jstat -gcoldcapacity 老年代内存统计
  jstat -gcmetacapacity 元空间内存统计
  jstat -gcutil gc整体统计
  分段排查定位分析
  服务器硬件瓶颈->网络瓶颈->应用瓶颈->服务器操作系统瓶颈(参数配置)->中间件瓶颈(参数配置,数据库,web服务器等)
  性能优化方法
  使用对象池减少对象创建
  增加本地缓存
  Nosql进行存储
  合并请求
  串行改并行
  同步改异步
  面试题
  描述你在岗位中的工作职责
  清楚的表达自己在上家公司主要做什么的,负责什么项目、平台的接口性能测试等等,不要把之前所工作的公司都介绍一遍。在不明白面试官意图的情况下滔滔不绝,结果不会太好
  你的项目测试怎么开展,有遇到哪些性能问题?
  需要根据自己公司的一些情况、和对性能测试的理解介绍下当前性能测试的流程。通过介绍流程,面试官可以初步了解你们测试的是否系统全面,哪个环节可能是有问题。是否有值得借鉴或学习的。这些都是加分项。
  “遇到哪些性能问题”,一般是想通过这个问题,了解求职者的经验是否丰富。稍微经验比较丰富点的求职者,可以列举出一堆各种各样的问题。大多数的回答:比如配置参数的调整,文件太大引起的内存泄漏。这样的回答比较官方,像是从网上抄来的,没有新意。
  针对性能问题有什么解决方案?
  资深的性能测试:可以把前因后果说的明明白白
  初级阶段的性能测试:通常会回答自己不是很清楚,提交研发了或者自己只是负责发现问题,定位解决问题是研发来做的。
  接着面试官可能会出2道题目,看下求职者的分析能力及定位问题的能力
  如何把性能测试引入项目?
  相关人员分析被测系统是否有性能相关的需求。相关人员包括运维、开发、运营等。
  项目暂时没有性能测试可能是暂时没有因为性能问题产生过故障或用户量暂时不高。平时多补充性能测试相关的知识,早晚用的上。
  面对大用户量的系统并发压力测试,主要是从哪几个方面去考虑关注点?
  主要关注系统的关键业务的响应时间、资源占用情况,TPS
  还要根据系统的特性来设计性能测试用例。比如有些系统有主从互备,我们就应该在考虑在其中一个故障情况下,系统的表现如何
  如何测试系统支持8000并发,允许100万用户同时在线的测试?
  首先要确认是否需求真的需要8000的并发。因为有些性能需求是由于需求人员或者会开发人员不清楚而随手拍脑袋写的。
  拿支持8000并发来说,到底是什么样的业务场景?s是否包含思考时间?这些都需要具体细化,需要我们测试人员和相关人员进一步确认。
  100万用户同时在线也需要进一步细化,这100万是登录后什么都不做?还是部分产生压力?。
  很多性能测试需求是需要进一步确认和细化的。
  根据需求设计用例:
  1:系统应确保在运行5~10年(每年1000万只表计数据处理能力,1000万只表每只表数据量大约2M)后对录入、文件导入、文件导出等操作时不得出现明显卡滞或数据溢出、丢失情况。
  2:系统长期多角色运行时其文件导入或导出速度不得低于100k/s。
  答:这几个需求涉及到:容量测试、可靠性测试 、负载测试。
  系统要求5--10年的未来性能储备。那就在执行时候设计一个按照目前标准来计算五年后的数据量情况来设计一个用例。如果5后的测试用例通过,那再设计一个10年的测试用例
  导入导出不得低于100K,要进一步确认是在什么网络下,不同网络对下载影响大的。同时也要进一步确认是并发导入导出。因为有些系统导入导出是指定人来做的,存在并发的情况很少。而有些是多人同时操作的。需根据具体操作业务确认
  在监控linux系统的时候怎么识别内存的使用情况和瓶颈点?
  对于大部分系统来说,关注一下是否内存泄漏,关注下是否使用了交换分区。是否与磁盘交互太多
  如何对系统的性能问题进行分类?
  比如说配置参数调整、数据库、程序问题占比大概多少,通过这个是想了解求职在性能测试方面的经验丰富与否以及个实际人能力。配置参数调整只能占我日常性能测试问题的10%,甚至不到,90%的问题是程序写的不合理和SQl使用不当导致的。一个稳定的系统环境是不会轻易去调整参数的,因为每一次调整存在风险。
  描述你的性能测试流程
  1.做性能需求分析,挑选用户使用最频繁的功能来做测试,比如:登陆,搜索,提交订单
  2.确定性能指标,比如:事务通过率为100%;90%的事务响应时间不超过5秒;并发用户为1000人时CPU和内存的使用率在70%以下
  3.性能测试计划,明确测试时间(通常在功能稳定后,如第一轮测试后进行)和测试环境和测试工具的选择
  4.搭建性能测试环境
  5.通过性能测试用例,编写性能测试脚本,准备性能测试数据
  6.性能测试脚本进行调优,设置检查点、参数化、关联、集合点、事务,调整思考时间
  7.设计性能测试场景,监控服务器,运行测试场景
  8.分析性能测试结果,判断性能瓶颈,反馈结果信息
  9.回归性能测试
  10.编写性能测试报告
  2.如何确定系统能够承载的最大用户数?
  通过负载测试,不断增加用户数,随着用户数的增加,各项性能指标也会相应产生变化
  如果出现了性能拐点,比如,当用户数达到某个数量级时,响应时间突然增长,那么这个拐点处对应的用户数就是系统能承载的最大用户数
  3.你们系统哪些地方(哪些功能)做了性能测试?
  我们选取了用户使用最频繁的场景来做性能测试,比如:登陆,打卡,请假,报销。
  4.你们的并发用户数是怎么确定的?
  1)、根据线上收集到的用户访问数据进行预估。
  2)、根据业务需求确定。
  5.你们性能测试在什么环境开展?
  搭建一套独立的性能测试环境进行测试,硬件设施尽量和线上环境保持一致
  6.你们性能测试什么时间做?
  功能测试之后,系统比较稳定的时候开展
  7.怎样分析性能测试结果?
  1)首先查看结果概况,查看事物有没有大面积失败,有没有大量的Error,响应时间有没有异常波动,如果都正常,表明测试结果可信
  2)分析性能指标,比如,响应时间,事务通过率,CPU等指标是否满足需求;如果测试结果不可信,分析异常的原因,开发修改后进行回归测试
  8.程序在单用户场景下运行成功,多用户运行则失败,提示连不上服务器。
  程序可能没有做多线程处理。
  9.如果性能测试脚本出现错误,从哪些方面分析?
  检查日志,定位出错的位置,然后做对应的修改
  语法出错:多打了个符合/空格;正则错误,导致关联失败
  9.如何判断系统的性能是变好了还是变坏了
  通过基准测试判断性能状况
  10.性能测试需求哪里来的?
  根据需求文档。如果需求不太合理,需要和相关人员进行讨论。比如,某个页面要求并发用户2000人,但是整个数据库的注册用户都没有1000人。很明显,做2000人并发是没有必要的。
  11.如何实现200用户的并发?
  在脚本对应的请求后添加集合点,设置隐性等待时间3s
  12.什么情况下要做关联,关联是怎么做的?
  根据需求文档或者抓包结果,对比找到需要关联的值,通过表达式获取,然后将变量传给下一个请求
  13.有验证码的功能,怎么做性能测试?
  1)将验证码暂时屏蔽,完成性能测试后,再恢复。
  2)使用万能验证码
  14.jmeter有哪些部件组成?
  测试计划,线程组,配置元件,监听器
  15.简述使用jmeter的步骤
  新建线程组-- 选择sampler — 设置代理服务器 — 添加结果树聚合报告 — 调试脚本 — 场景设计和运行 — 结果分析

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号