怎樣正確做 Web 應(yīng)用的壓力測(cè)試?

PS:本文轉(zhuǎn)載自黑馬測(cè)試知乎高贊文章
鏈接:https://www.zhihu.com/question/19867883/answer/2909237820

Web應(yīng)用,通俗來(lái)講就是一個(gè)網(wǎng)站,主要依托于瀏覽器來(lái)訪問(wèn)其功能。
那怎么正確做網(wǎng)站的壓力測(cè)試呢?
提到壓力測(cè)試,我們想到的是服務(wù)端壓力測(cè)試,其實(shí)這是片面的,完整的壓力測(cè)試包含服務(wù)端壓力測(cè)試和前端壓力測(cè)試。
為了讓大家看完文章后,更有獲得感,本文將從以下方面進(jìn)行展開(kāi):
1、Web應(yīng)用(網(wǎng)站)壓測(cè)范圍
2、前后端壓測(cè)流程
3、補(bǔ)充1:前端壓力測(cè)試
4、補(bǔ)充2:后端壓力測(cè)試
5、學(xué)習(xí)資料分享

一、Web應(yīng)用(網(wǎng)站)壓力測(cè)試范圍,包含前后端
Web應(yīng)用(網(wǎng)站)最開(kāi)始是不分前后端的(所以,那段時(shí)間PHP這門(mén)專門(mén)用于建站的語(yǔ)言非?;穑髞?lái)隨著網(wǎng)站功能越來(lái)越豐富,前后端不分離的架構(gòu)顯得低效和落后,這時(shí)候前后端分離的架構(gòu)應(yīng)用而生(PHP從此衰弱了)。
在前后端分離的架構(gòu)模式下,前后端工程師約定好數(shù)據(jù)交互接口,實(shí)現(xiàn)并行開(kāi)發(fā)。所以,一個(gè)Web應(yīng)用(網(wǎng)站)其實(shí)是包含前端和后端兩個(gè)獨(dú)立的部分。

Google DoubleClick 研究表明:如果一個(gè)網(wǎng)頁(yè)加載時(shí)長(zhǎng)每增加 1 秒,用戶就會(huì)流失 10%,加載時(shí)長(zhǎng)超過(guò) 3 秒,用戶就會(huì)離開(kāi)。
因此,對(duì)于一個(gè)新的Web應(yīng)用來(lái)說(shuō),除了常見(jiàn)的服務(wù)端壓力測(cè)試,前端的壓力測(cè)試也是不可或缺的。一個(gè)完整的web應(yīng)用壓力測(cè)試流程如下圖所示:


