性能測試

性能測試

第一章 性能測試整體認知

一.能力要求

1.熟悉linux操作系統,熟悉shell腳本

2.熟悉jvm調優,tomcat調優等基礎策略

3.熟悉mysql,熟練掌握js,java,python等至少一門編程 語言

4.熟悉常見的壓測工具,jmeter,loadrunner

5.能對應用進行監控

二.性能測試技能樹

1.開發語言:java,應用廣,溝通在一個頻道上

2.操作系統:linux,熟悉基本操作和監控命令,會應用監控命令獲取當前狀態

3.數據庫:mysql,能夠監控狀態,定位問題,瞭解運行原理

4.測試工具:流行多的jmeter,loadrunner

5.網絡知識:網絡寬帶大小,數據大小傳輸(擴展http課程)

6.業務知識:瞭解哪裏最需要性能測試,用戶訪問最多的業務

三.性能測試的目的

1.發現性能瓶頸

四.性能測試的分類

1.性能測試:是一個非常廣泛的概念,包括的很多方面的測試,也可稱之爲非功能測試

2.自動化測試:屬於功能測試的範圍,由於其測試方法要求測試人員擁有一定的代碼能力,所以被單獨分成一個測試模塊

3.具體分類(測試範圍)

(1)負載測試:通過逐步加壓的方法,達到既定的性能閥值的目標,閥值的設定應是小於等於某個值,如CPU使用率小於等於80%

(2)壓力測試:通過逐步加壓的方法,使得系統的某些資源達到飽和,甚至失效的狀態,簡單粗暴的解釋就是什麼條件能把系統壓崩潰

(3)併發測試:在同一時間內,多個虛擬用戶同時訪問同一模塊,同一功能,通常的測試方法是設置集合點,同一時間測試同一動作

(4)容量測試:所有的測試都做完了,性能指標滿足預期,未來業務可能飛速發展,預測未來.通常是指數據庫層面的,目標是獲取數據庫的最佳容量的能力.又稱之爲容量預估.具體測試方法爲在一定的併發用戶,不同的基礎數據量下,觀察數據庫的處理能力,即獲取數據庫的各項性能指標

(5)可靠性測試:又稱之爲穩定性測試或疲勞測試,是指系統在高壓情況下,長時間的運行系統是否穩定,如CPU使用率在80%以上,7X24小時運行,系統是否穩定,一般會報OOM,內存回收不徹底

(6)異常測試:又稱之爲失敗測試.是指系統框架方面的測試,如在負載均衡架構中,要測試宕機,節點掛掉等情況系統的反應

四.性能測試的工作流程

1.需求分析:熟悉項目主要是做什麼,用戶主要操作什麼

2.性能指標制定:TPS之類的,要有個目標

3.腳本開發:工具也行

4.場景設置:用戶經常進行哪些操作,作爲測試重點

5.監控部署:把應用,數據庫監控起來,看到運行狀態

6.測試執行:開始跑壓測

7.性能分析:根據監控分析

8.性能調優:發現問題調優,繼續測試和分析調優

9.測試報告:滿足了性能指標不再進行調優,可以具備上線

如果是敏捷開發的不斷迭代,可以設置階段性能指標

五.常見系統應用分層架構

1.顯示層(view):web,andriod,ios,h5

2.邏輯控制層(controller):api

3.數據存儲層(model):mysql,mongodb,redis...

自底向上分塊分層測試

六.性能測試指標定義

1.事務:從客戶端發起的一個或多個請求(這些請求組成一個完整的操作),到客戶端接收到從服務器返回的響應,瞭解業務才能知道事務

2.TPS:Transaction per second :每秒鐘系統處理得事務數

3.請求響應時間:從客戶端發起的一個請求開始,到客戶端接收到從服務端返回的響應.整個過程所耗費的時間

4.事務響應時間:事務可能是由一個或多個請求組成的,事務響應時間主要針對用戶角度而言,如轉賬

5.併發定義:沒有嚴格意義上的併發.併發總有先後,無論1毫秒或者1微秒,總有一個時差.所以併發講的是一個時間範圍內,比如1秒內,如同一操作秒殺,或者不同操作,比如商品瀏覽

6.併發用戶數:同一單位時間內對系統發起請求的用戶數量

7.吞吐量:一次性能測試過程中網絡上傳輸的數據量的總和,帶寬佔用量

8.吞吐率:單位時間內網絡上傳輸的數據量 吞吐率=吞吐量/傳輸時間

9.點擊率:每秒鐘用戶向服務器提交的請求數,這個指標是web應用程序(也包含手機端)特有的一個指標,可以想象每秒鐘用戶總共在頁面上進行多次點擊動作,一次點擊可能向服務器發送了多個請求

10.資源使用率:對不同的系統資源的使用情況,如CPU,內存,io,針對硬件

七.性能測試的需求分析

1.分析的目的:

明確測試指標

明確測試場景

2.新系統:

同行業比較

業務預期,跟市場溝通

3.老系統

對比以往的用戶使用行爲以及用戶量

八.性能測試工具

1.常用工具

loadrunner:只能在windows上安裝圖形化可視工具

jmeter:運行在jvm之上,跨平臺

 

第二章 測試工具篇

一.初識jmeter

1.jmeter的組成:

測試計劃->

線程組:虛擬用戶數

斷言:預期結果和實際結果進行比對,不推薦用

定時器:停頓多長時間等

監聽器:調試自己的腳本,對資源進行監控

配置元件:基本的配置項

後置處理器:併發完成之後做些什麼,後一個請求需要前一個請求結果可以實現

前置處理器:在請求之前做些什麼

邏輯控制器:當什麼條件滿足時,要做什麼,基於線程之下工作

sampler:放請求的,請求控制器,例如http

 

二.jmeter實現多併發

1.線程組:負載發生器,用多線程或多進程的方式來模擬用戶的使用行爲.jmeter是以線程的方式來進行模擬用戶的併發訪問的

2.配置元件:用來提供一些配置相關的信息,如http請求頭,cookie管理,提供參數化數據.還可以進行用戶自定義變量等,用以定義常量等

第三章 linux服務器監控性能測試

一.服務器性能測試範圍

1.測試目的:發現服務器的性能瓶頸.配置的不同能夠承載的最大任務數不同,能夠承載的壓力也不同

2.測試範圍及性能指標

CPU:相當於工人,計算

內存:存儲,臨時存儲

磁盤:持久化

網絡:帶寬,傳輸速度

版本:服務器版本,很難保證測試環境和生產環境配置相同,保證軟件版本相同,系統版本相同,不一致的環境會造成很大性能差距

3.測試與生產的環境配置不同

通過多次壓測來計算性能損耗

4.性能損耗的計算方式

橫軸:服務器數量,服務器越多性能損耗越大

相同的配置增加服務器計算性能損耗

 

二.進程與線程

1.進程:是可以獨立運行的.具有一定獨立功能的程序關於某個數據集合的一次運行活動,是系統進行資源分配和調度的一個獨立單位,例如QQ

2.線程:線程是進程的一個實體,是cpu調度和分派的基本單位,它是比進程更小的能夠獨立運行的基本單位,線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源.一個線程可以創建和撤銷另一個線程

3.定義與區別

一個線程只能屬於一個進程,而一個進程可以擁有多個線程

線程是進程工作的最小單位,車間裏的工人

一個進程會分配一個車地址空間,進程與進程之間不共享地址空間,即不共享內存

同一個進程下的不同的多個線程,共享父進程的地址空間

線程在執行過程中,需要協作同步.不同進程的線程間要利用消息通信的辦法實現同步,利用外部中間件隊列

線程作爲調度和分配的基本單位,進程作爲擁有資源的基本單位

4.進程優點

每個進程相互獨立,不影響主程序的穩定性,子進程崩潰不影響其他進程

通過增加CPU,就可擴充性能

可以儘量減少線程加鎖與解鎖的影響,極大的提高了性能

邏輯控制複雜,需要和主程序交互

多進程調度開銷大

5.線程優點

程序邏輯和控制方式簡單

所有線程可以直接共享內存和變量等

線程方式消耗的總資源比進程方式少

6.線程缺點

每個線程與主程序共享地址空間,最大內存地址受限

線程之間的同步和加鎖不易控制

一個線程的崩潰可能影響到整個程序的穩定性

三.linux命令

1.幫助命令: man xxx xxx是命令名字,查看命令的幫助

2.實時監控 top

-h 幫助

-p 監控指定的進程.當監控多個進程時,進程ID以逗號隔開

top任務區命令:

M:按內存使用率排序

P:按CPU使用率排序

z:彩色/黑白顯示

top中的load average:系統的運行隊列的平均利用率,也可以認爲是可運行進程的平均數.三個值分別表示在最後的1分鐘,5分鐘,15分鐘的平均負載值

在單核時1表示滿負荷狀態,多核中1*cpu核數

3.vmstat

可以監控操作系統的進程狀態,內存,虛擬內存,磁盤IO,cpu的信息

vmstat 時間間隔 顯示多少次

4.free -h

顯示M

5.mpstat

最大特點可以查看多核心cpu中每個計算核心的統計數據

-P 0到CPU個數-1

相鄰的兩次採樣的間隔時間

安裝:yum install sysstat

mpstat -P ALL 1 100

%iowait列CPU等待I/O操作所花費的時間。這個值持續很高通常可能是I/O瓶頸所導致的

可以看哪些核心滿負荷,哪些空閒

6.網絡

netstat:用於顯示本機網絡連接,運行端口,路由表等信息

netstat -ntlp 查看端口是否被監聽,活着沒

netstat -i 看網絡監聽網絡傳輸的大小和有沒有傳輸錯誤

主要看err drp ovr失敗的

7.磁盤

iostat

tps:一次IO請求

kb_read/s:每秒讀的數據大小

kbwrtn/s:每秒寫

kb_read:讀總數

kb_wrtn:寫總數

iostat -x:

重點:rkb/s wkb/s 讀寫每秒大小 %util繁忙程度 100%非常繁忙

8.萬能命令

sar:系統活動情況報告,最全面的系統性能分析工具之一,可以從多方面對系統的活動進行報告

性能監控範圍:

文件的讀寫情況,系統調用使用情況,IO,CPU效率,內存使用狀況,進程活動及IPC有關的活動等

-A:所有報告的總和

-u:CPU利用率

-o 文件名:輸出到文件

1 10:間隔1s打印10次

-r:顯示系統內存使用情況

-b:緩衝區使用情況

9.進程追蹤

strace:是一個集診斷,調試,統計與一體的工具,我們可以使用strace對應用的系統調用和信號傳遞的跟蹤結果來對應用進行分析,以達到解決問題或者瞭解應用工作過程的目的

-p:跟蹤指定的進程

監控某一個進程各方面都正常,沒辦法了最後可以用strace命令查看

四.linux監控工具

一.nmon

是一種在linux操作系統上廣泛使用的監控與分析工具,nmon鎖記錄的信息是比較全面的,它能在系統運行過程中實時地捕捉系統資源的使用情況,並且能輸出結果到文件中,然後通過nmon_analyzer工具產生數據文件與圖形化結果

二.nmon_analyzer

作用就是分析nmon數據採集後的結果,需要藉助excel的宏,wps默認沒有安裝宏需要安裝插件

重點sheet:

sys_summ:系統彙總頁,包含cpu佔有率變化情況,磁盤IOS的變化情況等信息

AAA:操作系統以及nmon本身的一些信息

cpunn:顯示執行時間內CPU佔用情況

cpu_all:所有CPU概述,顯示所有cpu平均佔用情況

cpu_summ:每一個cpu在執行時間內的佔用情況

DGBUSY:磁盤組每個hdisk設備平均佔用情況

DGREAD:每個磁盤組的平均讀情況

DGSIZE:每個磁盤組的平均讀寫情況

NET:顯示系統中每個網絡適配器的數據傳輸速率

等等,能夠帶來比較便利的工具

三.linux定時任務

配合監控使用

1.crontab:linux系統是由cron這個系統服務來控制的,linux上肯多的計劃性工作.使用者也可以設置任務,所以linux系統提供了使用者控制計劃任務的命令

2.crontab的啓動

/sbin/service crond status 查看定時任務的服務是否啓動

start/stop/restart 啓動服務/停止服務/重啓服務

reload重新載入配置

3.crontab服務權限

crontab的權限存儲在cron.allow和cron.deny文件中,如果沒有可在etc目錄下創建

4.使用場景說明

如果兩個文件都不存在,那麼只允許root用戶使用crontab

5.使用

crontab -e

6.時間單位說明

1列分鐘,2列小時,3列日期,4列月份,5列星期,6列運行的命令,*代表取值範圍的所有值,/代表每,-代表從x到x,逗號,代表隔開的不同數字

第四章 數據驅動性能測試

一.定義:

從數據文件中讀取測試數據,驅動測試過程的一種測試方法

數據驅動可以理解爲更高級的參數化

二.電商業務模型

 

三.jmeter中如何做數據驅動

控制方式:

參數化

邏輯控制器

可以把測試數據寫到數據庫,jmeter連接數據庫讀取數據,用循環控制器遍歷數據用條件控制器控制不同的接口測試

第五章 數據庫架構設計

一.數據庫性能測試的目的與範圍

1.性能測試目的

發現數據庫相關的所有性能瓶頸

2.sql語句-慢查詢等

3.資源使用率

4.數據庫架構的合理性

5.數據庫的性能指標

二.數據庫的常用架構

1.一主多從

優點:讀寫分離,分擔了單臺服務器的壓力情況,因爲讀都分攤在多臺服務器上

缺點:主從延時,

2.雙機熱備

優點:查詢實時性

缺點:A掛了之後,B數據庫寫入的A啓動的時候是沒有的,需要手動同步

場景:

讀的操作多:一主多從比較好

寫入數據比較多:雙機熱備比較好

三.數據庫主從同步的工作原理

1.主從同步原理:

master將改變記錄到二進制日誌中(binary log)中

slave將master的binary log events拷貝到它的中繼日誌(relay log)

slave重做中繼日誌中的事件,將改變反應它自己的數據

四.數據庫分庫分表的設計方法

1.拆分原因:

單表或庫數量太大

硬件不能升級或無法升級

2.業務拆分

用戶,商品,訂單...

3.垂直拆分

商品表:

表大了,可以按種類拆分成不同表

4.水平拆分

一致性哈希算法,取模,拆分成一樣的表,取模幾就可以拆分成幾個表

第六章 mysql性能測試

一.mysql數據庫的介紹

1.mariadb:

mysql之父widenius創建,目標在於替換現有mysql

兼容mysql,對於開發者來說感知不到變化

免費開源

二.監控指標

1.qps:每秒查詢數量,查詢總數/秒數

show global status like 'Question%'

2.TPS:

TPS=(Com_commit+Com_rollback)/seconds

show global status like 'Com_commit'

3.線程連接數

使用最大的連接數:show global status like 'Max_used_connections'

線程連接數:show global status like 'Threads%' 有多少線程連接數據庫

設置最大連接數:show variables like 'max_connections'

4.query cache

查詢緩存用於緩存select查詢結果

當下次接受到相同的查詢請求時,不再執行實際查詢處理而直接返回結果

適用於大量查詢,很少改變表中數據

show variables like '%query_cache%';

5.query cache命中率

show status like 'Qcache%'

命中率百度一下

6.鎖定狀態

show global status like '%lock%'

Table_locks_waited/Table_locks_immediate的值越大代表表鎖的阻塞越嚴重

