? ? 昨天,破冰分享主題是“性能測(cè)試”债查,對(duì)于我這個(gè)還沒(méi)有接觸過(guò)性能測(cè)試的人來(lái)說(shuō)非区,真的是充滿了膜拜,于自己而言盹廷,一頭霧水……需要補(bǔ)充的知識(shí)有好多……
1.需要了解的基礎(chǔ)知識(shí)
HTML語(yǔ)言基礎(chǔ):比如post請(qǐng)求征绸、元素、屬性俄占、鏈接管怠、表單、url等都需要了解
C語(yǔ)言基礎(chǔ):后期使用Loundrunner缸榄,它有些東西是基于c語(yǔ)言寫的渤弛,基本的知識(shí)即可
http協(xié)議:后期要對(duì)接口做性能測(cè)試,了解http請(qǐng)求甚带,如get她肯、post請(qǐng)求,請(qǐng)求返回的狀態(tài)碼鹰贵,請(qǐng)求報(bào)頭信息等
xml:與html類似
JSON:如post請(qǐng)求辕宏,其中都是用json傳輸數(shù)據(jù)
數(shù)據(jù)庫(kù):增刪改查,操作后要確認(rèn)數(shù)據(jù)是否正常
2.性能測(cè)試基礎(chǔ)介紹
(1)性能測(cè)試重要性與功能測(cè)試區(qū)別
? ? ? ? 從功能測(cè)試向性能測(cè)試轉(zhuǎn)變的時(shí)候砾莱,需要注意的是:需要把功能測(cè)試的思想去掉瑞筐,往性能測(cè)試上轉(zhuǎn)換
(2)性能測(cè)試分類
? ? ? ? 負(fù)載測(cè)試:看一下系統(tǒng)指標(biāo)達(dá)到的極限,達(dá)到哪個(gè)極限的時(shí)候系統(tǒng)處于飽和的狀態(tài)
? ? ? ? 壓力測(cè)試:有時(shí)候也叫強(qiáng)度測(cè)試,cpu聚假、內(nèi)存都在100%使用的情況下块蚌,系統(tǒng)處理各自任務(wù)的能力,是否會(huì)出現(xiàn)錯(cuò)誤
? ? ? ? 并發(fā)測(cè)試:用戶同時(shí)向一個(gè)應(yīng)用發(fā)送請(qǐng)求膘格,看系統(tǒng)多久可以將并發(fā)的數(shù)據(jù)完成
? ? ? ? 配置測(cè)試
? ? ? ? 可靠性測(cè)試
(3)多角度看待性能
? ? ? ? 沒(méi)有一個(gè)準(zhǔn)確的標(biāo)準(zhǔn)峭范,從不同的角度看,解釋就不一樣.
? ? ? ? 從用戶來(lái)看瘪贱,軟件性能就是軟件對(duì)于用戶操作的響應(yīng)時(shí)間纱控;從運(yùn)維的角度看,軟件性能表現(xiàn)在系統(tǒng)是否能夠提供給用戶穩(wěn)定菜秦、可靠的服務(wù)甜害;從開發(fā)角度看,軟件性能表現(xiàn)在如何通過(guò)調(diào)整代碼的設(shè)計(jì)和實(shí)現(xiàn)球昨,使其達(dá)到最高尔店。
? ? ? ? 角度不一樣,性能的理解是不一樣的主慰,不一定都是提高軟件的運(yùn)行速度嚣州,如銀行軟件,并不要求速度高共螺,需要的是穩(wěn)定運(yùn)行该肴,保證數(shù)據(jù)不出錯(cuò)
? ? ? ? 需要站在不同的角度看
(4)性能測(cè)試主要術(shù)語(yǔ)
? ? ? ? 并發(fā)數(shù):也叫做虛擬用戶數(shù),在同一時(shí)間點(diǎn)向系統(tǒng)發(fā)送產(chǎn)生的交互數(shù)量藐不,如12306搶票沙庐,八點(diǎn)開始搶,八點(diǎn)整大家一起開始搶票佳吞,如果有100個(gè)人正在搶拱雏,那這個(gè)100就是一個(gè)并發(fā)數(shù)
? ? ? ? 注冊(cè)用戶數(shù):指當(dāng)前系統(tǒng)中全部注冊(cè)的用戶數(shù)量,和并發(fā)數(shù)不一樣底扳,并發(fā)數(shù)指和系統(tǒng)產(chǎn)生交互操作的數(shù)量铸抑,注冊(cè)數(shù)量只是注冊(cè),并沒(méi)有產(chǎn)生交互
? ? ? ? 在線用戶數(shù):當(dāng)前系統(tǒng)時(shí)間段內(nèi)衷模,登錄系統(tǒng)的用戶數(shù)量鹊汛,但在線用戶數(shù)并不一定都和系統(tǒng)產(chǎn)生了交互
? ? ? ? 事務(wù):比如登錄網(wǎng)站,輸入用戶名阱冶、密碼刁憋、點(diǎn)擊登錄,這三個(gè)操作就可以看成一個(gè)事務(wù)木蹬,即登錄事務(wù)
? ? ? ? TPS:每秒通過(guò)的事務(wù)數(shù)至耻,即每秒處理的事務(wù)數(shù)量,它是衡量系統(tǒng)處理能力的重要指標(biāo)
? ? ? ? 吞吐量:比如被測(cè)系統(tǒng)所產(chǎn)生的數(shù)據(jù)流量,點(diǎn)擊網(wǎng)頁(yè)尘颓,網(wǎng)頁(yè)是10M走触,這10M就是產(chǎn)生的數(shù)據(jù)流量,如果有10個(gè)人點(diǎn)擊疤苹,那就是10*10的數(shù)據(jù)流量互广,即為網(wǎng)頁(yè)的吞吐量
? ? ? ? 每秒點(diǎn)擊率:客戶端每秒真正發(fā)給服務(wù)端請(qǐng)求的數(shù)量,比如有個(gè)接口卧土,每秒向這個(gè)接口發(fā)送多少請(qǐng)求惫皱,這個(gè)不能反映系統(tǒng)的性能,只能反映客戶端向服務(wù)端發(fā)送請(qǐng)求的數(shù)量
? ? ? ? 思考時(shí)間:用戶訪問(wèn)這個(gè)網(wǎng)頁(yè)的停頓時(shí)間尤莺,比如輸入用戶名和密碼旅敷,要確定用戶名和密碼是否正確,這個(gè)等待時(shí)間就叫做思考時(shí)間
? ? ? ? 資源利用率:如cpu占用率缝裁,內(nèi)存使用率,IO等使用率和時(shí)間足绅,需要后臺(tái)監(jiān)控捷绑,才能看出來(lái)
3.性能測(cè)試流程
一般寫性能測(cè)試腳本時(shí),要進(jìn)行的操作:
? ? ? ? 需求分析氢妈,測(cè)試點(diǎn)提取(分析后粹污,要對(duì)哪些功能進(jìn)行性能測(cè)試,比如是要求網(wǎng)頁(yè)的tps達(dá)到1000還是2000首量,還是說(shuō)吞吐量達(dá)到多少壮吩;上面所說(shuō)的性能指標(biāo),每一個(gè)性能指標(biāo)就是一個(gè)測(cè)試點(diǎn)加缘,究竟要測(cè)試哪一個(gè)鸭叙,這里就要確定;如何提取測(cè)試點(diǎn):一般參考?xì)v史數(shù)據(jù)拣宏,歷史上測(cè)試點(diǎn)有哪些沈贝;客戶提出的;參考同行業(yè)勋乾、通項(xiàng)目性能測(cè)試的指標(biāo)宋下;業(yè)界通用的規(guī)則,大家都達(dá)到的一個(gè)性能指標(biāo))
? ? ? ? 指標(biāo)的評(píng)估:比如tps辑莫,要達(dá)到多大值学歧,如果是新系統(tǒng),會(huì)以自己測(cè)試標(biāo)準(zhǔn)為準(zhǔn)或者內(nèi)部制定標(biāo)準(zhǔn)各吨,以這個(gè)標(biāo)準(zhǔn)為起點(diǎn)進(jìn)行性能測(cè)試枝笨,循序漸進(jìn),慢慢提高
? ? ? ? 制定計(jì)劃:制定好后,和其他組進(jìn)行評(píng)估伺帘,如果沒(méi)評(píng)估通過(guò)昭躺,繼續(xù)制定,如果通過(guò)了伪嫁,就進(jìn)行下一步
? ? ? ? 搭建測(cè)試環(huán)境领炫,編寫用例,執(zhí)行用例张咳,調(diào)試用例帝洪,調(diào)試完查看是否達(dá)到要求
4.測(cè)試框架體系
(1)LoundRunner
? ? ? ? Loundrunner:分為三個(gè)小的功能點(diǎn),即三大組件:編寫代碼組件脚猾、場(chǎng)景組件葱峡、分析組件
? ? ? ? 編寫代碼組件、場(chǎng)景組件龙助、分析組件都要使用起來(lái)砰奕,一般都是先把腳本寫好,去掉腳本中沒(méi)用的信息提鸟,再進(jìn)行場(chǎng)景設(shè)計(jì)军援,如每隔多少秒添加一個(gè)用戶,登錄場(chǎng)景:每隔多少秒登錄多少個(gè)用戶称勋,多長(zhǎng)時(shí)間達(dá)到一個(gè)最大用戶數(shù)胸哥,中途連續(xù)執(zhí)行多長(zhǎng)時(shí)間,達(dá)到連續(xù)時(shí)間后每隔多少秒減少多少用戶赡鲜,多長(zhǎng)時(shí)間把最大用戶減為0空厌,跑完后就會(huì)有個(gè)報(bào)告,然后用分析組件進(jìn)行分析银酬,便會(huì)產(chǎn)生一些參數(shù)值或信息
? ? ? ? 不要指望軟件就會(huì)提供系統(tǒng)的性能問(wèn)題嘲更,性能指標(biāo)都是人工分析出來(lái)的,軟件永遠(yuǎn)不會(huì)提供揩瞪,性能測(cè)試并不是對(duì)性能測(cè)試工具的了解哮内,而是長(zhǎng)期的經(jīng)驗(yàn)積累。
? ? ? ? Loundrunner也可以做接口性能測(cè)試壮韭。
(2)Jmeter
? ? ? ? 主要做接口性能測(cè)試北发。可以單獨(dú)做接口測(cè)試喷屋,也可以做接口性能測(cè)試
? ? ? ? 資源利用率:IO利用率琳拨、內(nèi)存、cpu利用率屯曹,如果服務(wù)器是linux的狱庇,需要在linux服務(wù)器下添加插件惊畏,監(jiān)控系統(tǒng)的指標(biāo),跑性能測(cè)試腳本的時(shí)候(shell腳本或插件)密任,會(huì)將這段時(shí)間的cpu等的指標(biāo)收集起來(lái)颜启,Jemeter/Loundrunner生成的報(bào)告和linux監(jiān)控信息綜合起來(lái),具體確定哪個(gè)地方會(huì)產(chǎn)生問(wèn)題
? ? ? ? 常用的:Jenkins+Jmeter+Ant
(3)Soapui
(4)Linux
(5)服務(wù)器中間件調(diào)優(yōu)
? ? ? ? tomcat浪讳、appach缰盏、ant等,主要是一些配置文件的優(yōu)化淹遵,如果會(huì)appach優(yōu)化口猜,tomcat也就會(huì)了,參數(shù)大多數(shù)是一樣的透揣,比如請(qǐng)求數(shù)济炎、最大鏈接數(shù)
? ? ? ? MaxRequestsPerChild:每個(gè)子進(jìn)程在其生存期內(nèi)允許伺候的最大請(qǐng)求數(shù)量,默認(rèn)為10000辐真。到達(dá)MaxRequestsPerChild的限制后须尚,子進(jìn)程將會(huì)結(jié)束。如果MaxRequestsPerChild為"0"侍咱,子進(jìn)程將永遠(yuǎn)不會(huì)結(jié)束耐床。
? ? ? ? 中間件配置優(yōu)化,并不是某些參數(shù)配的越高越好放坏,講究一個(gè)平衡咙咽,各個(gè)參數(shù)平衡老玛,才能最優(yōu)
(6)數(shù)據(jù)庫(kù):mysql優(yōu)化
? ? ? ? 抓取大范圍淤年,牽扯小范圍。如:mysql下蜡豹,把慢查詢打開麸粮,查到10條,挑出一條最慢的镜廉,進(jìn)行分析弄诲,是沒(méi)做索引?還是鏈接太長(zhǎng)娇唯?一般是先加索引齐遵,如果還沒(méi)有優(yōu)化,便可以把它拆開塔插,并不是所有的sql語(yǔ)句都要放到后端處理梗摇,可以拆開一部分放在前端,前端處理完后想许,傳給后端伶授,減輕了后端服務(wù)器的壓力
? ? ? ? 一般的做法是:分庫(kù)分表断序;多庫(kù)多表;主從分離
(7)JVM調(diào)優(yōu)
? ? ? ? 了解java基礎(chǔ)知識(shí):年輕代糜烹、年老代违诗、持久代分清楚,java配置文件中有這幾個(gè)代的占用內(nèi)存大小的配置疮蹦;jc诸迟,什么叫jc,jc是java中獨(dú)有的管理垃圾回收的策略挚币,系統(tǒng)自動(dòng)執(zhí)行亮蒋,如果有些類、方法加載后妆毕,長(zhǎng)期不使用,便會(huì)觸發(fā)jc垃圾處理機(jī)制
? ? ? ? jc內(nèi)存泄露:監(jiān)控jvm中年輕代笛粘、年老代以及類的占用內(nèi)存大小的時(shí)候趁怔,如果看到一些內(nèi)存信息被占用的越來(lái)越大薪前,那就有可能存在內(nèi)存泄漏了
? ? ? ? 一般jc之后示括,年輕代垛膝、年老代的內(nèi)存占用率會(huì)回到一個(gè)很低的值吼拥,然后再慢慢加枯跑,加到一定程度惨驶,又會(huì)觸發(fā)jc,再回到一個(gè)低點(diǎn)敛助,如果很有規(guī)律粗卜,基本沒(méi)有內(nèi)存泄漏
? ? ? ? 一般系統(tǒng)運(yùn)行很久之后,才能看出是否存在內(nèi)存泄漏
? ? ? ? jprofiler_windows:檢測(cè)內(nèi)存泄漏工具辜腺,可以模擬出當(dāng)前代碼是否存在內(nèi)存泄漏
(8)項(xiàng)目+框架
? ? ? ? 每個(gè)網(wǎng)站剛開始做并不是就有一個(gè)很好的優(yōu)化框架休建,都是一點(diǎn)點(diǎn)調(diào)優(yōu)乍恐,網(wǎng)頁(yè)結(jié)構(gòu)最初都是web服務(wù)器、數(shù)據(jù)服務(wù)器测砂、文檔服務(wù)器組成
? ? ? ? web數(shù)據(jù)從數(shù)據(jù)庫(kù)直接讀寫茵烈,支撐不了了再加入一些靜態(tài)數(shù)據(jù)庫(kù)緩存,web服務(wù)器端和數(shù)據(jù)庫(kù)服務(wù)器端加入cach緩存砌些,如ridis呜投,數(shù)據(jù)服務(wù)器就升級(jí)了
? ? ? ? 繼續(xù)發(fā)展,流量增加存璃、點(diǎn)擊量增加仑荐,沒(méi)法支撐,便會(huì)考慮部署集群纵东,集群部署簡(jiǎn)單說(shuō)就是多加幾臺(tái)服務(wù)器粘招,這時(shí)候就牽扯到負(fù)載均衡,它來(lái)控制瀏覽數(shù)據(jù)的時(shí)候到哪個(gè)服務(wù)器上取數(shù)據(jù)
? ? ? ? 數(shù)據(jù)庫(kù)越來(lái)越大偎球,查詢效率低洒扎,便會(huì)進(jìn)行數(shù)據(jù)庫(kù)分離,如分庫(kù)分表衰絮、多庫(kù)多表等袍冷,一般分為水平切分和垂直切分
? ? ? ? 不同業(yè)務(wù)存放到不同數(shù)據(jù)庫(kù),減輕壓力猫牡,比如將經(jīng)常用到的放到數(shù)據(jù)庫(kù)A上胡诗,用的很少的放到數(shù)據(jù)庫(kù)B
疑問(wèn)解答
(1)數(shù)據(jù)庫(kù)出現(xiàn)性能問(wèn)題,一般有哪些原因組成:
答:鎖表淌友,鎖表并不能影響性能煌恢,因?yàn)槎紵o(wú)法進(jìn)行操作,鎖表不屬于性能方面問(wèn)題亩进。一般都是索引設(shè)置不好症虑,語(yǔ)句拼寫太長(zhǎng)缩歪,各種查詢條件太多
(2)性能測(cè)試推薦書籍
答:如果沒(méi)有基礎(chǔ)归薛,淘寶、京東隨便找一本書都挺好的匪蝙,先看一本主籍。小強(qiáng)性能測(cè)試
? ? ? ? 性能測(cè)試,Jemeter逛球、Loundrunner只是性能測(cè)試工具千元,比如Loundruner錄制完,產(chǎn)生好多腳本颤绕,歸根結(jié)底還是以接口的形式在向網(wǎng)站發(fā)送請(qǐng)求幸海,所以一定要把接口弄明白
(3)Jemeter、Loundrunner、SoupUI都學(xué)會(huì)了欺缘,那應(yīng)該怎么選擇呢备闲?什么情況下用?
答:webservice接口測(cè)試挡篓,可以選擇soupui婉陷,基本不用編寫代碼
? ? ? ? http協(xié)議的接口測(cè)試,建議使用jmeter官研、loundrunner
? ? ? ?界面的性能測(cè)試秽澳,建議使用loundrunner
個(gè)人收獲
(1)對(duì)于一個(gè)小白來(lái)說(shuō),只是聽過(guò)性能測(cè)試這個(gè)名詞戏羽,對(duì)它究竟怎么測(cè)担神?怎么衡量,需要哪些知識(shí)始花,根本沒(méi)有概念杏瞻,這次分享,真是漲知識(shí)了衙荐,開闊了自己的眼界捞挥。
(2)公司也是剛開始進(jìn)行性能測(cè)試,現(xiàn)在也是在摸索階段忧吟,之前開會(huì)聽的時(shí)候有些東西因?yàn)闆](méi)有概念砌函,所以聽別人講起,只覺(jué)得很厲害溜族,這次分享之后讹俊,自己也知道他講的哪些是對(duì)的,哪些是錯(cuò)的了煌抒。
(3)對(duì)于性能測(cè)試仍劈,自己也知道如何下手了,先從掌握基礎(chǔ)知識(shí)開始寡壮。