性能測試不能沒有并行, 為什么?
首先,為了模擬器, 性能測試一定需要模擬多個終端,并行是最好的方案围小;
其次,為了性能, 如果沒有性能上的壓力,就不是性能測試了.
并行是一個大課題,需要分幾部分來考慮, 第一是硬件平臺, 第二是軟件平臺(操作系統(tǒng)), 第三是軟件架構.
第一,并行計算機可以有兩種, 一種是集群式的, 比如機框的板卡, 刀片式服務器,還有就是多個普通PC搭建成的集群網絡, 一種是多處理器的, 一般都是SMP, 還有多核CPU的.
第二,軟件平臺而言, 可以是一個支持并行的OS(WIN 或者LINUX, UNIX), 也可以是一種虛擬機,比如JVM.軟件平臺提供的是并行的開發(fā)庫,運行庫,資源管理與調度.通信平臺也是很重要的.并行系統(tǒng)中的各個并行過程在通信上如果不能達到高效的要求, 并行就沒有了意義.
第三, 軟件架構, 對實際應用而言, 軟件需要設計成可并行的架構模式.比如多進程或多線程.或者兩者并有.多進程的好處是調試階段出了問題時定位方便, 而多線程如果一個線程CORE DUMP, 那么整個進程被退出, 定位問題就難了.
軟件架構最重要的是并行算法設計,可以采用Foster的設計方法, 分四步來進行并行算法設計, 第一步:劃分,第二步:通信, 第三步:聚集, 第四步: 映射.
性能測試中的數(shù)據(jù)
性能測試是為了得出一個結果, 這個結果有可能是測試對象已經出現(xiàn)了問題, 或者是得到一批數(shù)據(jù).這些數(shù)據(jù)不能馬上就能看出測試對象有沒有問題, 有時候還不能評定是測試工具的錯還是測試對象的錯.這時候數(shù)據(jù)尤其重要.
性能測試中的數(shù)據(jù), 包括有:
1). 測試對象的運行過程的統(tǒng)計數(shù)據(jù), 日志文件,數(shù)據(jù)庫記錄, 狀態(tài)信息等,這些數(shù)據(jù)是在測試對象正常運行過程中產生的.
2). 測試工具的運行過程的統(tǒng)計數(shù)據(jù), 日志文件等,這些數(shù)據(jù)也是在測試工具正常運行過程中產生的, 當測試工具運行出了問題時, 這些數(shù)據(jù)就不再可信.
性能測試一個CASE結束, 首先就是看測試對象的狀態(tài)正不正常, 測試工具的狀態(tài)正不正常, 如何沒有問題, 則可以初步認為雙方輸出的統(tǒng)計數(shù)據(jù)是有效的,在某種程度上是可信的.第二步就是將雙方的數(shù)據(jù)進行對比, 如何要對比就需要考慮雙方的數(shù)據(jù)項是否有可比性的問題, 統(tǒng)計數(shù)據(jù)應該是基于雙方在通信共有部分, 排除各自私有的統(tǒng)計.另外還要進行單位的統(tǒng)一.對統(tǒng)計的有效區(qū)間進行檢驗, 每秒的統(tǒng)計數(shù)據(jù)與每小時的統(tǒng)計數(shù)據(jù)以及每個CASE,每個用戶的統(tǒng)計數(shù)據(jù)需要分開.測試工具的統(tǒng)計數(shù)據(jù)有可能只是一個模擬器上的統(tǒng)計, 那就需要將多個模擬器的數(shù)據(jù)進行匯總后才能與測試對象的統(tǒng)計進行對比. 最后得出結論, 雙方是否有運行缺陷, 以及測試對象的性能報告.
測試對象的性能報告中, 應該包含有如下信息:系統(tǒng)的容量, 處理能力, 帶寬及吞吐量, 可靠性, 穩(wěn)定性, 當前面的項目都通過時, 測試人員還有一個很重要的工作就是通過統(tǒng)計數(shù)據(jù)(測試工具的也好, 測試對象的也好)來分析出測試對象的處理瓶頸的大概范圍(系統(tǒng)的模塊), 這樣可以提供給開發(fā)人員一個很好的提示作用.
另外,有個問題是性能測試中非常重要的問題, 測試人員設計的測試用例如果沒有遵循實際應用的環(huán)境, 那么得出的結論(比如性能瓶頸提示)就會對開發(fā)人員有誤導作用, 開發(fā)人員因為在性能優(yōu)化時常常會有兩難的選擇, 如果為了作某一方面的優(yōu)化就會把相關方面的性能降低, 到最后就是積重難返了. 測試用例設計的重要性可見一斑.
定時器框架的設計是性能測試工具開發(fā)的重心
性能測試在一定程序上也是自動化測試, 在大量用戶及數(shù)據(jù)的情況下, 是以一定速度的自動的運行某些功能.如何驅動以及管理這種自動的過程,是測試工具中非常重要的設計考慮.
定時器分為兩種, 一種是通信交互上的等待對方應答的定時器, 一種是自動化中驅動信令面及數(shù)據(jù)面的定時器.
第一種定時器而言,
特點是粒度小, 只在通信交互過程中有效,在用戶信令面中,在進行協(xié)商,認證,鑒權過程,會有N次請求應答對, 這中間都需要有等待定時器,定時器的時間長短可以不一樣,但它是與用戶相關的, 每一個用戶都是獨自占有一個定時器, 所以定時器的數(shù)量與用戶數(shù)成正比. 這些定時器一般是用數(shù)組實現(xiàn)较锡,但超時的輪詢機制算法需要考慮實際的測試模型來提高性能涯保,避免給正常的測試帶來影響乱顾,拖了后腿萍诱。
第二種定時器
是測試所需要的, 由一個總的定時器來驅動, 選擇用戶,另外每一個用戶也需要一個定時器來等待用戶上線的結果, 即每一個用戶的狀態(tài)變遷需要由定時器來等待具體功能的實現(xiàn)結果.當用戶成功上線后, 它進入數(shù)據(jù)面狀態(tài)時,也是需要一個定時器來驅動這個用戶的自動發(fā)送數(shù)據(jù)的, 它的數(shù)量與用戶數(shù)是對應的.
如上兩種定時器的創(chuàng)建,停止與銷毀都是要管理的,有些實現(xiàn)是提供一個代碼框架平臺, 在代碼上統(tǒng)一API, 在運行時就用一個實體(可能是線程)來中斷地檢測超時并觸發(fā)消息到相應用戶的狀態(tài)機中作相應的處理.而當用戶量上升上到一個層次時,這就會形成瓶頸.例如:在一個用戶每秒發(fā)送N個數(shù)據(jù)包的功能需求下, 一個定時檢測線程要輪詢檢查上萬個用戶的超時狀態(tài), 在一秒內輪詢完成所有用戶的狀態(tài)真是有點困難.因為一個線程在一個CPU上是一個流水線的處理, 沒有并行性. 而在這個思路下設計出來的定時器代碼框架就不能滿足要求了.
補充:
定時器可以進一步細分, 實時性要求高的定時器和實時性要求不高的,比如用戶上線后的定時發(fā)包, 是實時性要求很高的, 它要求在每秒內都要發(fā)出定量的包, 那么定時器的精確度應該在秒以內, 延時就會產生連鎖反應, 大量用戶在每秒發(fā)包的情況下更是考驗定時器實現(xiàn)的實時能力.另外如等待超時響應的定時器實時性要求就沒那么高, 前一秒與后一秒檢查到超時,對流程及測試目標的影響微乎其微.所以定時器框架的設計是性能測試的重心.
性能測試時, 速度就是測試的核心, 它可以分為信令速度和數(shù)據(jù)速度.
1).信令速度:
是指一個用戶通過與測試對象的協(xié)商,認證,授權后,成功上線的速度. 單位一般是用戶每秒, 就是每秒最多可以有多少用戶成功通過以上過程, 以及失敗率為多少, 還有稼钩,最大的用戶容量也是測試指標之一.
2).數(shù)據(jù)速度:
是指一個用戶成功上線之后,上行或下行,或都兩都有時,通過測試對象的數(shù)據(jù)包數(shù)量和大小.單位一般是每個用戶每秒發(fā)多少個數(shù)據(jù)包, 每個數(shù)據(jù)的長度大小.數(shù)據(jù)包的數(shù)量測試的是測試對象的轉發(fā)能力或者處理能力, 數(shù)據(jù)包的大小測試的是測試對象的吞吐量.
3).兩種速度混合:
就是一定量的用戶以某一速度不斷上線(每秒N個用戶上線), 上線后立即發(fā)包, 這樣時間越往后, 后面上線的用戶就在一個越大的數(shù)據(jù)背景上進行信令的交互, 更加測試了測試對象的處理能力.
用戶管理
性能測試時, 模擬器只是模擬與測試對象直連的物理設備, 而性能測試過程必然需要大量的用戶, 測試工具就是需要在最少的資源下模擬出最多的用戶量(對于測試對象而言, 有總容量).
對用戶管理,需要有三個重要的設計,第一是用戶數(shù)據(jù)的產生, 大量用戶需要自動產生, 而且需要能在測試對象的認證中通過.第二,是用戶數(shù)據(jù)在運行過程的分配, 是所有的用戶都映射到一個模擬器上, 還是不同用戶分配到不同的模擬器中, 更加難的是, 用戶如何在不同的模擬器間切換(在測試對象能感知并業(yè)務平滑切換).第三,是在并行計算機環(huán)境下, 如何將用戶分解到不同的CPU上進行處理, 提高吞吐量.并行程序的設計也是很重要的一個問題.它決定整個測試工具的優(yōu)與劣.
測試性能的時候, 搭建環(huán)境會有兩種模式:
第一種,樹型連接
這種連接方式,特點是模擬器有多個物理設備, 但測試對象只有一個對外物理接口, 測試就是在一種多對一的環(huán)境下進行, 對測試對象而言, 壓力點在于并發(fā)的處理能力上.而性能測試工具設計時, 一個重要的問題就是考慮如何用最少的物理設備模擬出最多的模擬器出來, 比如用多網口的多CPU單機來實現(xiàn)就可以在一個物理設備上模擬出多個模擬器, 但并發(fā)性并沒有減少, 因為多個網口可以產生多個網線的速度, 而每個網線是獨占式的, 到測試對象這一端時, 剛好形成匯聚, 集中在一條網線上的壓力就大了, 對測試對象的處理極限是有很多的效果.
第二種, 星型連接
這種連接方式的特點是測試對象有多個物理接口, 它與模擬器就是一對一的測試環(huán)境, 物理上對等, 那么在測試工具設計時, 很重要的一點就是要怎樣盡量提高模擬器的性能, 多臺物理設備是必然選擇, 不然模擬器的CPU比不過測試對象設備的CPU就不能形成壓力, 測試就顯得沒有底氣.
總的來說, 要做性能測試, 測試工具的設計原則就是創(chuàng)造和利用一切可以形成不對等的性能優(yōu)勢.