天天看點

性能測試知多少---測試環境搭建

  在進行性能則試前,需要完成性能測試的搭建工作,一般包括硬體環境、軟體環境及網絡環境,可以要求配置和開發工程師協助完成,但是作為一個優秀性能測試工程師,這也是你的必備技能之一。

性能測試環境與功能測試環境的差別                                               

  那麼性能測試環境與功能測試環境有什麼不同呢?性能測試對測試環境的幹淨、獨立性要求更高,更為嚴格。對于一個相對較規範的公司,都會建立其獨立的研發環境、測試環境、線網環境(最終運作軟體的環境)。

  這裡多扯一點,系統可以分為c/s架構的系統與b/s架構的系統,c/s架構的系統又可以分為兩種,第一種是基本不用與伺服器連接配接的,比如我們用到的java虛拟機jvm,photo shop平

面處理軟體,我們可以開啟軟體更新功能,這時軟體向伺服器發請求,查目前版本是否是伺服器端釋出的最新版本,然後,提示用例是否需要更新或下載下傳最新版本的

軟體。當然,我們也可以關閉更新功能或不檢測更新。那麼這個軟體一樣可以在電腦上運作。對于這類軟體,我的主要測試環境就是使用者的電腦。不同硬體配置、不

同作業系統下對軟體一系列,從安裝使用到解除安裝。除了驗證軟體與硬體和系統的相容性能,還需要驗證與其它軟體是否相容。

  第二種類型的c/s軟體要時刻與伺服器與連接配接,比如我的線上網遊,qq聊天工具等。從軟體的啟動就需要與伺服器進行連接配接,對于此類軟體,我們測試環境的重點依然是使用者電腦,但伺服器端必須也有一個相對應的測試環境支撐。

  對于b/s的系統,我們測試環境的重點就要由使用者電腦轉為伺服器端了,因為系統的所有功能都是由伺服器端傳遞給使用者的,是以需要驗證伺服器傳遞來的功能是否可用,以及功能的容錯能力等。

  再回到測試環境的問題上,對于一些企業為了節約資源,進行功能測試的測試環境,一台伺服器可以運作多個系統,通過技術手段可以使系統之間是不會互相影響的(以前公司就是一台伺服器上跑多個tomcat)。因為功能測試的重點大于系統對用戶端發來的請求是否可以進行正确的處理。

  那麼性能測試為什麼對系統的環境要求幹淨、獨立呢?性能測試是要對整個系統運作的軟體硬體環境進行測試的,如果某環境下運作多個系統,就很難判斷其中的某個環境對資源的占用情況。

性能測試環境包含内容                                                                          

一般web應用系統分為3層架構(在系統架構一章中有介紹)

* 表現層(web伺服器)

* 業務邏輯層(應用伺服器)

* 資料層(資料庫伺服器)

性能測試環境包含内容:

硬體:伺服器、用戶端、交換機等。

軟體:資料庫、中間件、被測系統、作業系統等。

網絡:有線/無線/寬帶、網絡協定等。

如何保證測試環境與真實生産的一緻性                                             

保證性能測試與真實生産環境的一緻性,具體從以下三個方面來看:

1、硬體環境,包括伺服器環境、與網絡環境

  如伺服器的型号以及是否和其它應用程式共享此伺服器,是否在叢集環境下,是否通過bigip進行負載均衡,客戶使用的硬體配置情況,使用的交換機型号,網絡傳輸速率。

2、軟體環境

版本一緻性

  包括包括作業系統、資料庫、中間件的版本,被測系統的版本。

配置一緻性

  系統(作業系統/資料庫/中間件/被測試系統)參數的配置一緻,這些系統參數的配置有可能對系統造成巨大的影響。是以,除了保證測試環境與真實環境所使用的軟體版本一緻,也要關注其參數的配置是否一緻。

3、使用場景的一緻性

基礎資料的一緻性

  包括預測的業務資料量,以及資料類型的配置設定。很簡單的一個列子,一個系統的資料庫隻有10條資料和一條資料庫裡幾千萬條資料,我們在對其進行性能測試時,得到的性能名額可能會有非常大的差别。

  為了保證每次測試環境的更加一緻性,磁盤的使用情況以及磁盤的碎片情況也會或多或少的影響的性能。

