<ruby id="h6500"><table id="h6500"></table></ruby>
    1. <ruby id="h6500"><video id="h6500"></video></ruby>
          1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>
            • 軟件測試技術(shù)
            • 軟件測試博客
            • 軟件測試視頻
            • 開(kāi)源軟件測試技術(shù)
            • 軟件測試論壇
            • 軟件測試沙龍
            • 軟件測試資料下載
            • 軟件測試雜志
            • 軟件測試人才招聘
              暫時(shí)沒(méi)有公告

            字號: | 推薦給好友 上一篇 | 下一篇

            軟件測試中讓loadrunner走下神壇(全)

            發(fā)布: 2010-11-29 09:36 | 作者: 網(wǎng)絡(luò )轉載 | 來(lái)源: 領(lǐng)測軟件測試網(wǎng)采編 | 查看: 380次 | 進(jìn)入軟件測試論壇討論

            領(lǐng)測軟件測試網(wǎng)

            軟件測試中讓loadrunner走下神壇(全)

            Loadrunner無(wú)疑是一個(gè)強大有力的壓力測試工具。它的腳本可以錄制生成,自動(dòng)關(guān)聯(lián);測試場(chǎng)景可以面向指標,多方監控;測試結果圖表顯示,拆分組合。相信有人這樣想象過(guò):拿著(zhù)一張性能指標標準列表和測試數據相比較,如同PH試紙一樣,遇堿則藍,遇酸則紅,一目了然,之后就可以大聲地喊道:我找到了軟件系統的性能瓶頸!
            然而,我們無(wú)論在loadrunner前面加多少個(gè)“強大”、“智能”的形容詞,別忘了其最終修飾的只是一個(gè)名詞-“工具”!洞笤(huà)西游》中也有相當精辟的論斷:官兵?最多也只是個(gè)長(cháng)了痔瘡的官兵!把loadrunner比喻成長(cháng)了痔瘡的官兵有點(diǎn)粗俗,但loadrunner它是個(gè)工具,那么是否能夠找到性能瓶頸就取決于使用工具的人,而不是工具本身。要做一個(gè)成功的性能測試,僅讀懂和精通了loadrunner的使用手冊是不夠的,還需要對被測軟件系統的方方面面都要有了解,比如軟件體系構架,網(wǎng)絡(luò )拓撲等知識。這就如同一個(gè)技藝高超的木匠,并不是因為他背熟了鑿子,錘子的說(shuō)明書(shū),而是他能結合木材的質(zhì)地和尺寸,用鑿子和錘子這些工具做出一把精巧的椅子來(lái)。那么在性能測試中,人的智慧活動(dòng)體現在哪里呢?
            一.首先性能測試也是測試的一種,這就意味著(zhù)做性能測試也要寫(xiě)測試案例。你所作的性能測試能不能足以支持找出性能測試瓶頸,和你在初期設計的測試案例關(guān)系甚為重要。我曾寫(xiě)過(guò)對一個(gè)軟件系統的不下十個(gè)性能測試場(chǎng)景案例,等后來(lái)運行時(shí)卻發(fā)現我必須增補幾個(gè)案例才能找到瓶頸,而原來(lái)十多個(gè)案例其實(shí)重復甚多。如果你要寫(xiě)出好的不重復的性能測試案例來(lái),你就得對被測軟件系統有一定的了解。
            在這里,我順便插一句,在目前測試界總在爭論測試人員需不需要懂編程,需不需要有開(kāi)發(fā)經(jīng)驗這種問(wèn)題,這完全是本末倒置,忘記了測試人員的目標是什么,測試目標就是寫(xiě)出好的測試案例,好的測試案例就是發(fā)現了一個(gè)原來(lái)未曾發(fā)現的軟件bug。那么一個(gè)測試人員知識體系是否夠用的標準就是能不能寫(xiě)出一個(gè)好的測試案例。而針對不同類(lèi)型的測試,所需的知識深度是不一樣的,有的是不需編程知識,比如界面測試;有的是必須有開(kāi)發(fā)經(jīng)驗的,比如接口測試,不能一概而論。
            對于性能測試來(lái)講,我個(gè)人認為,測試人員倒不一定非要有開(kāi)發(fā)經(jīng)驗,但是應該有一個(gè)對軟件體系結構了解全面的知識。為什么呢?做性能測試時(shí),如果從客戶(hù)端施壓一次就符合性能指標,碰到這種情況您就偷著(zhù)樂(lè )吧,因為在你的指標場(chǎng)景下,軟件系統中就不存在性能瓶頸,您也就不用費心去找了。但是大多數情況下,我們在做性能測試時(shí),都不能順利達到性能指標,可能server響應超時(shí)了,也可能是用戶(hù)死掉了,在日志里拋出了一堆error,這種情形是非常常見(jiàn),所以在我們在一開(kāi)始設計性能測試方案時(shí),就應該考慮為尋找性能瓶頸而設計測試案例。這時(shí)我們就需要知道在整個(gè)軟件系統中,有哪些節點(diǎn),在哪些地方可能存在瓶頸,比如一個(gè)B/S系統就有IE client→物理網(wǎng)絡(luò )→web server→app server→DB這樣的一個(gè)壓力流串。每個(gè)節點(diǎn)的每個(gè)模塊都有可能成為瓶頸。瓶頸的產(chǎn)生可能由于模塊配置引起,也可能由于模塊本身引起。這都需要我們設計測試案例來(lái)發(fā)現的。一般地,我自己常用的感覺(jué)也比較方便的方法是,設計一組性能測試案例來(lái)驗證一個(gè)節點(diǎn)是否存在瓶頸,這組case中盡量保持其他節點(diǎn)不變,來(lái)改變這個(gè)節點(diǎn)的配置,并監控此節點(diǎn)的各種指標。這里說(shuō)起來(lái)就有很多話(huà)了,不是一言?xún)烧Z(yǔ)能說(shuō)得清的。以后有時(shí)間可以找個(gè)專(zhuān)題來(lái)慢慢跟大家討論。
            二.使用loadrunner的VU生成腳本。腳本的生成方式就兩種,一種是自寫(xiě)或嵌入源代碼,一種是錄制生成。常常聽(tīng)見(jiàn)有人說(shuō),這兩種方式中首選錄制生成腳本,因為它簡(jiǎn)單且智能化。但我個(gè)人總覺(jué)得手寫(xiě)腳本要好一些,因為:
            1.可讀性好,CC">流程清晰,檢查點(diǎn)截取含義明確。業(yè)務(wù)級的代碼讀起來(lái)總比協(xié)議級的代碼更易讓人理解,也更容易維護,必要時(shí)可建立一個(gè)腳本庫。而錄制生成的代碼大多沒(méi)有維護的價(jià)值,現炒現賣(mài)。
            2.手寫(xiě)的程序相比錄制的腳本更能真實(shí)地模擬應用運行。因為錄制的腳本是截獲了網(wǎng)絡(luò )包,生成了協(xié)議級的代碼,而略掉了client端的處理邏輯。舉個(gè)例子,用VU錄制一個(gè)運行script和applet的IE行為,它只會(huì )生成http協(xié)議的API,在IE中運行的applet和script不會(huì )被模擬到,這就不是一個(gè)完整的系統。
            3.手寫(xiě)程序相比錄制腳本更能增加測試人員的技術(shù)含量。開(kāi)發(fā)和測試能力雙重提高,何樂(lè )而不為呢?loadrunner提供了java user,vb user,c user等語(yǔ)言類(lèi)型的腳本,就是給我們開(kāi)發(fā)腳本用的,而不是錄制用的。
            腳本不管錄制也好,還是手寫(xiě)也好,選擇的時(shí)候應該以腳本模擬程序真實(shí)有效為準,結合項目進(jìn)度,開(kāi)發(fā)難易程度等因素考慮。
            在這里我想要說(shuō)的是,開(kāi)發(fā)一個(gè)好的腳本是成功性能測試的必要條件。一個(gè)好的腳本應該能夠最大程度再現client程序行為。如上面那個(gè)例子,腳本只模擬了 client端的部分行為,有一些沒(méi)有模擬到,那么client的瓶頸就有可能被忽略了。我曾吃過(guò)一個(gè)虧,自己寫(xiě)了一個(gè)java socket腳本去聯(lián)server,但是忽略了client端的界面下的業(yè)務(wù)邏輯,用我的腳本做性能測試通過(guò),全部OK,但是真實(shí)用戶(hù)一上線(xiàn),client終端界面接受了大量的server信息,導致client進(jìn)程死掉了。痛哉,痛哉。
            三.組建并執行性能測試場(chǎng)景。
            從VU運行成功到controller運行成功,一般需要以下幾個(gè)步驟(我也是從英文論壇上看到的,覺(jué)得不錯,拿出來(lái)共享):
            1.        確認在VU里SUSI(單用戶(hù)單循環(huán)次數single user & single iteration)
            2.        確認在VU里SUMI(單用戶(hù)多循環(huán)次數single user & multi iteration)
            3.        確認在controller中MUSI(多用戶(hù)單循環(huán)次數multi user & single iteration)
            4.        確認在controller中MUMI(多用戶(hù)多循環(huán)次數 multi user & multi iteration)
            做這樣一個(gè)步驟劃分是有道理的,第一步驟是驗證腳本編寫(xiě)的正確,第二步驟可以驗證數據池是否正常運作。第三步驟驗證并發(fā)功能,第四步驟是最終目的,驗證軟件系統的性能。在論壇上看到一些朋友提的問(wèn)題,有一些就是于此的,在controller中運行場(chǎng)景時(shí)出現問(wèn)題,首先得保證VU中運行成功,這是一個(gè)顯然的邏輯。軟件工程中把軟件開(kāi)發(fā)的種種行為都要制定一個(gè)proccess,即過(guò)程,性能測試也是如此,按照過(guò)程來(lái)調試腳本和場(chǎng)景,能及早發(fā)現問(wèn)題和定位問(wèn)題。除非是高手,爛熟于心中,才能超越proccess而不出問(wèn)題。
            場(chǎng)景是把虛擬用戶(hù)和交易數按一定規則組織起來(lái)去模擬真實(shí)世界的業(yè)務(wù)行為。這其實(shí)是把單個(gè)用戶(hù)的行為復制,連接。場(chǎng)景的組織通常和真實(shí)世界的業(yè)務(wù)規則有很大關(guān)系。
            做個(gè)如下可能并不恰當的比喻:
            腳本像演員,場(chǎng)景就像表演的舞臺,而測試工程師是導演,多少個(gè)演員,怎么在舞臺上演出,都由導演說(shuō)了算,而劇情又不能離譜,脫離現實(shí),否則就要砸鍋了。注意,導演的職責不光是確保演出能順利結束,而且還要同時(shí)觀(guān)察和收集觀(guān)眾的反饋信息,以確認這次演出是否成功。
            同樣的也是,性能測試人員不光是看場(chǎng)景是否得到順利的執行,同時(shí)還要收集各個(gè)server的反饋信息,以確認軟件系統的性能表現是否正常。
            在真實(shí)世界中的用戶(hù)業(yè)務(wù)規則要轉換到可操作的性能指標是需要分析和計算的。當然這通常是市場(chǎng)需求分析人員干的活,但我覺(jué)得測試人員應該在做性能測試時(shí),對這些指標進(jìn)行理解,知道為什么要這樣做。有時(shí)有的性能指標并不清楚和準確,還需要測試人員來(lái)分析。比如一個(gè)性能指標:要求軟件系統支持每分鐘700用戶(hù)的登陸行為。這對于測試人員來(lái)說(shuō),其實(shí)是一個(gè)不確切的性能需求。這指的是瞬時(shí)并發(fā)用戶(hù)700,在一分鐘的響應時(shí)間要求下登陸系統?還是在一分鐘內陸續有700個(gè)用戶(hù)登入軟件系統即可?這兩種場(chǎng)景其實(shí)對軟件系統的壓力是不同的,第一種顯然大,第二種要小一些。甚至有的性能需求就是支持50000注冊用戶(hù),這種需求就更需要分析了,還要引入一些業(yè)務(wù)發(fā)生概率算法模型來(lái)做。這已經(jīng)不是性能測試人員的職責了,但由于目前有不少軟件公司流程不規范,或者有流程沒(méi)執行,這些工作都要測試人員來(lái)做了,不過(guò)也好,正好是鍛煉的機會(huì )。
            四.分析結果數據,找到軟件系統性能瓶頸
            上面說(shuō)了,做了那么多,就是為了本步驟-尋找軟件系統性能瓶頸。
            個(gè)人認為尋找性能瓶頸是一個(gè)非常有挑戰性的工作,毛主席曾經(jīng)說(shuō)過(guò):一個(gè)優(yōu)秀的指戰員就是能夠根據已有的客觀(guān)形勢,制定作戰計劃,然后在作戰過(guò)程中,發(fā)現計劃與執行不符的地方,分析,然后調整作戰計劃,縮小計劃和戰勢的誤差。簡(jiǎn)明一句:就是一個(gè)理論和實(shí)踐結合的過(guò)程,一個(gè)人的主觀(guān)思想和客觀(guān)現實(shí)的結合過(guò)程(注明:本人是毛主席老人家的忠實(shí)fans)。
            在性能測試中,測試方案就是我們的作戰計劃,執行性能測試就是我們的作戰戰場(chǎng)。在性能測試中,可能會(huì )發(fā)現種種意想不到的問(wèn)題。當然一個(gè)經(jīng)驗足夠豐富的性能測試專(zhuān)家可能會(huì )在測試之前就能考慮全面,使測試方案吻合測試執行實(shí)際情況,并一舉找出性能瓶頸。我sunshinelius不是專(zhuān)家水平,當然就要匆忙應對和分析性能測試中出現的問(wèn)題,并有可能會(huì )修改測試方案,增加必要的test case,刪除沒(méi)用的test case?傊,性能測試是一個(gè)不斷修改測試方案,反復執行test case的過(guò)程,直至越來(lái)越逼近性能瓶頸。在此過(guò)程中,需要了解很多的知識,知識了解得越多,就越接近軟件系統運行的真相,也就能找出性能瓶頸了。
            比如:loadrunner要是調用程序員的程序,服務(wù)器資源占用情況可能是追查瓶頸的一個(gè)線(xiàn)索,但如果是標準中間件,那就沒(méi)那么簡(jiǎn)單了,比如oracle數據庫的某項參數設得不對,照樣會(huì )造成數據庫瓶頸,應用程序調用數據庫的API寫(xiě)法不對,比如未使用軟解析變量,也有可能導致數據庫瓶頸。這些瓶頸都不會(huì )反映在cpu,內存使用量上等指標上的。
            對于這種情況,一方面需要對中間件有一定的了解,知道哪些參數有什么作用,怎么可調的,另外還可能使用中間件的專(zhuān)有監測工具,來(lái)分析。lr的性能計數器是不夠用的。
            個(gè)人體會(huì ),查找瓶頸的難易程度,由易到難
            服務(wù)器硬件瓶頸-〉網(wǎng)絡(luò )瓶頸-〉應用瓶頸-〉服務(wù)器操作系統瓶頸(參數配置)-〉中間件瓶頸(參數配置,數據庫,web服務(wù)器等)
            記憶比較深刻的一次,用lr做了兩天性能測試,指標上不去,后來(lái)使用oracle數據庫的圖形化性能檢測工具才發(fā)現某個(gè)表的查詢(xún)處理時(shí)間超長(cháng),原來(lái)索引創(chuàng )建得不合理,把表的索引改了之后,性能稍有提高,但還是上不去。再次排查,發(fā)現應用中有一個(gè)sql語(yǔ)句寫(xiě)得有問(wèn)題,長(cháng)而且耗時(shí),改了之后,測試指標還是上不去
            經(jīng)過(guò)至少四輪的排查,才大功告成,最后一個(gè)除掉的瓶頸是操作系統問(wèn)題(開(kāi)始沒(méi)有想到它,后來(lái)看系統消息,才發(fā)現已經(jīng)有錯誤報出)
            五.我再說(shuō)兩句
            每個(gè)系統的性能測試都是一個(gè)全新的挑戰!

            延伸閱讀

            文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/

            TAG: loadrunner LoadRunner Loadrunner loadRunner 軟件測試 神壇


            關(guān)于領(lǐng)測軟件測試網(wǎng) | 領(lǐng)測軟件測試網(wǎng)合作伙伴 | 廣告服務(wù) | 投稿指南 | 聯(lián)系我們 | 網(wǎng)站地圖 | 友情鏈接
            版權所有(C) 2003-2010 TestAge(領(lǐng)測軟件測試網(wǎng))|領(lǐng)測國際科技(北京)有限公司|軟件測試工程師培訓網(wǎng) All Rights Reserved
            北京市海淀區中關(guān)村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
            技術(shù)支持和業(yè)務(wù)聯(lián)系:info@testage.com.cn 電話(huà):010-51297073

            軟件測試 | 領(lǐng)測國際ISTQBISTQB官網(wǎng)TMMiTMMi認證國際軟件測試工程師認證領(lǐng)測軟件測試網(wǎng)

            老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
              <ruby id="h6500"><table id="h6500"></table></ruby>
              1. <ruby id="h6500"><video id="h6500"></video></ruby>
                    1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>