如果Table_locks_immediate / Table_locks_waited > 5000,最好採用InnoDB引擎,

因爲InnoDB是行鎖而MyISAM是表鎖,對於高併發寫入的應用InnoDB效果會好些

Innodb_row_lock_waits innodb行鎖,太大可能是間隙鎖造成的

7.主從延時

查詢主從延時時間:show slave status

三.慢查詢工作原理及操作

定義:執行速度超過定義的時間的查詢

不同的系統定義不同的慢查詢指標

2.配置

/etc/my.cnf 在mysqld中添加

開啓慢查詢:slow_query_log=1

慢查詢的時長:long_query_time=1

slow_query_log_file=/data/mysql/slow.log 目錄要有權限

log_queries_not_using_indexs=1 沒有索引的查詢也記錄到日誌中

四.sql的分析與調優方法

mysqldumpslow命令

--獲取返回記錄最多的3個sql

mysqldumpslow -s r -t 3

--獲取訪問次數最多的3個sql

mysqldumpslow -s c -t 10 slow.log

--按照時間排序,前10條包含left join查詢語句的sql

mysqldumpslow -s t -t 10 -g "left join" slow.log

 

五.索引的概念及作用

略,可看sql優化篇

六.索引的工作原理與設計規範

單張表中索引數量不超過5個

單個索引中字段數不超過5個

不適用更新頻繁地列作爲主鍵

合理創建組合索引(避免冗餘)

不適用%前導的查詢,無法使用索引

不適用反向查詢

選擇越小的數據類型越好

單獨的order by用不了索引

連接條件on上加索引

七.存儲引擎

myisam:

優點:讀的性能比Innodb高很多,索引與數據分開,使用了壓縮,從而提高了內存使用率

缺點:不支持事務,寫入數據時,直接鎖表,寫入會慢

innodb:

優點:支持事務,支持外鍵,支持行級鎖

缺點:不支持fulltext索引(全文索引)

行級鎖並不絕對,當不確定掃描範圍時,鎖全表

索引與數據時緊密捆綁的,沒有使用壓縮導致體積龐大

八.實時監控

1.orzdba

九.集羣監控方案

1.天兔lepus:可視化監控

十.性能測試用例準備

1.jmeter測試mysql

創建jdbc connection

創建jdbc request

寫入的時候,querytype設置爲: Update Statement

十一.Jmeter開發mysql性能測試腳本

1.從mybatis中拿出sql腳本

十二.執行測試

設置好線程組

做好監控,把慢查詢找出來

異常類測試,主從的主庫掛了能不能正常切換,觀察主從延時的問題

數據量達到一定時的速率

第七章 多協議接口性能測試

一.接口性能測試的目標及範圍

發現應用程序的性能瓶頸

發現數據庫的性能瓶頸

二.常見接口協議

1.http超文本傳輸協議

2.https安全超文本傳輸協議

3.ftp 文件傳輸協議

4.tcp網絡控制協議

5.ip互聯網協議

6.udp用戶數據協議

三.https協議

默認端口:443 http默認是80

安全性的ssl加密傳輸協議

以安全爲目標的http協議通道,可以理解爲http協議的安全版

四.ftp協議

1.使用兩個並行tcp連接爲控制連接和數據連接

控制連接負責兩個主機之間傳輸控制信息,如用戶表示,口令,發送的命令,運行端口爲21

數據連接用於實際傳輸一個文件,運行端口爲20

2.jmeter添加ftp請求可測試ftp

五.性能測試用例設計

1.幾要素

被測系統及版本

測試數據

測試場景(包含異常場景)

預期結果

預期性能指標

六.性能測試報告

被測系統

版本號

運行環境,配置

測試場景(併發定義)

預期性能指標

實際結果

測試結論

測試人員

如果不通過說明瓶頸

如通過說明最大性能指標

容量規劃,未來多長時間內系統可以撐得住

第八章 jmeter擴展組件開發的意義

一.待看

第九章 大數據測試

一.待看

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章