使用模式的一緻性

  盡量模拟真實場景下使用者的使用情況,其實,我們在做性能測試前期的需求分析,其主要目的也就是為了更真實的模拟使用者的使用情況。

性能測試環境的實施政策                                                            

  上面講測試環境與生産環境保持一緻所需要注意的内容。其實在實際的測試中,我們很難搭建出與生産環境完全一緻的一個測試環境,除非我們暫停生産環境使用者于進行性能測試,這往往是不可能。一方面某些生産環境是不允許被暫停的,另一方面也為生産環境的安全性考慮。

  性能測試環境并不像功能測試環境,為了節省資源可以

一台伺服器上運作多個系統。由于性能測試的特殊性,整個測試環境需要在嚴格的獨立監控下管理,在很多情況下,我們很難申請到足夠的且一緻的資源(說白了就

是老闆是否願意出錢給你買伺服器搭建系統)。對于一個并未上線的項目,其生産環境的配置也屬于暫定狀态,性能測試的目的就是為了确定具體生産環境的硬體配

置。這個時候更不可能用過高的配置來搭建性能環境(除非現成的環境放着不用)。

我們一般通過兩種政策來搭建性能測試環境(預估方式均有誤差)

1、通過模組化的方式實作低端硬體對高端硬體的模拟

  通過配置測試來計算不同配置下的硬體性能和系統處理能力的關系,進而推導出滿足系統性能的真實配置情況,這種模拟需要精确的模組化,模型的采樣點越多,那麼得到的結果越精确,進而将在低端配置下的性能名額通過該模型轉化為高端配置下的最終預計性能名額。

  例如:搭建一個低端環境,首先需要對這個環境的

cpu和記憶體進行單獨的性能基準測試,同過在不同的配置的性能測試,得到一個基準資訊清單,當然,在進行這個性能測試的過程中,我們要确定硬體是系統的瓶

頸。如果隻用一個cup,在性能測試過程中,其使用率很低,但得到的性能資料都非常底,這起碼說明cup不是系統的平靜,這種情況下就無法得到想要的基準

值。

性能測試知多少---測試環境搭建

  如上圖,在一顆cpu情況下,運作100個使用者且cup使用率接近飽和(100%)。在增加至兩顆cup的情況下,可以運作190個使用者且upu使用率接近飽和(100%),以此做記錄,那麼我們就可以推算出運作800個使用者需要多少顆cup。

  如果你在實際應用中使用的cup型号及其頻率并非完全一樣,這個時候可以使用everest工具計算每種cup的得分,對其性能進行評估。

  記憶體也可以使用此方法進行測試推導,這裡需要我們多進行試驗,對硬體的性能以及對整個項目的結構都要做深入的了解,以便盡量減少誤差。

2、通過叢集的方式計算

  對于較大的系統來說,單台伺服器的處理能力是有限

的,通常都會采用叢集的方式來進行負載均衡,完成對海量請求的處理。雖然無法獲得整體叢集的測試環境,但是可以對叢集上的一個節點進行性能測試,得出該節

點的處理能力,再計算每增加一個節點的性能損失,同樣也可以能過模組化的方式得到大型負載均衡情況下的預計性能名額。

  例如:首先在單台伺服器上獲得具體的性能名額,每台伺服器能夠承受500使用者并發,平均tps為60,響應時間為2秒,接着,添加負載均衡政策,再次測試負載政策下的資料損耗。得出資料後添加1台負載均衡伺服器,測試在兩台伺服器下每台伺服器的性能名額,以此類推,可以得到下表:

性能測試知多少---測試環境搭建

  随着負載均衡伺服器的添加,平均每台伺服器的處理能力會逐漸穩定,進而了解在什麼情況下需要多少台負載均衡伺服器。

  對于測試環境的搭建,建議生成專門的文檔進行管理,并進行配置管理,確定對測試環境做到基線控制。

------------------------------------------

  這個性能測試系列以理論與性能測試的整體講解為主,市面上的大部分書籍借着性能測試的表皮在講性能測試工具loadrunner,那我何不找份loadrunner使用手冊來看更好。