全國(guó)咨詢(xún)/投訴熱線:400-618-4000

首頁(yè)技術(shù)文章正文

如何做性能測(cè)試?[軟件測(cè)試培訓(xùn)]

更新時(shí)間:2019-11-12 來(lái)源:黑馬程序員 瀏覽量:

要解決性能測(cè)試這個(gè)問(wèn)題,我們可以分為三大步:

第一步:了解性能測(cè)試

第二步:熟悉性能測(cè)試流程

第三步:從性能測(cè)試原理分析性能測(cè)試流程和相關(guān)的技術(shù)知識(shí)

下面我們?cè)敿?xì)介紹

一.了解后端性能測(cè)試

1.為什么要做性能測(cè)試?

1.1 這里提供了2個(gè)案例:

示例1:

游戲行業(yè):某游戲上線新功能,目標(biāo)是全服游戲群體,結(jié)果上線后,先后出現(xiàn)了服務(wù)器崩潰,游戲功能圖標(biāo)加載緩慢等問(wèn)題,導(dǎo)致玩家怨聲載道,為此,游戲運(yùn)營(yíng)商不得不發(fā)放了許多獎(jiǎng)勵(lì)。具體損失不表,為趕進(jìn)度而發(fā)布的功能,也因?yàn)樯a(chǎn)事故導(dǎo)致延期更長(zhǎng)的時(shí)間

這就是典型的沒(méi)有進(jìn)行性能測(cè)試,或者說(shuō)性能測(cè)試不充分導(dǎo)致出現(xiàn)的生產(chǎn)事故。在游戲行業(yè)還比較好,畢竟損失的只是虛擬的貨幣和玩家的游戲熱情,但是在傳統(tǒng)行業(yè)呢?

示例2:

傳統(tǒng)航空行業(yè):2019年9月5日,波音777X飛機(jī)在壓力測(cè)試的過(guò)程中,艙門(mén)炸毀。

如果,波音的777X飛機(jī)沒(méi)有經(jīng)過(guò)壓力測(cè)試就試飛了,那么當(dāng)遇到同樣的條件時(shí),艙門(mén)必然炸毀,整個(gè)飛機(jī)就會(huì)直接暴露到高空低壓低氧的環(huán)境,全飛機(jī)的人生存將會(huì)受到直接威脅。

通過(guò)這兩個(gè)案例,我們知道,在一些極限的場(chǎng)景下,軟/件和硬件會(huì)造成極大的破壞和損失,因此,我們需要進(jìn)行性能測(cè)試,來(lái)驗(yàn)證軟件在高壓力下,高并發(fā)下,高負(fù)載下的實(shí)際工作情況。

2. 什么是性能測(cè)試?

性能測(cè)試就是模擬一些極端場(chǎng)景,對(duì)軟/硬件性能進(jìn)行測(cè)試,判斷其極限性能和在極限性能邊界上的運(yùn)行狀態(tài)。

性能測(cè)試主要分為前端性能,網(wǎng)絡(luò)性能和后端性能

? 前端性能:是指對(duì)前端相關(guān)的數(shù)據(jù)指標(biāo)進(jìn)行測(cè)試,主要是HTTP請(qǐng)求,JavaScript,多媒體數(shù)據(jù),CDN,緩存等進(jìn)行測(cè)試,主要關(guān)注響應(yīng)時(shí)間。一般優(yōu)化方向是,縮小數(shù)據(jù)包,提高緩存命中率,即時(shí)響應(yīng)。

? 網(wǎng)絡(luò)性能:是指數(shù)據(jù)包在網(wǎng)絡(luò)中傳播時(shí)的性能,主要關(guān)注網(wǎng)絡(luò)帶寬,網(wǎng)絡(luò)吞吐量,網(wǎng)絡(luò)延時(shí),丟包率等指標(biāo)。