二、前后端壓測(cè)流程
step1、確定壓測(cè)范圍和壓測(cè)目標(biāo)
壓測(cè)范圍:如果是全新的項(xiàng)目,原則上所有的功能和接口基本都要壓測(cè)。如果是老項(xiàng)目新增需求,則需要評(píng)估影響范圍,以便確定老的功能和接口是否需要壓測(cè)
壓測(cè)目標(biāo):如果是全新的項(xiàng)目,要根據(jù)行業(yè)內(nèi)的基本情況和經(jīng)驗(yàn)定一個(gè)預(yù)估目標(biāo);如果是老項(xiàng)目,可以根據(jù)歷史流量峰值作為參考目標(biāo)。
step2、制定壓測(cè)方案
根據(jù)上一步的預(yù)期目標(biāo),制定壓測(cè)方案。具體包含:壓測(cè)環(huán)境,壓測(cè)時(shí)間,相關(guān)負(fù)責(zé)人,測(cè)試工具或平臺(tái),驗(yàn)收標(biāo)準(zhǔn)
壓測(cè)環(huán)境:為了還原真實(shí)的壓力場(chǎng)景,一般選擇預(yù)發(fā)環(huán)境或生產(chǎn)環(huán)境進(jìn)行壓測(cè)
壓測(cè)時(shí)間:壓測(cè)一般在功能測(cè)試或接口測(cè)試完成后介入。
壓測(cè)工具或平臺(tái):前端壓測(cè)可以使用PageSpeed等平臺(tái),后端壓測(cè)一般會(huì)使用 jmeter、loadrunner等工具。(詳細(xì)內(nèi)容見(jiàn)補(bǔ)充1,補(bǔ)充2)
驗(yàn)收標(biāo)準(zhǔn):一般來(lái)說(shuō)要達(dá)到壓測(cè)目標(biāo)的預(yù)估值。
3、壓測(cè)準(zhǔn)備
壓測(cè)機(jī):準(zhǔn)備好壓測(cè)機(jī)群(后端用),用于發(fā)送請(qǐng)求。
服務(wù)器:由于壓測(cè)流量會(huì)較高,所以需要提前準(zhǔn)備服務(wù)器集群,用于承接流量或擴(kuò)容使用
數(shù)據(jù)準(zhǔn)備:準(zhǔn)備用于壓測(cè)的數(shù)據(jù),一般來(lái)說(shuō)要和真實(shí)數(shù)據(jù)做區(qū)分。準(zhǔn)備壓測(cè)腳本,添加標(biāo)識(shí),以便于和真實(shí)流量區(qū)分。
4、實(shí)施壓測(cè)
施壓:在施壓的過(guò)程中,從較小流量開(kāi)始,逐步加壓。
觀察:在逐步加壓的過(guò)程,需要觀察rt、error(報(bào)錯(cuò)率)、服務(wù)器的cpu、內(nèi)存使用率等數(shù)據(jù),如發(fā)現(xiàn)異常要及時(shí)停止壓測(cè),待排查和解決問(wèn)題后再進(jìn)行壓測(cè)。
5、壓測(cè)觀察&瓶頸分析
如何判斷應(yīng)用的承受能力?
在壓測(cè)過(guò)程中觀察報(bào)錯(cuò)率、響應(yīng)時(shí)間等指標(biāo),如出現(xiàn)指標(biāo)異常,則說(shuō)明流量達(dá)到當(dāng)前的瓶頸,需要停止壓測(cè)分析并排查原因。
以下是幾種常見(jiàn)異常的分析方法:
成功率未達(dá)標(biāo):查看錯(cuò)誤日志,排查錯(cuò)誤根本原因,進(jìn)行性能調(diào)優(yōu)
響應(yīng)時(shí)間未達(dá)標(biāo):對(duì)照錯(cuò)誤日志、鏈路追蹤結(jié)果、服務(wù)器性能指標(biāo)、數(shù)據(jù)庫(kù)/中間件監(jiān)控指標(biāo),找到響應(yīng)時(shí)間過(guò)長(zhǎng)的具體原因
吞吐量未達(dá)標(biāo):如果成功率和響應(yīng)時(shí)間均達(dá)標(biāo),建議不斷增加模擬用戶數(shù),重新壓測(cè),查看測(cè)試結(jié)果
什么時(shí)候需要增加服務(wù)器?
在上一步出現(xiàn)瓶頸調(diào)優(yōu)之后,繼續(xù)加壓,觀察各項(xiàng)指標(biāo)
第一種情況:服務(wù)器cpu、內(nèi)存等指標(biāo)均未達(dá)瓶頸(通常以使用率達(dá)到70%-80%為瓶頸),qps、rt、報(bào)錯(cuò)率等指標(biāo)出現(xiàn)異常,此時(shí)需要重復(fù)上一步,排查問(wèn)題并優(yōu)化
第二種情況:rt、報(bào)錯(cuò)率等指標(biāo)未出現(xiàn)異常,服務(wù)器cpu、內(nèi)存使用率即將達(dá)到瓶頸,且未達(dá)到預(yù)期的壓測(cè)目標(biāo),此時(shí)無(wú)法通過(guò)調(diào)優(yōu)來(lái)解決,需要增加服務(wù)器。

6、驗(yàn)收
達(dá)到預(yù)期目標(biāo):達(dá)到預(yù)期目標(biāo),一般可以認(rèn)為壓測(cè)通過(guò)。
未達(dá)到預(yù)期目標(biāo):如因各方面原因(資源、預(yù)算等)未達(dá)預(yù)期目標(biāo),需要產(chǎn)品經(jīng)理和研發(fā)經(jīng)理對(duì)壓測(cè)結(jié)果確認(rèn)。
7、發(fā)送壓測(cè)報(bào)告
如何寫(xiě)一份好的壓測(cè)報(bào)告,可以參考下面這篇文章
《如何做一份精致的性能測(cè)試報(bào)告?112贊同?· 4?評(píng)論回答》
https://www.zhihu.com/question/24248575/answer/2634381185?utm_id=0
8、項(xiàng)目上線
前面的步驟都完成之后,項(xiàng)目可以發(fā)布上線。

三、補(bǔ)充前端該如何壓測(cè)
Google 開(kāi)發(fā)者提出了一種 RAIL 模型來(lái)衡量應(yīng)用的前端性能,即 response(響應(yīng))、animation(動(dòng)畫(huà))、idle(空閑)與load(加載)。

RAIL 模型的廣泛使用關(guān)鍵指標(biāo)如下:

工具使用:PageSpeed
PageSpeed 是 google 一個(gè)開(kāi)源的自動(dòng)化工具,安裝 PageSpeed 擴(kuò)展程序運(yùn)行即可
報(bào)告結(jié)果如圖:

該工具功能豐富,報(bào)告也非常詳細(xì),并給出了優(yōu)化建議,根據(jù)測(cè)試報(bào)告做對(duì)應(yīng)的優(yōu)化即可。

