qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          JAVA性能測(cè)試初體驗(yàn)

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

            一、性能測(cè)試項(xiàng)目的背景

            性能測(cè)試緣起于產(chǎn)品存在大量背景數(shù)據(jù)時(shí),程序響應(yīng)時(shí)間過慢,而且在特定的情況下有可能會(huì)造成一些數(shù)據(jù)上報(bào)丟失,所以需要定位。

            產(chǎn)品為C/S架構(gòu),采用的協(xié)議是snmp協(xié)議,運(yùn)行在jvm上。

            二、性能測(cè)試的策略

            1、測(cè)試目的的確定

            1)系統(tǒng)監(jiān)控,包括cpu、內(nèi)存、線程使用情況,在大數(shù)據(jù)情況下,發(fā)現(xiàn)問題,幫助修正代碼結(jié)構(gòu),系統(tǒng)結(jié)構(gòu),提高系統(tǒng)的運(yùn)行效率。

            2)確定軟件運(yùn)行資源需求指標(biāo)。

            2、性能測(cè)試指標(biāo)確定

            1)確定指標(biāo)來源,主要包括:產(chǎn)品規(guī)格、行業(yè)標(biāo)準(zhǔn)、客戶需求與故障場(chǎng)景等

            2)確定測(cè)試特性,例如:系統(tǒng)容量、及時(shí)性、穩(wěn)定性、抗壓性、資源利用性等,這些特性可以根據(jù)行業(yè)性能測(cè)試特性以及產(chǎn)品的相關(guān)特性來決定。

            3)確定具體指標(biāo),包括數(shù)目和單位。

            3、性能測(cè)試技術(shù)儲(chǔ)備

            其實(shí)性能測(cè)試可以算得上是自動(dòng)化測(cè)試的一種大數(shù)據(jù)測(cè)試

            1)測(cè)試場(chǎng)景準(zhǔn)備:準(zhǔn)備測(cè)試場(chǎng)景,可以理解為對(duì)背景數(shù)據(jù)的構(gòu)造,其實(shí)可以將這種構(gòu)造理解為另類的接口測(cè)試,例如:我們的軟件服務(wù)器是應(yīng)用SNMP協(xié)議進(jìn)行通信,設(shè)備端有一個(gè)agent,專門用來與軟件服務(wù)器端通信,那么可以虛擬出這么一個(gè)agent,保存相應(yīng)的設(shè)備信息,虛擬過程可以通過對(duì)在網(wǎng)的實(shí)際設(shè)備進(jìn)行錄制,然后生成。

            互聯(lián)網(wǎng)中,客戶端與服務(wù)器的交涉是基于http接口協(xié)議,其一般的性能測(cè)試都是發(fā)送大量的http請(qǐng)求,其實(shí)這種過程有一個(gè)問題就是無法模擬真實(shí)的背景數(shù)據(jù),因?yàn)閳?bào)文過于單一,而印象很深的是新浪一位朋友開發(fā)的tcpcopy工具,在傳輸層,將線上數(shù)據(jù)復(fù)制到測(cè)試場(chǎng)景下,從而成功模擬了真實(shí)場(chǎng)景環(huán)境,這是一種很好的測(cè)試方法。

            (還有一種準(zhǔn)備工作就是對(duì)測(cè)試服務(wù)器的選型,包括操作系統(tǒng)類型、CPU內(nèi)核數(shù)目、內(nèi)存數(shù)目等)

            2)測(cè)試數(shù)據(jù)準(zhǔn)備:這其實(shí)就是接口數(shù)據(jù),在互聯(lián)網(wǎng)中,這方面的模擬比較簡(jiǎn)單,用很多工具,例如LR、jmeter、soaupi等都可以成功構(gòu)造模擬http報(bào)文,從而查看服務(wù)器的響應(yīng)。因?yàn)槲覀儾捎玫氖莝nmp協(xié)議,所以業(yè)內(nèi)沒有這樣的snmp接口工具,所以就自己基于snmp協(xié)議包開發(fā)了其snmp報(bào)文模擬工具。

            3)性能測(cè)試監(jiān)控:性能測(cè)試過程中,對(duì)軟件系統(tǒng)服務(wù)器的監(jiān)控是關(guān)鍵,例如:web測(cè)試中,往往會(huì)對(duì)web服務(wù)器和數(shù)據(jù)庫服務(wù)器、操作系統(tǒng)的指標(biāo)性能進(jìn)行監(jiān)控,因?yàn)槲覀兊能浖沁\(yùn)行在jvm上,所以直接采用jconsole或者jprofiler監(jiān)控服務(wù)器的內(nèi)存使用、cpu使用、各個(gè)線程使用情況,還有對(duì)數(shù)據(jù)庫和操作系統(tǒng)的監(jiān)控等。

            4、性能測(cè)試方法

            1)基于指標(biāo),進(jìn)行測(cè)試數(shù)據(jù)構(gòu)造測(cè)試,查看系統(tǒng)是否工作正常以及監(jiān)測(cè)是否沒有問題。

            2)基于指標(biāo),在基于測(cè)試數(shù)據(jù)測(cè)試的同時(shí),由測(cè)試人員參與進(jìn)行操作,測(cè)試在特定環(huán)境下的系統(tǒng)工作情況。

            3)客戶場(chǎng)景模擬測(cè)試。

            4)隨機(jī)測(cè)試,利用算法進(jìn)行大量隨機(jī)數(shù)據(jù)構(gòu)造。

           三、性能測(cè)試調(diào)優(yōu)

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

            調(diào)優(yōu)步驟:衡量系統(tǒng)現(xiàn)狀、設(shè)定調(diào)優(yōu)目標(biāo)、尋找性能瓶頸、性能調(diào)優(yōu)、衡量是否到達(dá)目標(biāo)(如果未到達(dá)目標(biāo),需重新尋找性能瓶頸)、性能調(diào)優(yōu)結(jié)束

            2、衡量現(xiàn)狀,系統(tǒng)性能主要存在問題

            1)內(nèi)存泄露

            2)內(nèi)存占用過大,響應(yīng)速率慢

            3)線程數(shù)不斷增加,出現(xiàn)死鎖或空閑線程

            4)某些類實(shí)例化數(shù)目過多,占用多余的內(nèi)存空間

            3、內(nèi)存泄露

            1)檢驗(yàn)方式:內(nèi)存泄露需要進(jìn)行時(shí)長(zhǎng)測(cè)試,既將監(jiān)控界面及系統(tǒng)界面全部打開,進(jìn)行長(zhǎng)時(shí)間運(yùn)行(如12小時(shí)),觀察系統(tǒng)類的增長(zhǎng)情況。

            2)問題定位:若出現(xiàn)JVM的Heap持續(xù)增長(zhǎng)或者M(jìn)emory views經(jīng)過時(shí)長(zhǎng)測(cè)試,出現(xiàn)較大規(guī)模的紅色部分(增長(zhǎng)部分),且無法GC。

            4、系統(tǒng)內(nèi)存占用大

            1)檢驗(yàn)方式:進(jìn)行某些特定的操作,系統(tǒng)進(jìn)行大量?jī)?nèi)存占用或者數(shù)據(jù)讀寫操作。

            2)問題定位:若系統(tǒng)內(nèi)存數(shù)突發(fā)性的增長(zhǎng),且之后不回落,說明某些模塊在持續(xù)性的占用系統(tǒng)資源。或者出現(xiàn)JVM的Heap有增長(zhǎng),雖不是持續(xù)增長(zhǎng),但一直無法回落。

            5、線程數(shù)目過多或死鎖

            1)檢驗(yàn)方式:進(jìn)行某些特定的操作,可以使系統(tǒng)產(chǎn)生大量線程操作。

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

            6、性能調(diào)優(yōu)原則

            調(diào)優(yōu)過程中,充分而不過分使用硬件資源、不要一遇到問題就去改善資源環(huán)境,然后,合理調(diào)整JVM,需要重點(diǎn)掌握一些JVM的參數(shù),并且要善于分析系統(tǒng)架構(gòu)和JVM的底層工作機(jī)制。

            總結(jié):性能測(cè)試是一個(gè)很漫長(zhǎng)的過程,不管是做JVM性能測(cè)試、WEB架構(gòu)方面的性能測(cè)試,其實(shí)道理是相通的,個(gè)人覺得,要做好性能測(cè)試,不僅要對(duì)測(cè)試?yán)斫猓獙?duì)軟件架構(gòu)和底層的服務(wù)器工作機(jī)制特別理解,不然,往往,你只能去簡(jiǎn)單做一些所謂的性能測(cè)試操作,但是卻無法針對(duì)很多場(chǎng)景提供有效的測(cè)試策略和調(diào)優(yōu)建議。好的性能測(cè)試工程師應(yīng)該是能夠快速搭建場(chǎng)景定位問題、提供指標(biāo),并且能夠?qū)浖到y(tǒng)架構(gòu)提出有效建議。共勉之

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

          原創(chuàng)作品,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明本文原始出處、作者信息和本聲明,否則將追究法律責(zé)任。

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

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

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 镇原县| 洛川县| 遵义市| 民勤县| 大埔区| 屯留县| 子长县| 吉林省| 永善县| 新晃| 涟水县| 射阳县| 台湾省| 阳城县| 弋阳县| 漳浦县| 保康县| 蒙阴县| 普安县| 麻江县| 华容县| 旬邑县| 仁寿县| 克拉玛依市| 太湖县| 昌平区| 莎车县| 稻城县| 扬州市| 理塘县| 上栗县| 弥渡县| 威宁| 广昌县| 江达县| 连城县| 钦州市| 宜宾县| 商南县| 布尔津县| 荥阳市|