性能測(cè)試新手誤區(qū)(一):找不到測(cè)試點(diǎn),不知為何而測(cè)
性能測(cè)試新手誤區(qū)(二):為什么我模擬的百萬(wàn)測(cè)試數(shù)據(jù)是無(wú)效的?
性能測(cè)試新手誤區(qū)(三):用戶數(shù)與壓力
性能測(cè)試新手誤區(qū)(四):一切來(lái)自錄制
經(jīng)常會(huì)見(jiàn)到新人提出這樣的性能問(wèn)題:
“100用戶時(shí),A操作響應(yīng)時(shí)間達(dá)到了XX秒,請(qǐng)修改。”
面對(duì)這樣的問(wèn)題,開(kāi)發(fā)人員一定會(huì)覺(jué)得很無(wú)助,他們甚至不知道問(wèn)題是什么。
即使從測(cè)試人員的角度來(lái)看,這也算不上是一個(gè)合格的問(wèn)題。
那么一個(gè)好的性能問(wèn)題應(yīng)該是什么樣呢?
好問(wèn)題要描述清晰
100個(gè)用戶,是指絕對(duì)并發(fā)操作么?還是什么樣的場(chǎng)景?
是只測(cè)這一個(gè)A操作?還是有多個(gè)操作在同時(shí)進(jìn)行?
如果有多個(gè)操作,是只有這一個(gè)操作變慢?還是普遍變慢?
測(cè)試環(huán)境是什么樣的?測(cè)試數(shù)據(jù)量是多少?
也許開(kāi)發(fā)人員理解了詳細(xì)的測(cè)試場(chǎng)景后,會(huì)告訴你,這個(gè)場(chǎng)景在業(yè)務(wù)中是不可能的,或者測(cè)試數(shù)據(jù)量是不合理的。
好問(wèn)題要有盡量準(zhǔn)確的定位
只是描述清晰還不夠,要明白什么是表面現(xiàn)象,什么才是問(wèn)題。
問(wèn)題是需要定位才能發(fā)現(xiàn)的。
“100個(gè)用戶操作時(shí),A事務(wù)的響應(yīng)時(shí)間過(guò)長(zhǎng)”,這只是一個(gè)現(xiàn)象,問(wèn)題是什么呢?
響應(yīng)慢是慢在哪?是中間件還是數(shù)據(jù)庫(kù)?這是最基本的分層定位。
是服務(wù)器達(dá)到了硬件瓶頸么?如果硬件或操作系統(tǒng)上沒(méi)有瓶頸,那么瓶頸在哪?
是不是由于一些基本配置問(wèn)題導(dǎo)致了排隊(duì)呢?比如中間件的HTTP線程數(shù)和數(shù)據(jù)庫(kù)的連接數(shù)。
如果基本配置沒(méi)有問(wèn)題,那么再深入一些,是內(nèi)部的哪些資源產(chǎn)生了爭(zhēng)用和等待么?
是哪些SQL引起了數(shù)據(jù)庫(kù)內(nèi)部資源的爭(zhēng)用呢?應(yīng)用程序上又是哪個(gè)方法在占用資源呢?
……
定位的越深入,需要的技術(shù)能力也就越高。
好問(wèn)題應(yīng)該用最簡(jiǎn)單的手段復(fù)現(xiàn)
比如上面的100個(gè)用戶,導(dǎo)致了數(shù)據(jù)庫(kù)的一張表的爭(zhēng)用,因此產(chǎn)生了大量鎖等待現(xiàn)象,最終導(dǎo)致了外部的A響應(yīng)時(shí)間過(guò)長(zhǎng)。但是通過(guò)之前的分析和定位,我們發(fā)現(xiàn)也許引發(fā)問(wèn)題的那些SQL語(yǔ)句,只來(lái)自100用戶中的10個(gè)特殊類(lèi)型的用戶。那么這個(gè)問(wèn)題就完全可以簡(jiǎn)化成用10個(gè)用戶去復(fù)現(xiàn),其他90個(gè)用戶都是干擾。這樣問(wèn)題被簡(jiǎn)化了,開(kāi)發(fā)人員也就更容易理解問(wèn)題,對(duì)于測(cè)試的復(fù)測(cè)也更加方便。
不過(guò)還是要記住,最終的用戶場(chǎng)景模擬才是決定性的驗(yàn)證。
最后再總結(jié)一下,性能問(wèn)題到底應(yīng)該如何提呢?其實(shí)只有一個(gè)標(biāo)準(zhǔn),那就是能讓開(kāi)發(fā)理解問(wèn)題、找到根本原因并進(jìn)行修正的就夠了(假設(shè)開(kāi)發(fā)人員無(wú)所不能)。再進(jìn)一步深入的分析,可能是為了減輕開(kāi)發(fā)的一些負(fù)擔(dān),也可能是為了鍛煉自己的能力,這就不是每個(gè)測(cè)試人員都會(huì)去做的了。