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:技能一定要在項目經驗里面體現,關聯

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM