定義:web
性能測試(Performance Testing):經過模擬真實用戶來測試系統的性能是否知足用戶的需求數據庫
負載測試(Load Testing):經過在被測系統上不斷增長壓力,直到性能指標超過預約指標或者某種資源使用已達到飽和狀態服務器
壓力測試(Stress Testing):測試系統資源在必定飽和狀態下,系統可以處理的會話能力,以及系統是否會出現錯誤cookie
配置測試(Configuration Testing):經過對被測系統的軟、硬件環境的調整,瞭解不一樣環境對系統性能的影響程度,從而找到系統各項資源的最優分配原則網絡
併發測試(Concurrency Testing):模擬用戶的併發訪問,測試多用戶併發訪問同一個應用、同一個模塊或者數據記錄時是否存在鎖死等性能問題併發
穩定性測試(Reliability Testing):經過給系統必定的業務壓力的狀況下,讓應用持續運行一段時間,測試系統在這種條件下可否穩定運行tcp
性能指標:函數
1)響應時間(Response Time):從客戶端發起一個請求開始,到客戶端接收到從服務器端返回的響應結束,這個過程所耗費的時間工具
2)TPS(Transaction Per Second):每秒系統可以處理的交易或事務的數量性能
3)資源利用率(Resource Utilization):服務器CUP、MEM、網絡、磁盤I/O的使用狀況
4)成功率(Success Rate):系統成功事務數佔總事務數的比例
5)穩定時長:系統可穩定運行的時間
6)總事務數:系統在穩定時長內處理的事務總數
7)波動範圍:系統處理事務能力的波動大小,標準誤差/平均值(Std. Deviation/Average)
Loadrunner的4部分:
1)腳本生成器(Virtual User Generator)
2)壓力調度和監控系統(Controller)
3)壓力生成器(Load Generator)
4)結果分析工具(Analysis)
腳本調優經常使用方法:
1)添加事物:lr_start_transaction("事務名"); lr_end_transaction("事務名",LR_AUTO); //事務的開始與結束是成對出現的,LR_AUTO指事務的狀態由系統自動根據默認規則來判斷,結果爲PASS/FAIL
2)添加檢查點:web_reg_find("Search=Body/Headers/All","Savecount=N","Text=文本內容"); //此函數要寫到被檢查內容以前,檢查事務是否運行成功,Search爲檢查的範圍,Savecount爲檢查的次數,Text爲檢查的內容
3)添加集合點:lr_rendezvous("集合點名"); //等達到規定的用戶數後再一塊兒執行某個操做,Insert-Rendezvous添加
4)添加關聯:web_reg_save_param("response","LB=","RB=","Search=",LAST); //當服務器返回動態值並須要將此動態值應用到後續請求中時纔用到關聯,此函數返回的值爲左邊界LB和右邊界RB之間的數據,如用到後續請求中時需將動態值替換爲{response}
5)參數化:把以後會用到的參數集合起來,以便統一使用,通常使用Unique(惟一)+Each iteration(每次迭代)+Continue in a cyclic manner(循環方式)
經常使用到的腳本函數:
1)web_url(); //地址請求函數
2)web_submit_form(); //單表單提交函數
3)web_submit_data(); //多表單提交函數
4)web_custom_request(); //多功能表單提交函數
5)lr_think_time(); //思考時間,單位:s
6)lr_output_message(字符串); //打印輸出括號內字段
字符串處理函數:
1)lr_save_string("value","name"); lr_save_int("value","name"); lr_save_datetime("value","name"); //將一個字符串、數字、日期寫入一個參數保存
2)lr_eval_string("{參數}"); //返回腳本中的一個參數當前的值,返回值類型:char,例如將上一個函數中的name做爲參數,便可返回value的值
3)sprintf:相似printf,只是將打印出來的內容變爲給變量賦值,sprintf(變量,"%d/s/g",value);
4)strlen:strlen("hello world!");返回字符串的長度12
5)strcat:strcat(a,b);將b字符串鏈接到a以後,無返回值
6)strcpy:strcpy(a,b); //把b的值複製到a中
7)strcmp:strcmp(str1,str2); //對比str1字符串和str2字符串(區分大小寫),若相同返回0,不一樣則返回非0
8)strchr:strchr(s,'a');字符首次在字符串s中出現的位置的指針,若是不存在則返回NULL,printf("%s",strchr("abcdefg",'c')),輸出結果就是cdefg
9)strstr:相似strchr,strstr("abcdefg","cde")字符串首次在字符串中出現的位置的指針,若是不存在則放回NULL,printf("%s",strchr("abcdefg","cde"));輸出結果爲cdefg
10)atoi(字符串); //將字符串轉變爲整數int,返回值類型:int,如不能轉換成int或者爲空字符串,那麼將返回0
11)itoa(整形); 將整形轉化爲字符串類型,返回值類型:char //已被淘汰
12)memset:
13)lr_convert_string_encoding:
性能測試流程:
1)性能測試需求分析:
2)編寫性能測試方案:
1.單交易基準測試:單個交易在一個用戶下(無壓力)獲取系統單筆交易的響應時間,爲後續交易提供數據依靠
通常爲迭代100次,交易之間pacing1s,關注指標:響應時間、成功率
2.單交易負載測試:單交易多併發測試,考察交易自身是否存在併發缺陷,同時考察單交易的最大處理能力
通常爲等梯度的4組用戶,1vu-10vu的響應時間變化應該不大,關注指標:TPS、響應時間、成功率、資源利用率
3.混合容量測試:按照測試場景配比發起壓力,檢測系統在給定負載下的性能表現,驗證是否達到預期性能指標
通常爲經過加入pacing使各交易TPS達到場景配比,計算公式:pacing = 總VU/總TPS - 單用戶響應時間(總VU=單交易總佔比TPS/單用戶TPS,向上進位)
例如:存款交易佔比32%,總TPS爲100,單交易基準的響應時間爲0.2s,則應發起的vu數爲100*32%*0.2=6.4,向上進位爲7vu,則pacing=7/320.2=0.01875s,此交易關注指標:TPS、響應時間、成功率、資源利用率
4.穩定性測試:按照系統最大的處理能力的80%發起壓力,運行較長時間後,檢驗系統可否穩定運行 通常爲執行24H,關注指標:TPS、響應時間、成功率、資源利用率、穩定運行時長、總事務數、波動範圍
5.最大併發用戶數測試:當併發用戶數持續遞增,系統資源利用率接近100%、響應時間超過3s、錯誤率超過0.5%達到其中任一指標時,測試中止,獲取系統最大的併發用戶數
3)編寫測試用例
遵循測試場景的規則編寫
4)編寫測試腳本及調優
使用經常使用函數進行腳本編寫
5)測試執行
在Controller中,按案例添加場景並執行
6)監控系統
在Linux系統中執行./nmon進入nmom工具
執行./nmom -t -f -s -c -m -s:每隔幾秒收集一次 -c:收集次數 -m:+/tmp存放路徑
7)統計、分析測試結果
使用Analysis調取測試報告,進行數據分析
常見問題:
增長併發後,TPS基本沒有變化,應用和數據庫的CPU也都消耗不高
能夠先選擇一個非登陸的交易,最好是查詢類交易,作1併發、5併發、10併發,試運行5分鐘查看平均響應時間和TPS,若是TPS從5到10併發基本沒有變化,應用和數據庫的CPU也沒大的變化,只是平均響應時間翻倍增長,那麼基本能夠肯定是鏈接的限制問題,須要讓開發查看三個鏈接數的設置:一個是應用容許的鏈接數;一個是鏈接池的限制;一個是數據庫容許的鏈接限制。
切記:必定跟開發確認關閉日誌或者爲error級別,不然也會存在TPS很低。
應用容許的鏈接數查看方法,在Linux 系統下查看命令:
netstat -n | grep 23000 | awk '/^tcp/{++S[$NF]} END {for(a in S) print a,S[a]}'
netstat -an|grep 8080|grep timewaited|wc -l
執行該命令,其中23000是應用的端口,發現出現大量的time-wait
此時考慮更改操做系統的核心參數,用戶有更改權限,更改配置文件使TCP端口快速回收:
(修改操做系統TCP核心參數 開啓TCP複用和快速回收)
經過在/etc/sysctl.conf中增長以下幾行參數, 而後/sbin/sysctl -p或重啓網卡 使之生效。
鏈接數:10 timewait不斷增長則表明鏈接數有問題
修改後的核心參數以下:
######################
net.ipv4.tcp_max_tw_buckets = 10000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_keepalive_time=600
sysctl -w net.ipv4.tcp_keepalive_probes=2
sysctl -w net.ipv4.tcp_keepalive_intvl=2
###################
8)編寫測試報告
測試概述:測試背景、範圍、指標、環境、數據、工具
測試實施:地點、階段
測試數據:測試目的、場景設置、場景配置、測試結果:
單交易基準測試:記錄交易平均響應時間、TPS、成功率
單交易負載測試:記錄交易平均響應時間、TPS、成功率,並截取每一個梯度的TPS曲線圖和資源利用率使用狀況(帶圖)
混合容量測試:記錄交易平均響應時間、TPS、總TPS、成功率,並截取每一個梯度的TPS曲線圖和資源利用率使用狀況(帶圖)
穩定性測試:記錄交易平均響應時間、TPS、總TPS、成功率,並截取每一個梯度的TPS曲線圖和資源利用率使用狀況(帶圖)
結果分析:
單交易負載測試結果分析:Excel中分別做出每一個交易的TPS-VU、資源利用率-VU的趨勢圖,複製到報告中,並敘述TPS、資源利用率、併發用戶數之間的關係
混合容量測試結果分析:Excel中分別做出每一個交易的TPS-VU、資源利用率-VU的趨勢圖,複製到報告中,並分析出系統在知足指標的同事其最佳併發用戶數
穩定性測試結果分析:分析系統在穩定性測試期間的交易總筆數及成功率