四:補(bǔ)充后端該如何壓測(cè)
后端即指服務(wù)端,后端壓測(cè)就是服務(wù)端壓測(cè),也可以稱為服務(wù)器壓力測(cè)試。
在壓測(cè)過(guò)程中,一般關(guān)注下面幾個(gè)指標(biāo):qps(處理的請(qǐng)求量)、rt(響應(yīng)時(shí)間)、error(報(bào)錯(cuò)率)、cup(cpu使用率)、mem(內(nèi)存占用情況)、load(負(fù)載)、traffic(網(wǎng)絡(luò)速率)。
通過(guò)觀察qps、rt、error等關(guān)鍵指標(biāo),找到服務(wù)器的性能瓶頸,如果低于預(yù)期,則需要調(diào)優(yōu)。

通過(guò)壓力測(cè)試,提前發(fā)現(xiàn)服務(wù)器瓶頸,及時(shí)優(yōu)化,避免網(wǎng)站一上線就奔潰。
工具:壓測(cè)常用的工具有LoadRunner和Jmeter(文末有學(xué)習(xí)視頻)
Jmeter 是一款使用Java開(kāi)發(fā)的,開(kāi)源免費(fèi)的測(cè)試工具, 主要用來(lái)做性能測(cè)試,JMeter 可以用于對(duì)服務(wù)器、網(wǎng)絡(luò)或?qū)ο竽M巨大的負(fù)載,有豐富的圖形界面+腳本配置,方便易用。
LoadRunner 是一種預(yù)測(cè)系統(tǒng)行為和性能的負(fù)載測(cè)試工具。通過(guò)以模擬上千萬(wàn)用戶實(shí)施并發(fā)負(fù)載及實(shí)時(shí)性能監(jiān)測(cè)的方式來(lái)確認(rèn)和查找問(wèn)題。

五、學(xué)習(xí)資料分享
最后,附上壓力測(cè)試相關(guān)的學(xué)習(xí)資料:




出視頻外,另外附贈(zèng)一些有關(guān)性能(壓力)測(cè)試知乎文章:
《想要成為一個(gè)性能測(cè)試工程師需要掌握哪些知識(shí)?94 贊同 · 10 評(píng)論回答》
https://www.zhihu.com/question/34227120/answer/2380071628
《手機(jī)軟件的測(cè)試主要有哪些方面去測(cè)試,性能測(cè)試用什么去測(cè)試好?601 贊同 · 69 評(píng)論回答》
https://www.zhihu.com/question/21588174/answer/1514892788
《測(cè)試好多都是性能小白,雖學(xué)了些性能知識(shí),但在實(shí)際工作做開(kāi)展性能測(cè)試,都很茫然,求指導(dǎo),應(yīng)該怎么處理?91 贊同 · 7 評(píng)論回答》
https://www.zhihu.com/question/63975448/answer/2610023184
《新人如何學(xué)習(xí)性能測(cè)試?279 贊同 · 23 評(píng)論回答》
https://www.zhihu.com/question/22229787/answer/2479020711
《android下的app性能測(cè)試應(yīng)主要針對(duì)那些方面,如何開(kāi)展?101 贊同 · 5 評(píng)論回答》
https://www.zhihu.com/question/21493125/answer/2609768173

若你是對(duì)測(cè)試不太了解的測(cè)試小萌新,有太多太多對(duì)測(cè)試的疑惑(前途、薪資、技術(shù)含量、男生是否可以干.....),強(qiáng)烈推薦你觀看《測(cè)試小白必看:學(xué)習(xí)軟件測(cè)試必問(wèn)的100個(gè)問(wèn)題,從此貼開(kāi)始》,相信能掃除掉你心目中90%以上的常見(jiàn)問(wèn)題。
《100個(gè)常見(jiàn)問(wèn)題鏈接》:http://bbs.itheima.com/thread-507947-1-1.html

最后,為方便大家自學(xué)軟件測(cè)試,特意給大家準(zhǔn)備了一份13G的超實(shí)用干貨學(xué)習(xí)資源,涉及的內(nèi)容非常全面。
包括軟件學(xué)習(xí)路線圖,黑馬50多天的上課視頻、16個(gè)突擊實(shí)戰(zhàn)項(xiàng)目,80余個(gè)軟件測(cè)試用軟件,37份測(cè)試文檔,70個(gè)軟件測(cè)試相關(guān)問(wèn)題,40篇測(cè)試經(jīng)驗(yàn)級(jí)文章,上千份測(cè)試真題分享,還有2020軟件測(cè)試面試寶典,還有軟件測(cè)試求職的各類精選簡(jiǎn)歷,希望對(duì)大家有所幫助…..
《2023黑馬測(cè)試學(xué)習(xí)路線圖鏈接》:http://bbs.itheima.com/thread-405757-1-1.html