? 后端性能:前端發(fā)起請(qǐng)求后,經(jīng)過(guò)的各類(lèi)中間件和服務(wù)器處理的性能。比如:apache、nginx、rabbitmq、storm、zookeeper、dubbo、mysql數(shù)據(jù)庫(kù)等。主要關(guān)注TPS(Transaction Per Second 每秒事務(wù)請(qǐng)求數(shù)),CPU,內(nèi)存,交換內(nèi)存,IOPS(IO吞吐量),TCP連接數(shù)等指標(biāo))

3.性能測(cè)試的目標(biāo)

總之,性能測(cè)試的目的,就是為了提前發(fā)現(xiàn)軟/硬件的瓶頸,從而可以進(jìn)行評(píng)估和改進(jìn)的一種測(cè)試。

本文重點(diǎn)介紹軟件性能測(cè)試中的后端性能測(cè)試。

二.熟悉性能測(cè)試流程

本章節(jié)主要是為了介紹常用的性能測(cè)試流程

性能測(cè)試流程可以簡(jiǎn)單的劃分為4個(gè)階段:

? 性能需求分析階段

? 準(zhǔn)備階段

? 執(zhí)行階段

? 報(bào)告和總結(jié)階段


1573542498293_性能測(cè)試01.jpg

性能需求分析階段

? 熟悉項(xiàng)目相關(guān)的資源,如:架構(gòu)設(shè)計(jì),軟/硬件環(huán)境配置,線上業(yè)務(wù)運(yùn)營(yíng)數(shù)據(jù)(交易量、用戶(hù)活躍度、請(qǐng)求分布等等)

? 根據(jù)運(yùn)營(yíng)數(shù)據(jù)或者指標(biāo),確定性能測(cè)試要達(dá)到的目標(biāo),如:支持xx用戶(hù)并發(fā),TPS達(dá)到多少,響應(yīng)時(shí)間達(dá)到多少,還有CPU,網(wǎng)絡(luò),IO的負(fù)載情況等等

? 設(shè)計(jì)性能測(cè)試計(jì)劃:與功能測(cè)試計(jì)劃差不多,主要對(duì)以下內(nèi)容進(jìn)行設(shè)計(jì)(根據(jù)實(shí)際情況設(shè)計(jì),比如有的公司只看結(jié)果,就可以省略許多不必要的文案說(shuō)明):

– 項(xiàng)目背景

– 項(xiàng)目結(jié)構(gòu)

– 測(cè)試功能/范圍

– 軟/硬件資源準(zhǔn)備和對(duì)比

– 技術(shù)術(shù)語(yǔ)

– 時(shí)間/人力安排

– 度量方式

– 準(zhǔn)入準(zhǔn)出條件

– 各階段需要接收和交付的文檔

– 壓測(cè)工具和監(jiān)控工具

– 風(fēng)險(xiǎn)項(xiàng)

– 其他

? 設(shè)計(jì)性能測(cè)試場(chǎng)景

主要有以下場(chǎng)景:

– 基準(zhǔn)測(cè)試:了解系統(tǒng)在靜置時(shí)的資源消耗,如cpu,io,網(wǎng)絡(luò)帶寬,網(wǎng)絡(luò)連接的情況。如果有干擾,務(wù)必排除。

– 單次連續(xù)請(qǐng)求測(cè)試:1次連續(xù)請(qǐng)求情況下的tps,響應(yīng)時(shí)間,服務(wù)器資源消耗情況,主要用于參考。

– 負(fù)載測(cè)試:逐漸增加并發(fā)請(qǐng)求數(shù),查看tps,響應(yīng)時(shí)間,錯(cuò)誤率,服務(wù)器資源消耗情況,主要用于分析最大性能。

– 壓力測(cè)試:在最大性能的臨界點(diǎn)上保持壓力進(jìn)行測(cè)試,查看服務(wù)器在高壓力情況的處理情況。

– 穩(wěn)定性測(cè)試:連續(xù)xx天內(nèi),在一定的并發(fā)下進(jìn)行測(cè)試,查看服務(wù)器運(yùn)行情況是否能達(dá)到需求設(shè)計(jì)

準(zhǔn)備階段

? 搭建性能測(cè)試環(huán)境

? 設(shè)計(jì)性能測(cè)試用例

