zoukankan      html  css  js  c++  java
  • jmeter性能测试面试题二【多测师_王sir】

    1.什么是性能测试?
    测试系统有没有性能问题
    考虑时间,空间
    服务端资源是否足够?
    响应时间是否超时?
    系统是否足够稳定?
    
    2.性能测试的核心原则是什么?
    基于协议,多线程,场景设计
    协议:所有的请求都是基于协议发出去 http,https,udp,tcp,mqtt
    多线程:压力测试是基于java多线程原理,通过线程去模拟用户的行为
    基于场景:控制器+定时器设计各种场景满足压测要求
        并发场景
        负载场景
        稳定性
        压力测试
        。。。。。。
    jmeter工作原理:基于协议,通过多线程的方式模拟用户行为,设计各种场景压测服务端,得到性能数据,分析性能瓶颈
    
    3.性能测试的应用领域有哪些?
    能力验证:乙方向甲方交付项目时,声明项目的性能数据。
    例如:向甲方声明能支撑500人1s内同时登录,响应时间在2s以内。出具性能测试报告去证明我声明的能力。
    
    瓶颈分析:在能力验证的过程中可能会发现一些瓶颈,通过技术手段分析瓶颈,得到分析数据,为后续调优做理论依据。
        响应超时:什么负载量的时候出现超时现象?
        tps达到瓶颈,波动剧烈:tps瓶颈点在哪里?,在什么地方出现性能衰减?
    
    性能调优:在得到瓶颈分析数据之后,做性能调优。
        降低超时,提高tps,减少抖动。。
    
    容量规划:基于未来。为将来的用户激增提前做准备
        数据库扩容
        服务端硬件优化(增加cpu,扩充磁盘,提升带宽,分布式,负载均衡。。。)
    
    4.压力工具的工作原理是什么?
    jmeter工作原理:基于协议,通过多线程的方式模拟用户行为,设计各种场景压测服务端,得到性能数据,分析性能瓶颈
    
    5.性能测试基本思路是什么?
    
    测什么:明确测试目标(明确需求)
    怎么测:怎么设计场景?
        测试计划,测试用例,测试方案
        数据准备
        参数化,表达式,断言
        场景设计(并发,负载,压测)
        得到性能测试结果
    测试结果验证
        验证结果数据是否符合预期
            如果预期响应时间是3s,但是实际结果响应时间达到了5s 不合格
            预期最大tps需要达到500,但是实际最大的tps只有300 不合格
    
    6.交付一个性能测试项目,请阐述你的性能测试流程
        1:明确测试需求
        2:基于需求设计测试用例,测试方案,测试计划
        3:准备测试数据,测试账号(预估并发量),设计测试脚本(参数化,表达式,断言,控制器)
        4:运行测试脚本,数据监听(响应时间,tps,活动线程),结果分析(判断性能瓶颈)
        5:基本性能瓶颈做调优(tomcat线程池,jvm内存,swap内存,带宽)
        6:调优之后做性能回归,和前期结果做对比,是否有明显的优化。
        7:代码问题优化(自己定位或者交给开发定位)
        8:性能测试报告。整理性能测试数据(包括调优之前和调优之后)
        9:构建持久化的性能监听平台,监听线上的服务性能
    
    性能测试贯穿项目始终,从需求分析到上线之后,都需要持续跟踪分析发现问题,响应解决问题
    
    7.测试哪些关键场景?
        浏览器层面:
            web端和app端(H5页面)
                关注首屏时间(页面打开到完全呈现)
                脚本加载时间,cpu占用,fps频率(帧频率越高,流畅度越高)
        接口层面
            权限划分
            普通用户权限(非常多的的用户)
                大并发场景:包括查询,表单提交
                数据量也需要考虑(电商平台,门户网站)
                负载场景:用户长期在线访问,对资源的要求会很高
    
            管理员权限(几个用户)
                大数据量的场景(管理几十万用户数据)
                    列表查询时间,分页时间
                    数据下载(excel,数据导出)是否会内存溢出
                    mysql数据库是否会死锁,sql查询是否异常
            超管(1个)
                大数据量的场景(管理几十万用户数据)
    
    8.前端性能测试关注哪些点?了解哪些前端性能优化方法?
        首屏时间:页面完全展现需要的时间
    
        白屏时间:页面第一帧画面出现之前的时间
    
        脚本加载时间,fps,cpu,network
    
        前端性能优化:使用缓存,压缩图片,压缩js,css,gc回收优化,js前置
    
    9.解释常用的性能指标的名称与具体含义
        用户角度
            响应时间(rt)从发起请求,到接口响应,到页面渲染
            错误率(error)
        
        服务端角度
            rps(request persecond)每秒请求数,用户发起的
            tps(transaction persecond)每秒完成事物数,服务端决定的
        通过rps指标,来测试tps,从而衡量服务端性能。
    
        浏览器层面
            qps(query perecond)每秒查询接口数(uv pv)
            刷新一次页面,调用了三个接口
            hps(hit persecond)每秒点击率
    
    10.性能测试类型有哪些?按顺序描述
    并发数先确定
        基准测试(得到性能数据,为后续的回归测试做理论依据)
            单接口基准测试
            容量基准测试
        负载测试
            不断增加负载量(压力),一直到瓶颈点出现,可以停止
        压力测试
            1:稳定性压测
                假设瓶颈点在300tps,用对应的负载量的80%-90%做持续性(几小时或者几天)的压测。目的是发现稳定性问题(内存溢出等等)
            2:破坏性压测
                用对应负载量的100%或者150%做压测,直接让服务器出现异常。目的是及早的暴露问题
        失效恢复测试
            服务端出现异常之后能不能及时恢复
    
    11.什么是集合点?设置集合点有什么意义?jmeter中如何设置集合点?
        集合点更多的运用在并发测试
        为了让压力尽可能的落在同一个时间点
    
    12.什么是固定等待和隐式等待?
        固定等待:超时时间=0
            线程数一定要>=集合数。一定要集合完毕才发起请求
        隐式等待:超时时间>0
            达到超时时间范围,无论集合多少线程都会发起请求
            
    13.什么是负载?有哪些负载模式?
        负载就是压力
            1:用户模式。不断增加的用户数带来的压力
                1个用户1s内发起20个请求,rps=20/s
            2:请求模式,不断增加的请求数带来的压力
                10个用户,1s用户1s内发起1个请求,rps=10/s
            不能单纯的通用用户去衡量压力,直接通过每秒请求数去衡量压力。直接从服务端考虑
    
    14.你在测试中遇到过哪些性能问题?
        h5页面响应时间过长
        h5的分页经常卡死,sql查询过多,数据量过大
        导出excel时间过长,页面503,后台报内存溢出
        功能涉及到算法的时候,一定要在测试环境用大量数据去模拟
    
        123456789
        23456789
        3456789
    
        点击按钮,任意两个数字之和等于5,就展示出来
        只要点击,后台cpu立刻就是300%
    
    15.你在性能场景设计中用到哪些方法?
        参数化,关联,断言,jdbc连接
    
    16.什么是关联,如何动态关联?有哪几种关联的方法?
        正则关联,json关联,xpath关联
        保证接口上下游是衔接的
    
    17.jmeter负载测试中怎么保持session会话?
        ${__setProperty(cookie${counter},${COOKIE_beegosessionID},)} 存储session
        ${__P(cookie,)} 从属性表提取session
    
    18.什么是Ramp up?你如何设置?
        线程启动的时间
        ramp越大,单位时间内的压力越小。ramp=0表示单位时间压力无穷大,线程启动时间无穷小。ramp=0不代表时间为0
    19.如何识别性能瓶颈?
        1: 随着负载不断升高,tps也是不断升高的,正常逻辑
        2:随着负载不断增加,tps不再增加,甚至下降。表示单位线程的tps实际在衰减。tps的瓶颈点
    
    20.非gui下如何参数化运行场景?
    
    ----------------------------------------------------------------------------------
    ----------------------------------------------------------------------------------
    
    
    21.简述堆区的空间分配和gc原理
        年轻代
            1个eden
            2个存活区(S1和S2)
        老年代
            GC(垃圾回收)
        内存溢出:OOM(OUT 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回收器,并行回收机制
    
    22.什么是内存溢出
        1:运行需要的内存大于空间剩余内存;会出现内存溢出
        2:垃圾无法进行GC;会出现内存溢出
    
    23.简述cpu的工作原理
        分析cpu参数:lscpu
        CPU(s):                2 cpu个数
        Thread(s) per core:    1 每核的线程
        Core(s) per socket:    1 每个卡槽的核
        Socket(s):             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利用率就会很低,线程也会暂停
    
        进程是最小资源分配单元;
        线程最小调度单元;
    
    
    24.什么是上下文切换?哪些场景会存在上下文切换?
    1:线程的切换
    切换的时间加载寄存器和计数器
    保存数据和位置信息,然后切换到下一个线程并读取它的数据和位置信息
    2:进程切换
    
    3:特权切换
        系统调用(切换两次上下文)
            用户空间向内核空间发起申请,内核空间返回api给用户空间调用;
    
    26.什么是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比例
    
    27.什么是进程优先级?
        pr和ni 
        ni范围 -19---+20,ni值越小,进程优先级越大;ni越大,进程优先级越小;
        优先级越高的进程,优先调度cpu,时间片分配的越多;
    
    28.吞吐量大幅度波动有哪些原因?
        上下文切换的过快;
        gc次数过于频繁;
    
    29.哪些现象说明了IO瓶颈?
    await=io等待时间=io处理时间+io队列时间
    svctm=io处理时间
    await与svctm的差值越大,表示队列时间越长
    util磁盘繁忙度,值越大,磁盘越繁忙;
    
    30.了解哪些资源监控命令?
        top家族
        top,htop,atop,iftop(查看网络),iotop(查看io)
        sysstat家族
        vmstat vmstat 1 10 
        mpstat mpstat -P ALL 1 10 查看逻辑cpu
        iostat iostat -x -k -d 1 10 查看io处理
        netstat 查看网络情况
        pidstat 查看进程
    31.如何用命令行生成测试报告?
        jmter -J{参数名} -r{host} -n -t XX.jmx -l XX.jtl -e -o httpreport
    
    
    简历:
    1:断句,言简意赅,让面试官能一眼找到关键词
    2:突出主题
    3:突出能力
    4:工作经验突出价值。从字里行间看出一个人在团队中从事的角色和价值
        最low的词汇:参与,做了,完成。。。
        正确的词汇:负责XXX,带领XXX,参与核心功能的XXX测试
    5:项目经验要由远及近,由低到高;看出一个人的经历和成长
    6:细节问题:标点,错别字,字体调整,简历格式
    7:技能一定要在项目经验里面体现,关联
  • 相关阅读:
    java的一些基本概念──JDK 、j2se 、j2sdk...
    shell函数的调用执行
    ICE第三方包简介及安装&ICE安装(linux)
    http状态码
    Grep命令学习笔记(转)
    STL map用法详解
    ubuntu下安装subversion客户端
    linux下安装Tomcat及设置JSP环境
    ICE总结
    struts开发
  • 原文地址:https://www.cnblogs.com/xiaoshubass/p/13926067.html
Copyright © 2011-2022 走看看