第一節(jié) 測試的一般步驟
性能測試的工作是基于系統(tǒng)功能已經(jīng)完備或者已經(jīng)趨于完備之上的揖闸,在功能還不夠完備的情況下沒有多大的意義(后期功能完善上會對系統(tǒng)的性能有影響,過早進入性能測試會出現(xiàn)測試結(jié)果不準(zhǔn)確料身、浪費測試資源)汤纸;因此,性能測試首先是基于功能測試的惯驼,你必須了解其功能實現(xiàn)才能開展性能測試蹲嚣。
我們還是來逐步分解說明:
一個被測系統(tǒng)來了递瑰,我們需要分三塊來分析
入口:需要怎么發(fā)送請求,施壓方應(yīng)該施加多大的壓力隙畜,用什么方法施壓抖部;
被測系統(tǒng):系統(tǒng)怎么應(yīng)對單個請求,系統(tǒng)業(yè)務(wù)流程是怎么樣的议惰,系統(tǒng)網(wǎng)元節(jié)點慎颗、數(shù)據(jù)流向等,整體性能需求有沒有言询,需要考察哪些指標(biāo)俯萎,怎么監(jiān)控;
出口:接收數(shù)據(jù)有哪些运杭,怎么獲取和比對夫啊;
OK,是不是感覺就像功能測試差不了多少?是的辆憔,就是先分析單個用戶的功能流程以及系統(tǒng)的數(shù)據(jù)流向(包括后臺的數(shù)據(jù)流向)結(jié)構(gòu)圖撇眯,然后再考慮大量的用戶操作。
那么一般系統(tǒng)的性能測試步驟大體如下:
1) 確認(rèn)測試目標(biāo)
2) 分析被測系統(tǒng)業(yè)務(wù)需求
3) 分析被測系統(tǒng)的系統(tǒng)結(jié)構(gòu)
4) 分析被測系統(tǒng)的性能測試點
5) 設(shè)計測試方案虱咧、檢測方案和測試案例
6) 選擇測試工具
7) 測試開發(fā)
8) 測試執(zhí)行
9) 測試結(jié)果分析
10) 測試調(diào)優(yōu)熊榛、測試驗證、測試分析
11) 測試報告
第二節(jié) 測試準(zhǔn)備
測試準(zhǔn)備工作越充分后期的測試執(zhí)行越順利腕巡,一般測試準(zhǔn)備工作如下:
1) 確認(rèn)測試目標(biāo)
2) 分析被測系統(tǒng)的業(yè)務(wù)
3) 分析被測系統(tǒng)的結(jié)構(gòu)
4) 分析被測系統(tǒng)可能產(chǎn)生性能瓶頸的節(jié)點
5) 設(shè)計測試方案玄坦、檢測方案和測試方案
我們分步來研究一下:
確認(rèn)測試目標(biāo)
拿到一個任何任務(wù)首先都要確認(rèn)任務(wù)的目標(biāo)是什么。如果不知道目標(biāo)绘沉,你所做的任何努力得到的結(jié)果有可能都不是最終所需要的結(jié)果煎楣。
性能測試也一樣,它首先是有一個目標(biāo)的车伞。無論是你是隨機測試想看看系統(tǒng)的當(dāng)前性能情況转质,還是奔著對系統(tǒng)進行優(yōu)化而去的,還是檢驗一下系統(tǒng)的性能是否滿足需求帖世,等等休蟹,這些都是你再做事情之前的一個目標(biāo)。你后面所做的一切事情日矫,從分析到方案和案例設(shè)計赂弓,到測試執(zhí)行監(jiān)控,再到最后的測試分析和報告哪轿,都是要圍繞這個目標(biāo)展開的盈魁。
所以,首要的任務(wù)就是確認(rèn)測試的目標(biāo)要求窃诉,需要達(dá)到怎樣的一個測試目的和目標(biāo)杨耙。
有一些赤套,測試任務(wù)沒有明確的目標(biāo)或者要求,并不說明它沒有目的和目標(biāo)珊膜,這就需要我們進行溝通和分析了容握。
溝通就是要和項目組達(dá)成一致的目的要求;分析车柠,分析需求剔氏,分析系統(tǒng),最后也是要明確項目或者系統(tǒng)測試任務(wù)的目的要求竹祷。
分析被測系統(tǒng)的業(yè)務(wù)
曾經(jīng)在一次面試中谈跛,有一位面試官給了我這樣一個題目:“有一個網(wǎng)站,只知道它的總訪問量一天是300萬塑陵,怎么測試它的性能感憾?”,大家想一想要怎么設(shè)計方案令花?
------猜想面試官是想面試者回答吹菱,正態(tài)分布、二八原理等基本的測試原則應(yīng)用彭则。
我當(dāng)時沒有回答任何與正態(tài)分布、二八原理相關(guān)的東西占遥;記得當(dāng)時面試官對我的回答好像是“蔑視”的笑了笑俯抖;可能是覺著“連基本的正態(tài)分布、二八原理都不知道瓦胎,還搞性能測試芬萍?”。其實搔啊,性能測試并不是想象的那樣簡單柬祠,并不是一個簡單的原理的應(yīng)用就行的,如果這么容易负芋,那豈不是誰都能搞漫蛔。
性能測試的基礎(chǔ)是基于系統(tǒng)的業(yè)務(wù)功能基本趨于穩(wěn)定,首要的任務(wù)就是性能在系統(tǒng)滿足業(yè)務(wù)功能需求上展開旧蛾,因此我們必須要分析系統(tǒng)的業(yè)務(wù)莽龟。不管是普通的網(wǎng)站也好還是比較專業(yè)的系統(tǒng)也好,它都是有業(yè)務(wù)功能需求的锨天,所有的性能測試都要基于這些功能才能進行毯盈,脫離了業(yè)務(wù)功能的性能測試沒有意義。性能測試所以首要的任務(wù)就是分析系統(tǒng)的業(yè)務(wù)功能病袄,分析系統(tǒng)業(yè)務(wù)上的性能限制搂赋,也就是業(yè)務(wù)需求赘阀。
那么怎么分析系統(tǒng)的業(yè)務(wù)需求呢?
(1) 如果有用戶需求規(guī)格說明脑奠,首要的任務(wù)就是閱讀和理解分析用戶需求規(guī)格說明基公;
(2) 如果沒有用戶需求規(guī)格說明,那么就需要分析系統(tǒng)功能捺信,提煉出系統(tǒng)的業(yè)務(wù)需求酌媒。如果可能,項目組比較熟悉的人講述一遍是最好的了迄靠。
(3) 最后無論哪一種秒咨,最好的方法就是按照自己的理解畫出系統(tǒng)的業(yè)務(wù)流程或者系統(tǒng)的功能結(jié)構(gòu)圖,拿到項目組進行確認(rèn)掌挚。一定要進行確認(rèn)雨席,和整個項目組達(dá)成一致的認(rèn)同。
有人會說吠式,我們自由測試沒有項目組可確認(rèn)的時候怎么辦陡厘?
還是一樣,需要從分析入手特占。如果不分析糙置,你就不會知道系統(tǒng)的功能數(shù)據(jù)流向,請求的數(shù)據(jù)構(gòu)成是目,系統(tǒng)的網(wǎng)元結(jié)構(gòu)谤饭,以及系統(tǒng)可能出現(xiàn)的瓶頸在哪一個節(jié)點,你又怎么進行優(yōu)化呢懊纳?
當(dāng)然面對一種全新的知識領(lǐng)域的時候揉抵,可能需要我們多積累經(jīng)驗,更多的進行分析嗤疯;我們可能需要結(jié)合實踐冤今,多次實際運行系統(tǒng)或者執(zhí)行測試,在測試中不斷的進行優(yōu)化和完善我們的分析過程茂缚、分析結(jié)果戏罢、測試方案、測試開發(fā)甚至是測試執(zhí)行等等脚囊。
分析被測系統(tǒng)的業(yè)務(wù)帖汞,有時候不是一蹴而就,需要我們進行多次反復(fù)的分析凑术、確認(rèn)和再分析翩蘸、再確認(rèn),直到把系統(tǒng)弄明白淮逊,甚至有可能在測試執(zhí)行的最后階段你還需要再次進行分析和確認(rèn)催首,然后重新規(guī)劃測試扶踊。
分析被測系統(tǒng)的結(jié)構(gòu)
系統(tǒng)的結(jié)構(gòu)和系統(tǒng)的業(yè)務(wù)一樣重要,不知道系統(tǒng)的網(wǎng)元結(jié)構(gòu)可能就沒有辦法進行監(jiān)控郎任,就沒有辦法知道瓶頸在哪個節(jié)點秧耗,就不能進行優(yōu)化。
分析系統(tǒng)的結(jié)構(gòu)舶治,最好的方法就是項目組提供系統(tǒng)的部署和構(gòu)成圖分井;如果項目組不能提供或者沒有項目組,那就需要用TCPDUMP等抓包工具霉猛,分析數(shù)據(jù)流向尺锚。
TCPDUMP的使用:
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
(1)tcp: ip icmp arp rarp 和 tcp、udp惜浅、icmp這些選項等都要放到第一個參數(shù)的位置瘫辩,用來過濾數(shù)據(jù)報的類型
(2)-i eth1 : 只抓經(jīng)過接口eth1的包
(3)-t : 不顯示時間戳
(4)-s 0 : 抓取數(shù)據(jù)包時默認(rèn)抓取長度為68字節(jié)。加上-S 0 后可以抓到完整的數(shù)據(jù)包
(5)-c 100 : 只抓取100個數(shù)據(jù)包
(6)dst port ! 22 : 不抓取目標(biāo)端口是22的數(shù)據(jù)包
(7)src net 192.168.1.0/24 : 數(shù)據(jù)包的源網(wǎng)絡(luò)地址為192.168.1.0/24
(8)-w ./target.cap : 保存成cap文件坛悉,方便用ethereal(即wireshark)分析
從第一個節(jié)點分析流向到哪伐厌,確定第二層的節(jié)點;
然后從第二層每個節(jié)點分析第三層節(jié)點裸影,逐層分析挣轨,完善系統(tǒng)的數(shù)據(jù)流向的所有機構(gòu)層次和節(jié)點;
然后再弄明白每個節(jié)點部署的應(yīng)用程序或者進程隊列轩猩;
對每一個節(jié)點的應(yīng)用程序或者進程隊列進行測試監(jiān)控卷扮;
最后才能得出哪些應(yīng)用或者進程隊列需要進行優(yōu)化。
弄明白系統(tǒng)的節(jié)點構(gòu)成之外界轩,還需要弄明白各個節(jié)點之間的通訊協(xié)議和數(shù)據(jù)格式,后面的測試工具選擇和測試數(shù)據(jù)準(zhǔn)備以及測試腳本開發(fā)就需要你明白這些衔瓮。
這一切的基礎(chǔ)就是要分析和弄明白系統(tǒng)的所有節(jié)點浊猾,也就是要分析清楚系統(tǒng)的結(jié)構(gòu)。
分析系統(tǒng)可能的性能瓶頸
分析系統(tǒng)的業(yè)務(wù)需求和系統(tǒng)的結(jié)構(gòu)組成热鞍,同時預(yù)判系統(tǒng)可能存在的性能瓶頸葫慎,這是分析中的一個目標(biāo);得到預(yù)判的性能瓶頸后我們后面需要在監(jiān)控的時候多注意一下這些節(jié)點薇宠。
當(dāng)然有一些常見的可能會是系統(tǒng)瓶頸的節(jié)點我們需要注意:
(1) 登錄偷办,一般系統(tǒng)登錄要進行多種校驗,可能數(shù)據(jù)交互比較頻繁;
(2) 下單,搶單刺彩、搶紅包這個時候會有一定量的并發(fā)需求油坝;
(3) 大數(shù)據(jù)的查詢掸宛、統(tǒng)計和報表分析贴见,會對系統(tǒng)產(chǎn)生壓力佑力;
(4) 視頻筋量、動畫等會對網(wǎng)絡(luò)產(chǎn)生壓力湖苞;
(5) 消息比較集中的系統(tǒng)功能節(jié)點拯欧,會對系統(tǒng)產(chǎn)生壓力;
(6) 一些特殊的業(yè)務(wù)需求會對系統(tǒng)產(chǎn)生壓力财骨;
常見的瓶頸:
(1) 數(shù)據(jù)庫的瓶頸一般在磁盤IOPS過高造成進程阻塞
(2) 系統(tǒng)進程數(shù)過多一般會消耗系統(tǒng)的內(nèi)存空間
(3) 消息隊列和緩存服務(wù)镐作,開啟持久化后會需要考察磁盤IOPS,不開啟持久化則需要考察內(nèi)存占用
(4) 頻繁的管道開辟和銷毀會導(dǎo)致CPU占用較高
(5) 有部分程序結(jié)構(gòu)上不能利用多個CPU
等等B÷帷8眉帧!
在分析業(yè)務(wù)和系統(tǒng)結(jié)構(gòu)的過程中摘仅,我們就需要考慮這個業(yè)務(wù)點或者結(jié)構(gòu)點會不會有大量的數(shù)據(jù)訪問靶庙,會不會產(chǎn)生壓力,我們的設(shè)計會不會產(chǎn)生性能瓶頸娃属。
方案和案例設(shè)計
測試方案的以及最后測試方案文檔的形成六荒,實際就是上面所有分析工作的總結(jié)。
你寫測試方案的過程就是明確測試目的目標(biāo)矾端、分析業(yè)務(wù)需求掏击、系統(tǒng)結(jié)構(gòu)以及評估測試方法、測試安排秩铆、測試風(fēng)險等等的過程總結(jié)砚亭。而這些全部來源于你在測試執(zhí)行之前的分析,有時候可能你在測試過程中還需要做出一些分析和調(diào)整殴玛。
測試方案包含了這些你分析和整理的各個方面捅膘。
一個好的測試方案包含的內(nèi)容:測試目的目標(biāo)、內(nèi)容(可能包含業(yè)務(wù)性能滚粟、可靠性寻仗、穩(wěn)定性等等),業(yè)務(wù)需求目標(biāo)凡壤,系統(tǒng)業(yè)務(wù)構(gòu)成署尤,系統(tǒng)節(jié)點構(gòu)成,測試方法流程亚侠,需要監(jiān)控的指標(biāo)要求和節(jié)點等等曹体。
測試案例,實際上一般需要包含在測試方案中硝烂;測試案例箕别,實際上就是普通的業(yè)務(wù)操作流程,用測試工具或者其他測試手段來模擬大的數(shù)據(jù)量業(yè)務(wù)操作,并對系統(tǒng)的各個節(jié)點進行監(jiān)控究孕,獲取監(jiān)控數(shù)據(jù)啥酱。預(yù)期的監(jiān)控數(shù)據(jù)和實際監(jiān)控數(shù)據(jù)的對比,滿足要求就是預(yù)期要求厨诸,實際對比結(jié)果就是測試結(jié)果镶殷。
作 者:?自動化軟件測試?
出 處:微信公眾號:自動化軟件測試平臺
版權(quán)說明:歡迎轉(zhuǎn)載,但必須注明出處微酬,并在文章頁面明顯位置給出文章鏈接