? 準(zhǔn)備測(cè)試數(shù)據(jù)

? 編寫(xiě)測(cè)試腳本

執(zhí)行階段

? 運(yùn)行性能監(jiān)控工具

? 按照測(cè)試場(chǎng)景,執(zhí)行測(cè)試用例。

? 分析:分析性能瓶頸,針對(duì)不同的業(yè)務(wù)場(chǎng)景,分析的側(cè)重點(diǎn)也不一樣,比如計(jì)算密集型,IO密集型的業(yè)務(wù),還有線程鎖,垃圾回收機(jī)制等等

? 調(diào)優(yōu)

結(jié)果階段

? 總結(jié)測(cè)試結(jié)果,輸出性能測(cè)試報(bào)告

三.了解性能測(cè)試需要用到的技術(shù)

本章節(jié),主要是通過(guò)性能測(cè)試的原理,了解性能測(cè)試需要使用的各方面的知識(shí)和技術(shù)。

性能測(cè)試原理介紹:

性能測(cè)試,本質(zhì)就是模擬客戶(hù)端請(qǐng)求,對(duì)服務(wù)器進(jìn)行高并發(fā),高流量的壓力測(cè)試,從而驗(yàn)證服務(wù)器提供服務(wù)的能力,并找出瓶頸點(diǎn),提出或者進(jìn)行優(yōu)化。

問(wèn)題:

1. 怎么模擬高并發(fā),高流量?

2. 怎么進(jìn)行性能優(yōu)化?

1. 怎么模擬高并發(fā):

– 使用多線程技術(shù),模擬高并發(fā)。

– 如果并發(fā)太高,如10w并發(fā)以上,則需要使用負(fù)載均衡和分布式處理技術(shù),jmeter工具支持多臺(tái)機(jī)器作為負(fù)載機(jī)。

2. 怎么模擬高流量:

– 在每個(gè)請(qǐng)求中塞入大量數(shù)據(jù)即可

3. 怎么進(jìn)行性能優(yōu)化

– 這是個(gè)大問(wèn)題,下文《怎么進(jìn)行性能優(yōu)化》會(huì)有更詳細(xì)的講解

那么怎么提升性能呢?我們首先介紹一個(gè)衡量性能標(biāo)準(zhǔn)的一個(gè)參數(shù):TPS(Transaction Per Second 每秒事務(wù)請(qǐng)求數(shù))。

我們?cè)倏匆幌耇PS計(jì)算公式:

TPS = 總請(qǐng)求數(shù)/ 平均響應(yīng)時(shí)間

總請(qǐng)求數(shù):在一段時(shí)間內(nèi)發(fā)送的所有請(qǐng)求數(shù)量

平均響應(yīng)時(shí)間:所有請(qǐng)求的平均響應(yīng)時(shí)間

通過(guò)這個(gè)公式,我們可以知道,當(dāng)分母越小時(shí),TPS越大。所以要提升性能,我們只需要提高平均響應(yīng)時(shí)間就可以了。那么怎么減少平均響應(yīng)時(shí)間呢?【本文來(lái)自:黑馬程序員

我們先看一個(gè)客戶(hù)端到服務(wù)器的請(qǐng)求流程圖:

1573542577305_性能測(cè)試02.jpg

圖中,客戶(hù)端發(fā)送請(qǐng)求經(jīng)過(guò)了互聯(lián)網(wǎng)到服務(wù)器,服務(wù)器經(jīng)過(guò)內(nèi)部處理,從數(shù)據(jù)庫(kù)中讀取了數(shù)據(jù),然后把數(shù)據(jù)返回給客戶(hù)端。這過(guò)程中,經(jīng)歷的時(shí)間大致可以分為:C1+T1+T2+T3+N2+T4+T5。

所以,要把平均響應(yīng)時(shí)間縮小,我們只需要縮小這8個(gè)時(shí)間就夠了,其中主要包括:

? 網(wǎng)絡(luò)時(shí)間(T1+T2+T3+T4+T5),

? 服務(wù)器內(nèi)部處理時(shí)間(N1),

