想要成為一個性能測試工程師需要掌握哪些知識?

學習性能測試要從哪幾個方面去學習?

要學習哪一種開發語言?

網路方面的知識又要學習多少?

感覺看了市面上幾本關於lr的書,感覺還不足以讓自己踏入性能測試這個門檻。


轉篇自己專欄的文章,總結就是性能測試其實最重要的是自己對業務的熟悉程度和分析能力。

——————分割線———————什麼是性能測試?這裡先舉兩個場景:

1、1000W個微信用戶同時去發朋友圈

2、1000W個淘寶用戶同時去在淘寶上面買商品

當然,上面兩個例子極有可能都發生過。並且雖然我們都參與了上面的測試,但是因為我們是客戶端,實際上並不太清楚對伺服器產生了多大的壓力或者伺服器發生了什麼事情。

ok,到上面我們大概知道了功能測試和性能測試的區別。功能測試的目的是我們保證單個用戶請求的時候沒有問題;而性能測試的目的是保證很多用戶(系統支持的)同時請求時沒有問題。而我們的性能測試就是通過分析真實情況下多個用戶同時出現的請求的時候可能出現的問題而進行的針對性測試(該定義純屬個人YY,如有雷同,不甚榮幸)。

看起來貌似很簡單的樣子,那我們接下來嘗試回答下面幾個問題:

1、當有1000W個微信用戶同時發朋友圈的時候,伺服器的壓力都在哪裡?每個地方的壓力都有多大?瓶頸到底在哪裡?

2、真實的用戶場景是怎樣的?怎樣確保我們實驗室的性能測試結果能夠去滿足真實的用戶場景?

3、如果後面用戶數從1000W到2000W的時候,我們的壓力點會有哪些變化?

4、壓力分析出來後,我們如何去覆蓋到這些壓力點,比如:如何去構造1000W個用戶數去請求數據?

5、我們在性能測試過程中是否能夠根據不斷的調優(比如:調整用戶行為),來得到我們伺服器的一個最優的結果?

......

看到這些問題,相信應該不會有同學覺得很簡單了,我們後面再一起去分享回答上面的問題需要學習哪些知識。

首先,我們將性能測試分為性能指標測試和性能壓力測試。性能指標測試是指通過模擬真實的並發用戶操作,來判斷產品是否能夠滿足用戶的需求;比如:微信需要同時支持4億個用戶的接入為一個真實的用戶需求,但是我們內部不可能真實的去接入4億個用戶,只能夠通過模擬4億個真實用戶去接入,如果我們通過模擬的方式達到該目標了,就說明滿足了這個需求。

性能壓力測試是指在一定的負載情況(資源佔用、接入用戶量等)下面,驗證產品的功能是否還能夠正常運行以及系統本身是否正常。比如:當cpu和內存佔用高達80%以上後,系統crash了。

其他朋友可能會說還有:穩定性測試、負載測試等等其他性能測試,這裡就不再這裡討論了,因為測試方法都類似,並且目的也差不多,我們重點分享下如何進行性能指標測試和性能壓力測試。

一、性能指標測試:

首先,需要知道性能指標的對應的需求是否合理以及足夠明確。石頭哥一直強調,在做一件事情前,一定要搞清楚做這件事情的意義是什麼,特別是對於工作。比如:需求上面寫我們要支持1萬個用戶同時在線支付。那麼我們會有如下幾個疑問:

1、1萬個用戶是怎麼來的,通過什麼樣的模型推斷出來的,是否合理?

2、支付的方式是否確定,不同的支付方式是否有影響?

3、支付的過程(一般應該都不是非原子操作)是否要全部保持一致?

4、是否要求全部都選擇支付成功,還是需要一定數量的用戶選擇支付失敗?

...

當我們真正的理解了需求後,我們就能夠更好的站在用戶的角度上面去思考我們的性能指標測試過程了,也能夠讓我們的用戶指標測試過程更加符合真實的用戶使用場景。

完成需求的分析後,我們就可以開始針對需求來設計對應的性能指標用例了,同時需要對具體的需求進行分析是否有測試方法能夠覆蓋到(建議能夠先去理解下整個業務邏輯)。比如:我們要通過怎樣的方式去模擬1000W的用戶的並發接入?這個時候可能需要我們去自己開發測試工具,或者需要開發給我們提供對應的介面來著。

完成測試方法的研究和確定後,我們就開始按照具體的測試方法來進行覆蓋測試了。當然,測試的過程一般都不是一帆風順的。這就同時需要我們具備一定的分析能力了(前面的業務學習和理解是基礎),比如:當我們發現並發用戶數跑到10W後就一直上不去了。我們是否能夠自己排查可能的原因呢?工具本身問題、網路問題、介面問題、系統負載問題等等。排查和定位問題的能力應該是一個性能測試工程師具備的基礎能力之一,而這個也是很難去掌握的。

按照我們既定的測試計劃,完成性能指標測試後,就需要對整個性能測試過程和結果進行分析和整理了,這樣能夠讓我們提交一份高質量的性能測試報告。另外,可能這份性能指標表我們要測試很多遍,這個時候就可以去分析下是否可以通過自動化的方式去測試了,畢竟你自己應該不會太想將同一份工作做兩遍吧?

二、性能壓力測試

性能壓力測試跟功能測試一樣,主要還是一個通過發現bug來評估質量的過程。那麼這裡有兩個問題:

1、什麼樣的問題算性能問題(即功能問題和性能問題的區別)

2、如何去保證性能的質量(即能夠發現所有的性能問題)

一般來說:筆者認為當系統處於一定負荷的時候出現的問題算是性能問題。比如:拿qq來說,可能1個qq用戶登錄的時候伺服器沒有問題,但是1萬個qq同時登錄並且發數據的時候伺服器可能就會有問題(因為佔用的資源有很大區別),其他如果是可以通過測試功能就能夠發現的邏輯問題不屬於性能問題.

那麼,如何去保證性能的質量呢?這裡參考保證功能的質量一個方法,即通過覆蓋性能業務邏輯的方法來保證性能質量。具體如下:

1、將業務邏輯很詳細的畫出來

2、根據業務邏輯提取出性能點,提取性能點的一個原則是確定單個連接和多個連接是否會對該邏輯有影響,只要有的都應該提取出來,比如資源的申請和釋放、多線程的工作方式等

3、根據性能點完成性能用例的編寫,一定要確保這些性能測試方法能夠達到測試目的

4、分析是否可以將一些測試方法或者檢查點通過腳本或自動化的方式來實現,來節省測試時間

5、學習對應的測試工具,對工具的熟悉能夠很有效的提高自己的測試效率

6、跟功能測試一樣,測試過程中一定要多進行分析,最好是能夠對每個性能bug都進行分析,然後看下是否還有可能沒有考慮到的地方,進行補充測試和完善用例(並分析當時為什麼沒有考慮到),來形成經驗文檔。

7、加強對被測系統的學習,因為性能壓力測試本身是一個整體,只有對被測系統了解的足夠的深入才能夠分析的更加準確,比如:很多伺服器都是基於linux系統的,那麼對linux系統的深入學習就比較有必要了

8、嘗試排查和定位問題,再次強調一遍,石頭哥真心覺得排查和定位問題的能力是性能測試工程師一個很重要的能力,因為對於一個性能測試工程師來說,是應該要知道整個性能的瓶頸在哪裡,並且知道怎樣去覆蓋到的,而不是簡單的會用會用loadrunner就可以了。

通過這樣的方式去不斷的實踐和練習,相信自己就會在性能方面有比較好的經驗了。另外,通過前面的性能測試對於自己理解整個系統的整體架構非常有幫助(這個對於自己也是非常有幫助的)

