效能測試崗位常見面試題答案
一、基礎篇
1、較為完整的效能測試的流程
一個完整的效能測試流程
2、效能測試的基礎理論、常見術語
1) LR LoadRunner HP公司提供的一種自動負載測試工具,能預測系統行為,優化效能,是目前業界市場佔有率最高的效能測試工具。
2) Transaction 交易(事務) 在測試指令碼中定義的、完成一種業務操作的過程,效能測試主要關注定義事務的處理能力及其響應時間。每個測試指令碼中根據需要可定義多個事務。
3) TPS 每秒事務數 Transations per Second,系統每秒能夠處理的事務數量,是衡量系統處理能力的重要效能指標。交易有兩種理解,一種是業務人員角度的一筆業務過程;另外一種是系統角度的一次交易申請和響應過程。前者稱為業務交易過程,後者稱為事務交易過程的STEP。兩種交易指標都可以評價應用系統的處理能力,一般的建議與系統交易日誌保持一致,以便於統計業務量或者交易量。
4) ART 平均響應時間 Average Response Time,各事務響應時間的統計平均值,是使用者視角的軟體效能的主要體現。計算的是端到端的時間,說的通俗一點,從點選Web頁面中的某個控制元件,到從資料庫返回資料到客戶端,整個過程都被計算在交易的響應時間內。交易響應時間的指標包括最小響應時間(Min)、平均響應時間(Avg)、最大響應時間(Max)、90%交易的最大響應時間(90%)等。
5) VU 虛擬使用者 LoadRunner中特定術語,為模擬現實中的實際使用者,測試軟體使用虛擬使用者代替真實的使用者。
6) Scenario 場景 LoadRunner中專門術語。它是所有測試資源包括測試指令碼、執行設定、執行使用者數等的集合。在這個場景中,可以定義併發使用者的數目,定義要執行的指令碼,或者說執行的流程型別。在一個場景中,可以是單個流程,也可以是多個流程的混合。
3、效能測試模型、型別
1)測試模型
| 交易名稱|場景交易量配比 |
|預約掛號|25%|
| 自助繳費 | 40%|
|報告查詢| 35%|
2)測試型別
a、單交易基準測試
b、單交易負載測試
c、混合壓力測試
d、穩定性測試
e、可靠性測試
f、全鏈路測試
4、HTTP、TCP協議相關知識
網路由下往上分為物理層、資料鏈路層、網路層、傳輸層、會話層、表示層和應用層。
通過初步的瞭解,我知道IP協議對應於網路層,TCP協議對應於傳輸層,而HTTP協議對應於應用層。
5、連線池、執行緒相關知識
連線池是建立和管理一個連線的緩衝池的技術,這些連線準備好被任何需要它們的執行緒使用。
程序與執行緒的區別:通俗點講,開啟QQ相當於打開了一個程序、QQ聊天、發文件、接視訊屬於一個個執行緒。
二、工具篇
1、Jmeter
①、Jmeter的工作原理是什麼?
jmeter可以作為web伺服器與瀏覽器直接的代理閘道器,以便捕獲瀏覽器的請求和web伺服器的響應,如此就可以很容易地生成效能測試指令碼。有了效能測試指令碼,jmeter就可以通過執行緒來模擬真實使用者對web伺服器的訪問壓力。這與LoadRunner的工作原理基本一致
②、常用的元件、各自的作用是什麼?
1.測試計劃(Test Plan)是使用 JMeter 進行測試的起點,它是其它 JMeter 測試元件的容器。
2.執行緒組(Thread Group)代表一定數量的併發使用者,它可以用來模擬併發使用者傳送請求。
3.取樣器(sampler)定義實際的請求內容,被執行緒組包含,我們主要用HTTP請求。
4.監聽器(Listener)
5.邏輯控制器(Logic Controller)
6.斷言(Assertions)
7.配置元件(Config Element)
8.前置處理器(Pre Processors)和後置處理器(Post Processors)
9.定時器(Timer)
③、幾個典型的場景,如何基於jmeter設計測試指令碼?
④、是否會二次開發?如果會,怎麼二次開發的(介紹大概過程和原因)?
2、Loadrunner
3、其他開源/商業效能測試工具
比如:Ngrinder、Locust、Wrk、Artillery等;
4、前端、伺服器、資料庫效能監測工具
nmon、spotlight、德魯伊
1、服務叢集
伺服器叢集就是指將很多伺服器集中起來一起進行同一種服務,在客戶端看來就像是隻有一個伺服器。叢集可以利用多個計算機進行平行計算從而獲得很高的計算速度,也可以用多個計算機做備份,從而使得任何一個機器壞了整個系統還是能正常執行。
2、負載均衡
負載均衡原理、實現方式
1)http重定向協議實現負載均衡
原理:根據使用者的http請求計算出一個真實的web伺服器地址,並將該web伺服器地址寫入http重定向響應中返回給瀏覽器,由瀏覽器重新進行訪問。
2)dns域名解析負載均衡
原理:在DNS伺服器上配置多個域名對應IP的記錄。例如一個域名www.baidu.com對應一組web伺服器IP地址,域名解析時經過DNS伺服器的演算法將一個域名請求分配到合適的真實伺服器上。
3)反向代理負載均衡(Nginx)
原理:反向代理處於web伺服器這邊,反向代理伺服器提供負載均衡的功能,同時管理一組web伺服器,它根據負載均衡演算法將請求的瀏覽器訪問轉發到不同的web伺服器處理,處理結果經過反向伺服器返回給瀏覽器。
4)IP負載均衡
原理:在網路層通過修改目標地址進行負載均衡。
5)資料鏈路層負載均衡
原理:在資料鏈路層修改Mac地址進行負載均衡。
3、快取應用
快取就是在記憶體中儲存的資料備份,當資料沒有發生本質變化的時候,我們避免資料的查詢操作直接連線資料庫,而是去 內容中讀取資料,這樣就大大降低了資料庫的讀寫次數,而且從記憶體中讀資料的速度要比從資料庫查詢要快很多。
Redis
1)Redis不僅僅支援簡單的k/v型別的資料,同時還提供list,set,zset,hash等資料結構的儲存。
2)Redis支援master-slave(主-從)模式應用
3)Redis支援資料持久化,可以將記憶體中的資料保持在磁碟中,重啟的時候可以再次載入進行使用。
4)Redis單個value的最大限制是1GB,memcached只能儲存1MB的資料。
4、分散式框架
Dubbo是 阿里巴巴公司開源的一個高效能優秀的服務框架,使得應用可通過高效能的 RPC 實現服務的輸出和輸入功能,可以和 pring框架無縫整合。
5、全鏈路壓測
基於實際的生產業務場景、系統環境,模擬海量的使用者請求和資料對整個業務鏈進行壓力測試,並持續調優的過程
四、伺服器&中介軟體篇
1、JVM
https://blog.csdn.net/qq_29234631/article/details/83620897
2、Tomcat
1)、引數說明
-server:一定要作為第一個引數,在多個CPU時效能佳
-Xms:初始Heap大小,使用的最小記憶體,cpu效能高時此值應設的大一些
-Xmx:java heap最大值,使用的最大記憶體
上面兩個值是分配JVM的最小和最大記憶體,取決於硬體實體記憶體的大小,建議均設為實體記憶體的一半。-XX:PermSize:設定記憶體的永久儲存區域
-XX:MaxPermSize:設定最大記憶體的永久儲存區域
-XX:MaxNewSize:
-Xss 15120 這使得JBoss每增加一個執行緒(thread)就會立即消耗15M記憶體,而最佳值應該是128K,預設值好像是512k.
+XX:AggressiveHeap 會使得 Xms沒有意義。這個引數讓jvm忽略Xmx引數,瘋狂地吃完一個G實體記憶體,再吃盡一個G的swap。
-Xss:每個執行緒的Stack大小
-verbose:gc 現實垃圾收集資訊
-Xloggc:gc.log 指定垃圾收集日誌檔案
-Xmn:young generation的heap大小,一般設定為Xmx的3、4分之一
-XX:+UseParNewGC :縮短minor收集的時間
-XX:+UseConcMarkSweepGC :縮短major收集的時間
提示:此選項在Heap Size 比較大而且Major收集時間較長的情況下使用更合適。
2)、Tomcat 自身的啟動設定:
在%tomcat_home%/bin目錄下的” catalina.bat”(Linux 環境剛為”catalina.sh”)
開啟編輯此檔案,在”echo Using CATALINA_BASE: %CATALINA_BASE%”
前加上:
set JAVA_OPTS=%JAVA_OPTS% -server -Xms4096m -Xmx4096m -XX:PermSize=128M -XX:MaxPermSize=256m -XX:NewSize=256m -XX:MaxNewSize=512m
完整片斷如下:
echo 新增 JAVA_OPTS="-server -Xms4096m -Xmx4096m -XX:PermSize=128M -XX:MaxPerSize=256m -XX:NewSize=256m -XX:MaxNewSize=512m"
set JAVA_OPTS=%JAVA_OPTS% -server -Xms4096m -Xmx4096m -XX:PermSize=128M -XX:MaxPermSize=256m -XX:NewSize=256m -XX:MaxNewSize=512m
echo Using CATALINA_BASE: %CATALINA_BASE%
3、Nginx
https://blog.csdn.net/qq_29234631/article/details/80591267
4、RabbitMQ/Kafka
五、資料庫篇
1、鎖
一般可以分為兩類,一個是悲觀鎖,一個是樂觀鎖,悲觀鎖一般就是我們通常說的資料庫鎖機制,樂觀鎖一般是指使用者自己實現的一種鎖機制,比如hibernate實現的樂觀鎖甚至程式語言也有樂觀鎖的思想的應用。
精確定位死鎖方法
https://blog.csdn.net/qq_29234631/article/details/82465759
2、索引:在關係資料庫中,索引是一種單獨的、物理的對資料庫表中一列或多列的值進行排序的一種儲存結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。
3、讀寫分離:為了確保資料庫產品的穩定性,很多資料庫擁有雙機熱備功能。也就是,第一臺資料庫伺服器,是對外提供增刪改業務的生產伺服器;第二臺資料庫伺服器,主要進行讀的操作。·
4、分庫分表:原本儲存於一個庫的資料分塊儲存到多個庫上,把原本儲存於一個表的資料分塊儲存到多個表上。
六、方案篇
1、設計效能測試方案需要考慮哪些問題?
時間成本、人力成本、環境&指令碼可複用性、實現難度
2、針對某些情況,你會如何設計、優化方案?