? 數(shù)據(jù)庫(kù)處理時(shí)間(N2),

? 客戶(hù)端處理時(shí)間(C1)。

所以我們可以就可以從這三個(gè)方向去優(yōu)化:提高網(wǎng)絡(luò)傳輸速率,服務(wù)器內(nèi)部處理速率,數(shù)據(jù)庫(kù)處理速率,客戶(hù)端處理速率,其中客戶(hù)端處理速度也和服務(wù)端優(yōu)化策略基本相同

性能優(yōu)化:

網(wǎng)絡(luò)傳輸速率的提高:

1,采用光纖,配置路由表,縮短網(wǎng)絡(luò)傳輸距離與路由器躍點(diǎn)數(shù)量。

2,如果是實(shí)時(shí)服務(wù),那么需要配置緩存服務(wù)器,盡量避免緩存穿透

服務(wù)器內(nèi)部處理速率的提高:

1. 計(jì)算密集型:優(yōu)化思路是提高CPU利用率,采用多線程的思路進(jìn)行。但是線程數(shù)量不能超過(guò)cpu核心數(shù)。因?yàn)榫€程數(shù)量超過(guò)cpu核心數(shù)后,cpu會(huì)分片執(zhí)行超過(guò)部分的線程,會(huì)增加cpu讀取線程緩存的壓力,使計(jì)算能力下降

2. IO密集型:

– 優(yōu)化思路是提高存儲(chǔ)的效率,如使用固態(tài)硬盤(pán),陣列,分布式等技術(shù)。

– 由于IO密集型中,CPU可能會(huì)等待IO操作完成。所以我們可以使用超過(guò)CPU核心數(shù)的線程來(lái)訪問(wèn)IO,從而提高性能(但如果磁盤(pán)繁忙,線程數(shù)再多也只是在磁盤(pán)隊(duì)列中排隊(duì),增加CPU線程數(shù)來(lái)訪問(wèn)IO的方法,適用于IO讀/寫(xiě)操作并不繁忙,但是需要長(zhǎng)時(shí)間尋址的場(chǎng)景)

– 注意:因?yàn)榇疟P(pán)內(nèi)部只有1個(gè)線程處理IO操作,所以要真正實(shí)現(xiàn)磁盤(pán)的并發(fā),需要使用多個(gè)磁盤(pán),也就是磁盤(pán)陣列

數(shù)據(jù)庫(kù)處理速率:

? 數(shù)據(jù)庫(kù)直接和IO進(jìn)行交互,所以提高IO性能,能提高數(shù)據(jù)庫(kù)性能。

? 數(shù)據(jù)庫(kù)有自己的數(shù)據(jù)結(jié)構(gòu),所以?xún)?yōu)化數(shù)據(jù)存儲(chǔ)和查詢(xún)的相關(guān)算法,也能提高數(shù)據(jù)庫(kù)性能

? 索引優(yōu)化

? 緩存優(yōu)化

? 數(shù)據(jù)庫(kù)連接優(yōu)化

? 數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)句優(yōu)化

? 分表分庫(kù)

? 分布式處理

性能優(yōu)化方向也可以用一個(gè)思維導(dǎo)圖來(lái)表示:

硬件優(yōu)化:加cpu升級(jí),cpu陣列;使用ssd固態(tài)硬盤(pán);主板用最先進(jìn)的,內(nèi)存用最高的,網(wǎng)絡(luò)用專(zhuān)線等等。

操作系統(tǒng)優(yōu)化:

? windows操作系統(tǒng),去掉不需要的服務(wù),根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景調(diào)整線程,虛擬內(nèi)存,緩存的大小等相關(guān)配置項(xiàng),需要專(zhuān)業(yè)人士操作

? Linux操作系統(tǒng):與windows基本相同

中間件優(yōu)化:根據(jù)不同的業(yè)務(wù)場(chǎng)景,選擇不同的中間件,調(diào)整配置等等,如nginx中啟用的cpu核心數(shù)量等等

架構(gòu)優(yōu)化:采用分布式存儲(chǔ)架構(gòu),分布式服務(wù)器架構(gòu),負(fù)載均衡等