另外,想學習web性能測試的同學們推薦《性能測試從零開始》,還是不錯的。


  1. 業務知識

    系統能做什麼業務;用戶如何使用;對用戶場景要有相當了解才能設計出有價值的性能測試場景(性能用例)
  2. 系統

    系統運行架構;系統部署;系統本身的性能參數調優; 系統運行狀態的檢測和診斷;
  3. 測試方法

    沒啥好說的,性能測試也是測試,一樣需要測試方法和測試設計能力;
  4. Java/.NET Runtime層面的監控和分析

    如果你的系統與這些技術無關就忽略; 如果有關,你繞不過去。
  5. OS層面

    基本使用就不說了。 儘管你的測試對象與OS無直接關係,但OS是測試環境中一個重要組成部分。
  6. DB

    不是簡單的SQL就OK, 安裝、配置、調優、診斷技能; 而要達到診斷和調優的能力,你得有至少半個DBA的能力。
  7. 其它

    不管啥測試工具,你得會寫腳本吧,開發能力是需要的; 網路知識也是需要的; 對HTTP協議需要有超出普通開發工程師的理解;

  8. 性能測試工具

    這個是最基本的,也是最低級的; 數據性能測試工具體系,知道如何使用,知道如何利用工具針對用例要求執行測試,並收集數據監控狀態

性能測試執行,很容易; 做到診斷定位、調優建議、性能測試設計中的任何一個,都相當不易。


首先,必須深入學習掌握了解軟體性能的知識, 主要是包含軟體的開發知識,系統開發知識,伺服器性能知識,伺服器,集群知識,以及產品本身的知識,對產品應用領域要有比較深層次的了解,對軟體的工作原理要很了解透徹,這樣才可以做出比較詳細和針對性強的測試方案。

其次,必須掌握軟體的自動化測試知識,對軟體自動化測試的技術要有深刻的運用經驗,最好具有開發基礎,這樣的話對軟體的理論了解深刻,那麼測試分析技術會很獨特。對自動化實施的技術了解較多。方便部署自動化測試環境。

第三,掌握一到兩門腳本語言,或者編程語言,目前,建議是VB與java,liux的shell腳本語言。因為主流自動化或者性能測試工具都採用這幾門語言,必須深入學習體會應用。

第四,掌握2種自動化性能測試工具,建議,開源的一種,商業工具一種,可以經濟利益最大化。目前較常用的是loaderunner,jemeter等,建議深入學習和實用。商業工具可以使用試用版來好好練習。當然對於部分專業領域可能還有很多測試工具,這裡不詳細談了。反正工具是死的,關鍵在於如何使用,尤其是對動輒幾十萬的測試軟體來說,如何徹底利用測試王道。

第六,掌握好軟體質量的衡量技術,一般來說,軟體的質量直接關係公司的長遠利益,性能測試作為公司或者客服本身都需要達到的要求,必須樹立高要求的質量意識,這裡可以參考一些經典的軟體質量書籍。

第七,必須掌握統計數據分析技術,學會對大數據進行分析,給出專業判斷,這個很關鍵,我司軟體測試報告很詳細,數據很多,這裡要求在短時間內對數據進行整合,然後給出分析結果及其原因,反饋給客服或者領導。這裡對測試數據的敏感就變得很重要。及時找出關鍵問題,因為性能測試結果往往很多而且複雜。

第八,必須掌握現代的軟體開發技術,以及方法,及時跟新測試方法,保證質量和效率都及時提高。


可恥,看成了性功能測試師。。。


推薦閱讀:

魯德——軟體性能測試與可靠性測試
學習【伺服器編程】做性能測試實驗時需要至少什麼配置的主機?
吞吐量、丟包率性能測試疑問,網路設備(如路由器、防火牆)性能測試時,按照RFC2544文檔描述,如下?
南京正厚軟體是培訓嗎,培訓效果呢? 聽說是挺負責的公司,有沒有去了解過的,請告知內幕?
測試好多都是性能小白,雖學了些性能知識,但在實際工作做開展性能測試,都很茫然,求指導,應該怎麼處理?

TAG:信息技術IT | 測試工程師 | 性能測試 |