一 性能測試是什么?
網上有很多,要說概念就得先說分類,性能測試,壓力測試,負載測試,容量測試...在我看來,只是根據不同的測試目的(即想要達成的結果)而取的不同名字,手段都是一樣的,不外乎模擬並發用戶來訪問系統,通過分析得到的參數評估系統性能。
我覺得對於性能測試比較簡單的概括是:性能測試分為前端性能和后端性能。
我狹義的認為前端性能主要表現在頁面加載上:一般會通過優化加載方式,減少數據傳輸量等方式進行優化。
后端性能就是通俗意義上我所做的性能測試,跟代碼和機器性能有關,所以報告中通常需要標注測試環境。
二 性能測試的目的是什么?
1 驗收是否滿足性能指標
如果有給定的性能指標,則對代碼進行測試,是否滿足給定性能參數。即只是一個驗證的過程
在進行驗收時發現當下代碼不滿足需求性能時,需要進一步測試幫助開發定位問題。此時需要知道受壓點是什么。
a 內部邏輯占用cpu資源,導致性能問題
b 數據源使用不合理:通常適當的改變讀寫方式,或者mydis與redis/memcache的變更,及增加節點
c 頁面的加載方式有邏輯漏洞
2 找出服務的性能極限,作為優化和擴展的評估資料
性能驗收通過,滿足當下的性能需求。但是該服務之后可能會做很多擴展,需要進一步測試,找出性能極限和其限制因素,為擴展做出評估。
三 性能參數需要注意哪些參數?
而我們在測試中所關注的參數主要分為兩類:服務端和機器兩類參數。
首先服務端,我們說一個好的系統應該是"高並發,低延時",並發和響應時間就是兩個最重要的參數
1 並發量:即系統同時處理事務的能力,通常我們用QPS(query per second)來表示,也有地方用RPS(request per second),TPS(吞吐量,准確來說應該是吞吐率)來表示.
但其實我們拿到的qps/tps/rps等大多都是1s內的處理能力,並不等同於同一時刻處理的請求。jmeter中定時器里有元器件可以進行控制,等待請求n個時,一同向服務器發請求。
2 響應時間:客戶端發出請求,到接收到返回的時間。比如我訪問baidu.com,按下enter之后等了1s打開了百度首頁,那響應時間就是1s。這個過程的時間包括=網絡傳輸時間+服務處理請求時間;尤其對於一個非web的請求,如果我本身的網絡環境不好,就會導致傳輸時間過長,所以也有人僅用服務處理請求時間來表示響應時間。我認為兩者均可,只要在報告里寫清楚測試環境和字段含義即可。
3 錯誤率:前面兩個是效率,這個是質量。未成功返回的,返回內容缺少不正確的,都算在這里。測試時可以根據返回的狀態碼或者返回內容做alert。
其次機器環境,主要是從保護硬件的方面來說,兩個需要關注的參數是cpu和load,如下。
1 cpu:計算機的邏輯處理能力。CPU利用率反映的是CPU被使用的情況,當CPU長期處於被使用而沒有得到足夠的時間休息間歇,那么對於CPU硬件來說是一種超負荷的運作,需要調整使用頻度。
2 Load Average:是 CPU的Load,它所包含的信息不是CPU的使用率狀況,而是在一段時間內CPU正在處理以及等待CPU處理的進程數之和的統計信息,也就是CPU使用隊列的長度的統計信息。從另一個角度來展現對於CPU使用狀態的描述,Load Average越高說明對於CPU資源的競爭越激烈,CPU資源比較短缺。對於資源的申請和維護其實也是需要很大的成本,所以在這種高Average Load的情況下CPU資源的長期“熱競爭”也是對於硬件的一種損害。
好吧,上面都是從別人家拿來的概念,如果你的機器是雙核,那么你的進程占用cpu 100%即占用了機器一半的cpu資源,load 為4,則表示當前隊列有4個需要處理,而你的cpu限制了同時只能處理2個,所以就會有隊列累積。所以做性能測試需要關注下cpu和load,來保證你的程序在一個良好的環境下運行吧。
3 網絡I/O:磁盤通常是計算機最慢的子系統,也是最容易出現性能瓶頸的地方,因為磁盤離 CPU 距離最遠而且 CPU 訪問磁盤要涉及到機械操作。
尤其在有大量讀寫操作時更需要重點關注。
[mobdev@ip-192-168-1-15:52.77.116.218 trunk]$iostat -x Linux 3.14.27-25.47.amzn1.x86_64 (ip-192-168-1-15) 06/15/2016 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 2.25 0.00 0.12 1.45 0.01 96.17 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util xvda 0.01 4.10 1.85 32.75 239.05 890.75 32.65 0.52 15.05 0.62 2.14
4 網卡:這個是我在測試中注意到的,有一些資源很占用網卡。一個Outgoing一個InComing。當時一個模塊是不停的被請求,它並不占用以上幾項資源,限制其性能的因素就是網卡的Outgoing。當時只是為了找出這個性能限制因素。我並沒有了解太多
常用的大概就這幾個了,如果以后發現了特別的參數,再補充~