代碼優(yōu)化:許多問(wèn)題都是代碼的問(wèn)題,如果代碼問(wèn)題能準(zhǔn)確定位,可以考慮優(yōu)化代碼。

數(shù)據(jù)庫(kù)優(yōu)化:優(yōu)化索引,配置,數(shù)據(jù)庫(kù)連接,算法等等

算法優(yōu)化:這個(gè)不提了,算法屬于底層的優(yōu)化,需要非常扎實(shí)的計(jì)算機(jī)基礎(chǔ)知識(shí)和優(yōu)秀的邏輯思維以及靈感

其他:線程,進(jìn)程,網(wǎng)絡(luò)等等

性能監(jiān)控

我們要分析數(shù)據(jù),就必須得到數(shù)據(jù),所以需要性能監(jiān)控工具來(lái)采集和展示數(shù)據(jù),才能進(jìn)行分析。

那么我們要怎么進(jìn)行監(jiān)控呢?這里我們可以借助已經(jīng)實(shí)現(xiàn)的工具來(lái)進(jìn)行。

Linux:

? 可以使用sysstat工具包中的sar命令來(lái)監(jiān)控CPU,內(nèi)存,IO,網(wǎng)絡(luò)的運(yùn)行情況,具體用法參考:http://lovesoo.org/linux-sar-command-detailed.html

? 可以使用ps命令查看線程運(yùn)行情況

JAVA:可以使用jstack,jprofile,jstat,jmap,jps工具來(lái)進(jìn)行查看,這是java自帶的工具包,用于分析java的堆棧信息

Windows:

? 可以使用widnows自帶的資源監(jiān)視器監(jiān)控和采集數(shù)據(jù)

數(shù)據(jù)庫(kù)監(jiān)控:

? mysql數(shù)據(jù)庫(kù)有自帶的監(jiān)控工具,但是收費(fèi)

? 可以使用免費(fèi)的工具進(jìn)行監(jiān)控,如innotop

? 可以使用綜合能力強(qiáng)大的工具監(jiān)控,如zabbix(也能監(jiān)控服務(wù)端)

其他:

? 前端性能監(jiān)控:Yslow,谷歌開(kāi)發(fā)者模式->performance,使用windows.performance 進(jìn)行定制化開(kāi)發(fā)

? Android監(jiān)控:

– 網(wǎng)易開(kāi)源的Emmagee,

– 騰訊開(kāi)源的GT,

– 科大訊飛的iTest,

– Google的開(kāi)源Battery

– 自己開(kāi)發(fā)

? IOS監(jiān)控:

– 自己開(kāi)發(fā),參考:http://www.cocoachina.com/articles/19680

? 服務(wù)器中間件:nginx,apache,dubbo,redis,kafka等

看到需要學(xué)習(xí)這么多技術(shù),可能會(huì)讓大家感到許多壓力。但是大家不用慌,這里介紹一個(gè)開(kāi)源的性能測(cè)試工具,功能強(qiáng)大也好用,不滿(mǎn)意還可以二次開(kāi)發(fā),它就是jmeter

jmeter可以很好的支持并發(fā)操作,并有內(nèi)置模塊收集TPS,響應(yīng)時(shí)間等關(guān)鍵性能指標(biāo)。服務(wù)端性能也可以使用jmeter插件來(lái)實(shí)現(xiàn)監(jiān)控,只要掌握jmeter工具的使用和性能測(cè)試流程,性能測(cè)試就不再遙遠(yuǎn)!

總結(jié)

想要做好性能測(cè)試,的確需要比較扎實(shí)的基本功和豐富的應(yīng)用經(jīng)驗(yàn),但是如果想快速入門(mén)進(jìn)行性能測(cè)試,可以重點(diǎn)掌握性能測(cè)試流程和jmeter工具就可以初步達(dá)到要求了。

本文來(lái)自:黑馬程序員 軟件測(cè)試學(xué)院

分享到:
在線咨詢(xún) 我要報(bào)名
和我們?cè)诰€交談!