qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          JAVA性能測試初體驗

           序言:自動化測試的時候,一直沒想過要去做性能,等到現在做性能的時候,才明白這本身就是一個必須都要經歷的過程,就像編程一樣,編寫小型軟件的時候,我們不用過多關注架構和性能,但是等成長到一定時候,就會需要關注軟件的可復用性(這是由開發成本決定,這點可以在軟件架構上去改善,常說的自動化框架也是為了增強腳本的可復用性和可維護性)、性能瓶頸(這是由系統資源成本決定,空間和時間的調配)、可測試行(這能大大提高測試人員的測試效率,很多時候我們要求開發提供一種測試的接口來方便測試人員進行測試)、可部署性(利用make、ant或者maven,能夠大大提高軟件發布效率,這也是持續集成中的一種手段)等,因此,測試中的發展其實可以有很多的,不僅關注測試手段,還要關注如何在更多的途徑上提高測試效率。下面是對本次性能測試項目至今的一些簡單總結,歡迎指正。

            一、性能測試項目的背景

            性能測試緣起于產品存在大量背景數據時,程序響應時間過慢,而且在特定的情況下有可能會造成一些數據上報丟失,所以需要定位。

            產品為C/S架構,采用的協議是snmp協議,運行在jvm上。

            二、性能測試的策略

            1、測試目的的確定

            1)系統監控,包括cpu、內存、線程使用情況,在大數據情況下,發現問題,幫助修正代碼結構,系統結構,提高系統的運行效率。

            2)確定軟件運行資源需求指標。

            2、性能測試指標確定

            1)確定指標來源,主要包括:產品規格、行業標準、客戶需求與故障場景等

            2)確定測試特性,例如:系統容量、及時性、穩定性、抗壓性、資源利用性等,這些特性可以根據行業性能測試特性以及產品的相關特性來決定。

            3)確定具體指標,包括數目和單位。

            3、性能測試技術儲備

            其實性能測試可以算得上是自動化測試的一種大數據測試

            1)測試場景準備:準備測試場景,可以理解為對背景數據的構造,其實可以將這種構造理解為另類的接口測試,例如:我們的軟件服務器是應用SNMP協議進行通信,設備端有一個agent,專門用來與軟件服務器端通信,那么可以虛擬出這么一個agent,保存相應的設備信息,虛擬過程可以通過對在網的實際設備進行錄制,然后生成。

            互聯網中,客戶端與服務器的交涉是基于http接口協議,其一般的性能測試都是發送大量的http請求,其實這種過程有一個問題就是無法模擬真實的背景數據,因為報文過于單一,而印象很深的是新浪一位朋友開發的tcpcopy工具,在傳輸層,將線上數據復制到測試場景下,從而成功模擬了真實場景環境,這是一種很好的測試方法。

            (還有一種準備工作就是對測試服務器的選型,包括操作系統類型、CPU內核數目、內存數目等)

            2)測試數據準備:這其實就是接口數據,在互聯網中,這方面的模擬比較簡單,用很多工具,例如LR、jmeter、soaupi等都可以成功構造模擬http報文,從而查看服務器的響應。因為我們采用的是snmp協議,所以業內沒有這樣的snmp接口工具,所以就自己基于snmp協議包開發了其snmp報文模擬工具。

            3)性能測試監控:性能測試過程中,對軟件系統服務器的監控是關鍵,例如:web測試中,往往會對web服務器和數據庫服務器、操作系統的指標性能進行監控,因為我們的軟件是運行在jvm上,所以直接采用jconsole或者jprofiler監控服務器的內存使用、cpu使用、各個線程使用情況,還有對數據庫和操作系統的監控等。

            4、性能測試方法

            1)基于指標,進行測試數據構造測試,查看系統是否工作正常以及監測是否沒有問題。

            2)基于指標,在基于測試數據測試的同時,由測試人員參與進行操作,測試在特定環境下的系統工作情況。

            3)客戶場景模擬測試。

            4)隨機測試,利用算法進行大量隨機數據構造。

           三、性能測試調優

            1、性能測試是一個不斷探索和不斷完善的一個測試過程。

            調優步驟:衡量系統現狀、設定調優目標、尋找性能瓶頸、性能調優、衡量是否到達目標(如果未到達目標,需重新尋找性能瓶頸)、性能調優結束

            2、衡量現狀,系統性能主要存在問題

            1)內存泄露

            2)內存占用過大,響應速率慢

            3)線程數不斷增加,出現死鎖或空閑線程

            4)某些類實例化數目過多,占用多余的內存空間

            3、內存泄露

            1)檢驗方式:內存泄露需要進行時長測試,既將監控界面及系統界面全部打開,進行長時間運行(如12小時),觀察系統類的增長情況。

            2)問題定位:若出現JVM的Heap持續增長或者Memory views經過時長測試,出現較大規模的紅色部分(增長部分),且無法GC。

            4、系統內存占用大

            1)檢驗方式:進行某些特定的操作,系統進行大量內存占用或者數據讀寫操作。

            2)問題定位:若系統內存數突發性的增長,且之后不回落,說明某些模塊在持續性的占用系統資源。或者出現JVM的Heap有增長,雖不是持續增長,但一直無法回落。

            5、線程數目過多或死鎖

            1)檢驗方式:進行某些特定的操作,可以使系統產生大量線程操作。

            2)問題定位:若系統線程數突發性的增長或持續增長,且之后不回落,說明某些模塊在持續性的占用線程。或者觀察是否有許多線程來自同一個模塊、長期處于waiting或block狀態

            6、性能調優原則

            調優過程中,充分而不過分使用硬件資源、不要一遇到問題就去改善資源環境,然后,合理調整JVM,需要重點掌握一些JVM的參數,并且要善于分析系統架構和JVM的底層工作機制。

            總結:性能測試是一個很漫長的過程,不管是做JVM性能測試、WEB架構方面的性能測試,其實道理是相通的,個人覺得,要做好性能測試,不僅要對測試理解,更要對軟件架構和底層的服務器工作機制特別理解,不然,往往,你只能去簡單做一些所謂的性能測試操作,但是卻無法針對很多場景提供有效的測試策略和調優建議。好的性能測試工程師應該是能夠快速搭建場景定位問題、提供指標,并且能夠對軟件系統架構提出有效建議。共勉之

          版權聲明:本文出自 散步的SUN 的51Testing軟件測試博客:http://www.51testing.com/?382641

          原創作品,轉載時請務必以超鏈接形式標明本文原始出處、作者信息和本聲明,否則將追究法律責任。

          posted on 2012-12-17 09:51 順其自然EVO 閱讀(1042) 評論(0)  編輯  收藏 所屬分類: 性能測試

          <2012年12月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 雷波县| 永德县| 沁水县| 繁昌县| 玉溪市| 错那县| 宁晋县| 库尔勒市| 高州市| 新安县| 福海县| 广东省| 阿拉善左旗| 民县| 修水县| 从江县| 土默特左旗| 涪陵区| 阿拉善左旗| 锦州市| 论坛| 平陆县| 镇沅| 秀山| 湛江市| 渝北区| 邹平县| 潞城市| 肥乡县| 秦安县| 湟中县| 英德市| 云霄县| 嘉峪关市| 彰武县| 万宁市| 乌兰察布市| 恩平市| 延边| 太和县| 车险|