- 軟件性能測(cè)試、分析與調(diào)優(yōu)實(shí)踐之路
- 張永清
- 3322字
- 2022-07-27 19:26:23
1.4 性能測(cè)試的基本流程
通常情況下,性能測(cè)試一般會(huì)經(jīng)歷如圖1-4-1所示的多個(gè)階段,這些階段可以和很多性能測(cè)試工具對(duì)應(yīng)起來(lái),比如分析性能測(cè)試結(jié)果可以用LoadRunner的Analysis工具來(lái)實(shí)現(xiàn)。

圖1-4-1
1.4.1 性能需求分析
· 熟悉被壓測(cè)系統(tǒng)的基本業(yè)務(wù)流程,明確此次性能測(cè)試要達(dá)到的目標(biāo),與產(chǎn)品經(jīng)理、業(yè)務(wù)人員、架構(gòu)師、技術(shù)經(jīng)理一起溝通,找到業(yè)務(wù)需求的性能點(diǎn)。
· 熟悉系統(tǒng)的應(yīng)用架構(gòu)、技術(shù)架構(gòu)、數(shù)據(jù)架構(gòu)、部署架構(gòu)等,找到與其他系統(tǒng)的交互流程,明確系統(tǒng)部署的硬件配置信息、軟件配置信息,把對(duì)性能測(cè)試有重要影響的關(guān)鍵點(diǎn)明確地列舉出來(lái),一般包括如下:
用戶(hù)發(fā)起請(qǐng)求的順序、請(qǐng)求之間的相互調(diào)用關(guān)系。
業(yè)務(wù)數(shù)據(jù)流走向、數(shù)據(jù)是如何流轉(zhuǎn)的、經(jīng)過(guò)了哪些應(yīng)用服務(wù)、經(jīng)過(guò)了哪些存儲(chǔ)服務(wù)。
評(píng)估被壓測(cè)系統(tǒng)可能存在的重點(diǎn)資源消耗,是I/O消耗型、CPU消耗型,還是內(nèi)存消耗型,這樣在壓測(cè)執(zhí)行時(shí)可以重點(diǎn)進(jìn)行監(jiān)控。
關(guān)注應(yīng)用的部署架構(gòu)。如果是集群部署,壓測(cè)時(shí)需要關(guān)注應(yīng)用的負(fù)載均衡轉(zhuǎn)發(fā)是否均勻,每臺(tái)應(yīng)用服務(wù)器資源消耗是否大體一致。
和技術(shù)經(jīng)理一起溝通,明確應(yīng)用的并發(fā)架構(gòu)是采用多線程處理還是多進(jìn)程處理,重點(diǎn)需要關(guān)注是否會(huì)死鎖、數(shù)據(jù)是否存在不一致、線程同步鎖是否合理(鎖的粒度一般不宜過(guò)大,過(guò)大時(shí)可能會(huì)影響并發(fā)線程的處理)等。
· 明確系統(tǒng)上線后可能會(huì)達(dá)到的最大并發(fā)用戶(hù)數(shù)、用戶(hù)期望的平均響應(yīng)時(shí)間以及峰值時(shí)的業(yè)務(wù)吞吐量,并將這些信息轉(zhuǎn)化為性能需求指標(biāo)。
1.4.2 制定性能測(cè)試計(jì)劃
性能測(cè)試計(jì)劃是性能測(cè)試的指導(dǎo),是一系列測(cè)試活動(dòng)的依據(jù),在制定性能測(cè)試計(jì)劃時(shí),需要明確系統(tǒng)的上線時(shí)間點(diǎn)、當(dāng)前項(xiàng)目的進(jìn)度以及所處的階段、可以供調(diào)配的硬件資源和性能測(cè)試人員。一個(gè)完整的性能測(cè)試計(jì)劃一般包括如下幾個(gè)部分:
· 性能測(cè)試計(jì)劃編寫(xiě)的目的:主要是作為整個(gè)性能測(cè)試過(guò)程的指導(dǎo),讓性能測(cè)試環(huán)境搭建、測(cè)試策略的選取、任務(wù)與進(jìn)度事項(xiàng)跟蹤、性能測(cè)試風(fēng)險(xiǎn)分析等事項(xiàng)有序地進(jìn)行,同時(shí)也需要明確此次性能測(cè)試預(yù)期需要達(dá)到的標(biāo)準(zhǔn),以及明確性能測(cè)試完成而退出測(cè)試所需的條件。
· 明確各個(gè)階段的具體執(zhí)行時(shí)間點(diǎn)以及對(duì)應(yīng)的責(zé)任人:
預(yù)計(jì)由誰(shuí)何時(shí)開(kāi)始性能需求分析,何時(shí)結(jié)束性能需求分析。
預(yù)計(jì)由誰(shuí)何時(shí)完成性能測(cè)試方案的編寫(xiě),何時(shí)結(jié)束性能測(cè)試方案的編寫(xiě)。
預(yù)計(jì)由誰(shuí)何時(shí)完成性能測(cè)試案例的編寫(xiě),何時(shí)結(jié)束性能測(cè)試案例的編寫(xiě)。
預(yù)計(jì)由誰(shuí)何時(shí)開(kāi)始搭建性能測(cè)試環(huán)境,何時(shí)結(jié)束性能測(cè)試環(huán)境的搭建。
預(yù)計(jì)由誰(shuí)何時(shí)開(kāi)始準(zhǔn)備性能測(cè)試需要的數(shù)據(jù),何時(shí)準(zhǔn)備完畢。
預(yù)計(jì)由誰(shuí)何時(shí)開(kāi)始編寫(xiě)性能測(cè)試腳本,何時(shí)編寫(xiě)完畢。性能測(cè)試腳本的編寫(xiě)一般包含如下步驟:
◆ 按照性能測(cè)試場(chǎng)景,開(kāi)始錄制性能測(cè)試腳本或者直接編寫(xiě)性能測(cè)試腳本,此時(shí)可能用到的常見(jiàn)性能測(cè)試工具包括LoadRunner、BadBoy、JMeter、nGrinder等。
◆ 根據(jù)準(zhǔn)備好的測(cè)試數(shù)據(jù),對(duì)性能測(cè)試腳本進(jìn)行參數(shù)化,添加集合點(diǎn)、事務(wù)分析點(diǎn)等。
◆ 對(duì)性能腳本進(jìn)行試運(yùn)行調(diào)試,確保不出現(xiàn)報(bào)錯(cuò),并且可以覆蓋到測(cè)試場(chǎng)景中所有操作。
預(yù)計(jì)由誰(shuí)何時(shí)開(kāi)始性能測(cè)試的執(zhí)行,何時(shí)完成性能測(cè)試的執(zhí)行,此階段一般需要完成如下事項(xiàng):
◆ 完成每一個(gè)性能測(cè)試場(chǎng)景和案例的執(zhí)行,記錄相關(guān)的性能測(cè)試結(jié)果,明確性能曲線的變化趨勢(shì),獲取性能的拐點(diǎn)等。
◆ 根據(jù)性能測(cè)試的結(jié)果,評(píng)估性能數(shù)據(jù)是否可以滿(mǎn)足預(yù)期,從性能測(cè)試結(jié)果數(shù)據(jù)中分析存在的性能問(wèn)題。
◆ 針對(duì)性能問(wèn)題,進(jìn)行性能定位和優(yōu)化,然后進(jìn)行二次壓測(cè),直至性能數(shù)據(jù)可以滿(mǎn)足預(yù)期,性能測(cè)試問(wèn)題得到解決。
◆ 完成性能測(cè)試分析報(bào)告的編寫(xiě)。
· 性能測(cè)試風(fēng)險(xiǎn)的分析和控制:評(píng)估可能存在的風(fēng)險(xiǎn)和不可控的因素,以及這些風(fēng)險(xiǎn)和因素對(duì)性能測(cè)試可能產(chǎn)生的影響,針對(duì)這些風(fēng)險(xiǎn)因素需要給出對(duì)應(yīng)的短期和長(zhǎng)期的解決方案。性能測(cè)試風(fēng)險(xiǎn)一般包括如下:
性能測(cè)試環(huán)境因素:無(wú)法預(yù)期完成性能測(cè)試環(huán)境的搭建,這中間的原因可能是硬件引起也可能是軟件引起,硬件原因一般可能包括性能壓測(cè)服務(wù)器無(wú)法按時(shí)到位、服務(wù)器硬件配置無(wú)法滿(mǎn)足預(yù)期(一般要求性能壓測(cè)服務(wù)器硬件配置等同于生產(chǎn)環(huán)境,服務(wù)器的節(jié)點(diǎn)數(shù)可以少于生產(chǎn)環(huán)境,但是需要保證每個(gè)應(yīng)用服務(wù)至少部署了兩臺(tái)節(jié)點(diǎn)服務(wù)器)。軟件原因可能包括性能測(cè)試環(huán)境軟件配置無(wú)法和生產(chǎn)環(huán)境保持一致(一般要求性能壓測(cè)環(huán)境軟件配置,比如軟件版本、數(shù)據(jù)庫(kù)版本、驅(qū)動(dòng)版本等要和生產(chǎn)環(huán)境完全保持一致)。
性能測(cè)試人員因素:性能測(cè)試人員無(wú)法按時(shí)到位參與項(xiàng)目的性能測(cè)試,如果出現(xiàn)這樣的風(fēng)險(xiǎn),肯定會(huì)導(dǎo)致性能測(cè)試無(wú)法預(yù)期進(jìn)行,需要立即向項(xiàng)目經(jīng)理進(jìn)行匯報(bào),以確保可以協(xié)調(diào)到合適的人員,因?yàn)檫@是一個(gè)非常嚴(yán)重的風(fēng)險(xiǎn)。
性能測(cè)試結(jié)果無(wú)法達(dá)到預(yù)期:即系統(tǒng)的性能無(wú)法達(dá)到生產(chǎn)預(yù)期上線要求或者存在性能問(wèn)題無(wú)法解決。性能調(diào)優(yōu)其實(shí)本身就是一個(gè)長(zhǎng)期不斷優(yōu)化的過(guò)程,此時(shí)可以看是否通過(guò)服務(wù)器的橫向或者縱向擴(kuò)容來(lái)解決,如果還是無(wú)法解決,那么也需要提前上報(bào)風(fēng)險(xiǎn)。
1.4.3 編寫(xiě)性能測(cè)試方案
在有了性能測(cè)試計(jì)劃后,我們就需要按照性能需求分析的結(jié)果來(lái)制定性能測(cè)試方案,即按照什么樣的思路和策略去測(cè)試、需要設(shè)計(jì)哪些測(cè)試場(chǎng)景以及測(cè)試場(chǎng)景執(zhí)行的先后順序、每個(gè)測(cè)試場(chǎng)景需要重點(diǎn)關(guān)注的性能點(diǎn)等,一般包括如下:
· 測(cè)試場(chǎng)景的設(shè)計(jì)
單場(chǎng)景設(shè)計(jì):?jiǎn)我粯I(yè)務(wù)流程的處理模式設(shè)計(jì)。
混合場(chǎng)景設(shè)計(jì):多個(gè)業(yè)務(wù)流程同時(shí)混合處理模式的設(shè)計(jì)。
· 定義事務(wù):測(cè)試方案中需要明確定義好壓測(cè)事務(wù),方便分析響應(yīng)時(shí)間(特別是在混合場(chǎng)景中,事務(wù)的定義可以方便分析每一個(gè)場(chǎng)景響應(yīng)時(shí)間的消耗)。比如我們對(duì)淘寶網(wǎng)購(gòu)買(mǎi)商品這一場(chǎng)景進(jìn)行壓測(cè),可以把下訂單定義為一個(gè)事務(wù),把支付也定義為一個(gè)事務(wù),在壓測(cè)結(jié)果中,如果響應(yīng)時(shí)間較長(zhǎng)時(shí),就可以對(duì)每一個(gè)事務(wù)進(jìn)行分析,看哪個(gè)事務(wù)耗時(shí)最長(zhǎng)。
· 明確監(jiān)控對(duì)象:針對(duì)每個(gè)場(chǎng)景,明確可能的性能瓶頸點(diǎn)(比如數(shù)據(jù)庫(kù)查詢(xún)、Web服務(wù)器服務(wù)轉(zhuǎn)發(fā)、應(yīng)用服務(wù)器等)、需要監(jiān)控的對(duì)象,比如TPS、平均響應(yīng)時(shí)間、點(diǎn)擊率、并發(fā)連接數(shù)、CPU、內(nèi)存、IO等。
· 定義測(cè)試策略:
明確性能測(cè)試的類(lèi)型:需要進(jìn)行哪些類(lèi)型的性能測(cè)試,比如負(fù)載測(cè)試、壓力測(cè)試、穩(wěn)定性測(cè)試等。
明確性能測(cè)試場(chǎng)景的執(zhí)行順序,一般是先執(zhí)行單場(chǎng)景,后執(zhí)行混合場(chǎng)景測(cè)試。
如果是進(jìn)行壓力測(cè)試,還需要明確加壓的方式,比如按照開(kāi)始前5分鐘,20個(gè)用戶(hù),然后每隔5分鐘,增加20個(gè)用戶(hù)來(lái)進(jìn)行加壓。
· 性能測(cè)試工具的選?。?/p>
性能測(cè)試工具有很多,常見(jiàn)的有LoadRunner、JMeter、nGrinder等,那么如何來(lái)選取合適的性能測(cè)試工具呢?
一般性能測(cè)試工具都是基于網(wǎng)絡(luò)協(xié)議開(kāi)發(fā)的,所以我們需要明確待壓測(cè)系統(tǒng)使用的協(xié)議,盡可能和被壓測(cè)系統(tǒng)的協(xié)議保持一致,或者至少要支持被壓測(cè)系統(tǒng)的協(xié)議。
理解每種工具實(shí)現(xiàn)的原理,比如哪些工具適用于同步請(qǐng)求的壓測(cè),哪些工具適用于異步請(qǐng)求的壓測(cè)。
壓測(cè)時(shí)明確連接的類(lèi)型,比如屬于長(zhǎng)連接還是短連接、一般連接多久能釋放。
明確性能測(cè)試工具并發(fā)加壓的方式,比如是多線程加壓還是多進(jìn)程加壓,一般采用的都是多線程加壓。
· 明確硬件配置和軟件配置:
硬件配置一般包括:服務(wù)器的CPU配置、內(nèi)存配置、硬盤(pán)存儲(chǔ)配置、集群環(huán)境下還要包括集群節(jié)點(diǎn)的數(shù)量配置等。
軟件配置一般包括:
操作系統(tǒng)配置:操作系統(tǒng)的版本以及參數(shù)配置需要同線上保持一致。
應(yīng)用版本配置:應(yīng)用版本要和線上保持一致,特別是中間件、數(shù)據(jù)庫(kù)組件等的版本,因?yàn)椴煌姹?,其性能可能不一樣?/p>
參數(shù)配置:比如Web中間件服務(wù)器的負(fù)載均衡、反向代理參數(shù)配置、數(shù)據(jù)庫(kù)服務(wù)器參數(shù)配置等。
· 網(wǎng)絡(luò)配置:一般為了排除網(wǎng)絡(luò)瓶頸,除非有特殊要求外,通常建議在局域網(wǎng)下進(jìn)行性能測(cè)試,并且明確壓測(cè)服務(wù)器的網(wǎng)卡類(lèi)型以及網(wǎng)絡(luò)交換機(jī)的類(lèi)型,比如網(wǎng)卡屬于千兆網(wǎng)卡,或者交換機(jī)屬于百兆交換機(jī)還是千兆交換機(jī)等,這對(duì)我們以后分析性能瓶頸會(huì)有很大的幫助,在網(wǎng)絡(luò)吞吐量較大的待壓測(cè)系統(tǒng)中,網(wǎng)絡(luò)有時(shí)候也很容易成為一個(gè)性能瓶頸。
1.4.4 編寫(xiě)性能測(cè)試案例
性能測(cè)試案例一般是對(duì)性能測(cè)試方案中性能壓測(cè)場(chǎng)景的進(jìn)一步細(xì)化,一般包括如下:
· 預(yù)置條件:一般指執(zhí)行此案例需要滿(mǎn)足何種條件,性能測(cè)試案例才可以執(zhí)行。比如性能測(cè)試數(shù)據(jù)需要準(zhǔn)備到位、性能測(cè)試環(huán)境需要啟動(dòng)成功等。
· 執(zhí)行步驟:詳細(xì)描述案例執(zhí)行的步驟,一般需要描述包括測(cè)試腳本的錄制和編寫(xiě)、腳本的調(diào)試、腳本的執(zhí)行過(guò)程(比如如何加壓、每個(gè)加壓的過(guò)程持續(xù)多久等)、需要觀察和記錄的性能指標(biāo)、需要明確性能曲線的走勢(shì)、需要監(jiān)控哪些性能指標(biāo)等。
· 性能預(yù)期結(jié)果:描述性能測(cè)試預(yù)期需要達(dá)到的結(jié)果,比如TPS需要達(dá)到多少、平均響應(yīng)時(shí)間需要控制到多少以?xún)?nèi)、服務(wù)器資源的消耗需要控制在多少以?xún)?nèi)等。
- Revit 2020中文版從入門(mén)到精通
- QTP自動(dòng)化測(cè)試最佳實(shí)踐
- Android 網(wǎng)絡(luò)開(kāi)發(fā)與應(yīng)用實(shí)戰(zhàn)詳解
- 網(wǎng)絡(luò)空間測(cè)繪技術(shù)與實(shí)踐:讓互聯(lián)網(wǎng)情報(bào)服務(wù)于網(wǎng)絡(luò)安全
- 經(jīng)·理@互聯(lián)網(wǎng)產(chǎn)品經(jīng)理的進(jìn)階修煉
- 軟件開(kāi)發(fā)生產(chǎn)率改進(jìn):軟件管理的有效領(lǐng)導(dǎo)力與量化方法
- Swift權(quán)威指南
- 搜索引擎與程序化廣告:原理、設(shè)計(jì)與實(shí)戰(zhàn)
- 無(wú)網(wǎng)格法理論及MATLAB程序
- 架構(gòu)基礎(chǔ):從需求到架構(gòu)
- 開(kāi)發(fā)者關(guān)系:方法與實(shí)踐
- Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)及實(shí)踐
- 計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)集成技術(shù)基礎(chǔ)與解決方案
- TensorFlow+Android經(jīng)典模型從理論到實(shí)戰(zhàn)(微課視頻版)
- Spring Boot+Vue 3大型前后端分離項(xiàng)目實(shí)戰(zhàn)